diff --git a/index.html b/index.html index cd335ef..fef106d 100644 --- a/index.html +++ b/index.html @@ -48,7 +48,8 @@ - + + diff --git a/js/app.js b/js/app.js index 3d24aad..33fdfa5 100644 --- a/js/app.js +++ b/js/app.js @@ -1,7 +1,7 @@ 'use strict'; // Declare app level module which depends on filters, and services -angular.module('podcasts', ['podcasts.services', 'podcasts.updater', 'podcasts.database', 'podcast.directives', 'podcasts.importer', 'podcasts.router']). +angular.module('podcasts', ['ngRoute', 'podcasts.services', 'podcasts.updater', 'podcasts.database', 'podcast.directives', 'podcasts.importer', 'podcasts.router']). config(['$routeProvider', function($routeProvider) { $routeProvider.when('/feeds', {templateUrl: 'partials/listFeeds.html', controller: FeedListCtrl}); $routeProvider.when('/feed/:feedId', {templateUrl: 'partials/feed.html', controller: FeedCtrl}); diff --git a/lib/angular/angular-animate.js b/lib/angular/angular-animate.js new file mode 100755 index 0000000..3d2b73c --- /dev/null +++ b/lib/angular/angular-animate.js @@ -0,0 +1,677 @@ +/** + * @license AngularJS v1.2.0rc1 + * (c) 2010-2012 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +/** + * @ngdoc overview + * @name ngAnimate + * @description + * + * ngAnimate + * ========= + * + * The ngAnimate module is an optional module that comes packed with AngularJS that can be included within an AngularJS + * application to provide support for CSS and JavaScript animation hooks. + * + * To make use of animations with AngularJS, the `angular-animate.js` JavaScript file must be included into your application + * and the `ngAnimate` module must be included as a dependency. + * + *
+ * angular.module('App', ['ngAnimate']);
+ * 
+ * + * Then, to see animations in action, all that is required is to define the appropriate CSS classes + * or to register a JavaScript animation via the $animation service. The directives that support animation automatically are: + * `ngRepeat`, `ngInclude`, `ngSwitch`, `ngShow`, `ngHide` and `ngView`. Custom directives can take advantage of animation + * by using the `$animate` service. + * + * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives: + * + * | Directive | Supported Animations | + * |---------------------------------------------------------- |----------------------------------------------------| + * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move | + * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave | + * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave | + * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave | + * | {@link ng.directive:ngIf#animations ngIf} | enter and leave | + * | {@link ng.directive:ngShow#animations ngClass} | add and remove | + * | {@link ng.directive:ngShow#animations ngShow & ngHide} | add and remove (the ng-hide class value) | + * + * You can find out more information about animations upon visiting each directive page. + * + * Below is an example of how to apply animations to a directive that supports animation hooks: + * + *
+ * 
+ *
+ * 
+ * 
+ * 
+ * + * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's + * animation has completed. + * + *

CSS-defined Animations

+ * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes + * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported + * and can be used to play along with this naming structure. + * + * The following code below demonstrates how to perform animations using **CSS transitions** with Angular: + * + *
+ * 
+ *
+ * 
+ *
+ *
+ *
+ * + * The following code below demonstrates how to perform animations using **CSS animations** with Angular: + * + *
+ * 
+ *
+ * 
+ *
+ *
+ *
+ * + * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing. + * + * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add + * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically + * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be + * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end + * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element + * has no CSS transition/animation classes applied to it. + * + *

JavaScript-defined Animations

+ * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not + * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module. + * + *
+ * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.
+ * var ngModule = angular.module('YourApp', []);
+ * ngModule.animation('.my-crazy-animation', function() {
+ *   return {
+ *     enter: function(element, done) {
+ *       //run the animation
+ *       //!annotate Cancel Animation|This function (if provided) will perform the cancellation of the animation when another is triggered
+ *       return function(element, done) {
+ *         //cancel the animation
+ *       }
+ *     }
+ *     leave: function(element, done) { },
+ *     move: function(element, done) { },
+ *     show: function(element, done) { },
+ *     hide: function(element, done) { },
+ *     addClass: function(element, className, done) { },
+ *     removeClass: function(element, className, done) { },
+ *   }
+ * });
+ * 
+ * + * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run + * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits + * the element's CSS class attribute value and then run the matching animation event function (if found). + * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function + * be executed. It should be also noted that only simple class selectors are allowed. + * + * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned. + * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run, + * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation + * or transition code that is defined via a stylesheet). + * + */ + +angular.module('ngAnimate', ['ng']) + + /** + * @ngdoc object + * @name ngAnimate.$animateProvider + * @description + * + * The $AnimationProvider provider allows developers to register and access custom JavaScript animations directly inside + * of a module. When an animation is triggered, the $animate service will query the $animation function to find any + * animations that match the provided name value. + * + * Please visit the {@link ngAnimate ngAnimate} module overview page learn more about how to use animations in your application. + * + */ + .config(['$provide', '$animateProvider', function($provide, $animateProvider) { + var noop = angular.noop; + var forEach = angular.forEach; + var selectors = $animateProvider.$$selectors; + + var NG_ANIMATE_STATE = '$$ngAnimateState'; + var rootAnimateState = {running:true}; + $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout', + function($delegate, $injector, $sniffer, $rootElement, $timeout) { + + $rootElement.data(NG_ANIMATE_STATE, rootAnimateState); + + function lookup(name) { + if (name) { + var matches = [], + flagMap = {}, + classes = name.substr(1).split('.'); + + //the empty string value is the default animation + //operation which performs CSS transition and keyframe + //animations sniffing. This is always included for each + //element animation procedure + classes.push(''); + + for(var i=0; i < classes.length; i++) { + var klass = classes[i], + selectorFactoryName = selectors[klass]; + if(selectorFactoryName && !flagMap[klass]) { + matches.push($injector.get(selectorFactoryName)); + flagMap[klass] = true; + } + } + return matches; + } + } + + /** + * @ngdoc object + * @name ngAnimate.$animate + * @requires $timeout, $sniffer, $rootElement + * @function + * + * @description + * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) + * as well as during addClass and removeClass operations. When any of these operations are run, the $animate service + * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object) + * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run. + * + * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives + * will work out of the box without any extra configuration. + * + * Please visit the {@link ngAnimate ngAnimate} module overview page learn more about how to use animations in your application. + * + */ + return { + /** + * @ngdoc function + * @name ngAnimate.$animate#enter + * @methodOf ngAnimate.$animate + * @function + * + * @description + * Appends the element to the parent element that resides in the document and then runs the enter animation. Once + * the animation is started, the following CSS classes will be present on the element for the duration of the animation: + * + * Below is a breakdown of each step that occurs during enter animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------|-----------------------------------------------| + * | 1. $animate.enter(...) is called | class="my-animation" | + * | 2. element is inserted into the parent element or beside the after element | class="my-animation" | + * | 3. the .ng-enter class is added to the element | class="my-animation ng-enter" | + * | 4. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-enter" | + * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-enter" | + * | 6. the .ng-enter-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-enter ng-enter-active" | + * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-enter ng-enter-active" | + * | 8. The animation ends and both CSS classes are removed from the element | class="my-animation" | + * | 9. The done() callback is fired (if provided) | class="my-animation" | + * + * @param {jQuery/jqLite element} element the element that will be the focus of the enter animation + * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the enter animation + * @param {jQuery/jqLite element} after the sibling element (which is the previous element) of the element that will be the focus of the enter animation + * @param {function()=} done callback function that will be called once the animation is complete + */ + enter : function(element, parent, after, done) { + $delegate.enter(element, parent, after); + performAnimation('enter', 'ng-enter', element, parent, after, done); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#leave + * @methodOf ngAnimate.$animate + * @function + * + * @description + * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once + * the animation is started, the following CSS classes will be added for the duration of the animation: + * + * Below is a breakdown of each step that occurs during enter animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------|----------------------------------------------| + * | 1. $animate.leave(...) is called | class="my-animation" | + * | 2. the .ng-leave class is added to the element | class="my-animation ng-leave" | + * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-leave" | + * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-leave" | + * | 5. the .ng-leave-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-leave ng-leave-active | + * | 6. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-leave ng-leave-active | + * | 7. The animation ends and both CSS classes are removed from the element | class="my-animation" | + * | 8. The element is removed from the DOM | ... | + * | 9. The done() callback is fired (if provided) | ... | + * + * @param {jQuery/jqLite element} element the element that will be the focus of the leave animation + * @param {function()=} done callback function that will be called once the animation is complete + */ + leave : function(element, done) { + performAnimation('leave', 'ng-leave', element, null, null, function() { + $delegate.leave(element, done); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#move + * @methodOf ngAnimate.$animate + * @function + * + * @description + * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parent container or + * add the element directly after the after element if present. Then the move animation will be run. Once + * the animation is started, the following CSS classes will be added for the duration of the animation: + * + * Below is a breakdown of each step that occurs during move animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------|---------------------------------------------| + * | 1. $animate.move(...) is called | class="my-animation" | + * | 2. element is moved into the parent element or beside the after element | class="my-animation" | + * | 3. the .ng-move class is added to the element | class="my-animation ng-move" | + * | 4. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-move" | + * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-move" | + * | 6. the .ng-move-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-move ng-move-active" | + * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-move ng-move-active" | + * | 8. The animation ends and both CSS classes are removed from the element | class="my-animation" | + * | 9. The done() callback is fired (if provided) | class="my-animation" | + * + * @param {jQuery/jqLite element} element the element that will be the focus of the move animation + * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the move animation + * @param {jQuery/jqLite element} after the sibling element (which is the previous element) of the element that will be the focus of the move animation + * @param {function()=} done callback function that will be called once the animation is complete + */ + move : function(element, parent, after, done) { + $delegate.move(element, parent, after); + performAnimation('move', 'ng-move', element, null, null, done); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#addClass + * @methodOf ngAnimate.$animate + * + * @description + * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class. + * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide + * the animate service the setup and active CSS classes in order to trigger the animation. + * + * Below is a breakdown of each step that occurs during addClass animation: + * + * | Animation Step | What the element class attribute looks like | + * |------------------------------------------------------------------------------------------------|---------------------------------------------| + * | 1. $animate.addClass(element, 'super') is called | class="" | + * | 2. the .super-add class is added to the element | class="super-add" | + * | 3. $animate runs any JavaScript-defined animations on the element | class="super-add" | + * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="super-add" | + * | 5. the .super-add-active class is added (this triggers the CSS transition/animation) | class="super-add super-add-active" | + * | 6. $animate waits for X milliseconds for the animation to complete | class="super-add super-add-active" | + * | 7. The animation ends and both CSS classes are removed from the element | class="" | + * | 8. The super class is added to the element | class="super" | + * | 9. The done() callback is fired (if provided) | class="super" | + * + * @param {jQuery/jqLite element} element the element that will be animated + * @param {string} className the CSS class that will be animated and then attached to the element + * @param {function()=} done callback function that will be called once the animation is complete + */ + addClass : function(element, className, done) { + performAnimation('addClass', className, element, null, null, function() { + $delegate.addClass(element, className, done); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#removeClass + * @methodOf ngAnimate.$animate + * + * @description + * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value + * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in + * order to provide the animate service the setup and active CSS classes in order to trigger the animation. + * + * Below is a breakdown of each step that occurs during removeClass animation: + * + * | Animation Step | What the element class attribute looks like | + * |-----------------------------------------------------------------------------------------------|-------------------------------------------------| + * | 1. $animate.removeClass(element, 'super') is called | class="super" | + * | 2. the .super-remove class is added to the element | class="super super-remove" | + * | 3. $animate runs any JavaScript-defined animations on the element | class="super super-remove" | + * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="super super-remove" | + * | 5. the .super-remove-active class is added (this triggers the CSS transition/animation) | class="super super-remove super-remove-active" | + * | 6. $animate waits for X milliseconds for the animation to complete | class="super super-remove super-remove-active" | + * | 7. The animation ends and both CSS all three classes are removed from the element | class="" | + * | 8. The done() callback is fired (if provided) | class="" | + * + * @param {jQuery/jqLite element} element the element that will be animated + * @param {string} className the CSS class that will be animated and then removed from the element + * @param {function()=} done callback function that will be called once the animation is complete + */ + removeClass : function(element, className, done) { + performAnimation('removeClass', className, element, null, null, function() { + $delegate.removeClass(element, className, done); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#enabled + * @methodOf ngAnimate.$animate + * @function + * + * @param {boolean=} value If provided then set the animation on or off. + * @return {boolean} Current animation state. + * + * @description + * Globally enables/disables animations. + * + */ + enabled : function(value) { + if (arguments.length) { + rootAnimateState.running = !value; + } + return !rootAnimateState.running; + } + }; + + /* + all animations call this shared animation triggering function internally. + The event variable refers to the JavaScript animation event that will be triggered + and the className value is the name of the animation that will be applied within the + CSS code. Element, parent and after are provided DOM elements for the animation + and the onComplete callback will be fired once the animation is fully complete. + */ + function performAnimation(event, className, element, parent, after, onComplete) { + var classes = (element.attr('class') || '') + ' ' + className; + var animationLookup = (' ' + classes).replace(/\s+/g,'.'), + animations = []; + forEach(lookup(animationLookup), function(animation, index) { + animations.push({ + start : animation[event] + }); + }); + + if (!parent) { + parent = after ? after.parent() : element.parent(); + } + var disabledAnimation = { running : true }; + + //skip the animation if animations are disabled, a parent is already being animated + //or the element is not currently attached to the document body. + if ((parent.inheritedData(NG_ANIMATE_STATE) || disabledAnimation).running) { + //avoid calling done() since there is no need to remove any + //data or className values since this happens earlier than that + //and also use a timeout so that it won't be asynchronous + $timeout(onComplete || noop, 0, false); + return; + } + + var ngAnimateState = element.data(NG_ANIMATE_STATE) || {}; + + //if an animation is currently running on the element then lets take the steps + //to cancel that animation and fire any required callbacks + if(ngAnimateState.running) { + cancelAnimations(ngAnimateState.animations); + ngAnimateState.done(); + } + + element.data(NG_ANIMATE_STATE, { + running:true, + animations:animations, + done:done + }); + + var baseClassName = className; + if(event == 'addClass') { + className = suffixClasses(className, '-add'); + } else if(event == 'removeClass') { + className = suffixClasses(className, '-remove'); + } + + element.addClass(className); + + forEach(animations, function(animation, index) { + var fn = function() { + progress(index); + }; + + if(animation.start) { + if(event == 'addClass' || event == 'removeClass') { + animation.endFn = animation.start(element, baseClassName, fn); + } else { + animation.endFn = animation.start(element, fn); + } + } else { + fn(); + } + }); + + function cancelAnimations(animations) { + var isCancelledFlag = true; + forEach(animations, function(animation) { + (animation.endFn || noop)(isCancelledFlag); + }); + } + + function progress(index) { + animations[index].done = true; + (animations[index].endFn || noop)(); + for(var i=0;i 0 ? ' ' : '') + klass + '-active'; + }); + + element.addClass(activeClassName); + + //one day all browsers will have these properties + var w3cAnimationProp = 'animation'; + var w3cTransitionProp = 'transition'; + + //but some still use vendor-prefixed styles + var vendorAnimationProp = $sniffer.vendorPrefix + 'Animation'; + var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition'; + + var durationKey = 'Duration', + delayKey = 'Delay', + animationIterationCountKey = 'IterationCount'; + + //we want all the styles defined before and after + var ELEMENT_NODE = 1; + forEach(element, function(element) { + if (element.nodeType == ELEMENT_NODE) { + var elementStyles = $window.getComputedStyle(element) || {}; + + var transitionDelay = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + delayKey]), + parseMaxTime(elementStyles[vendorTransitionProp + delayKey])); + + var animationDelay = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + delayKey]), + parseMaxTime(elementStyles[vendorAnimationProp + delayKey])); + + var transitionDuration = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + durationKey]), + parseMaxTime(elementStyles[vendorTransitionProp + durationKey])); + + var animationDuration = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + durationKey]), + parseMaxTime(elementStyles[vendorAnimationProp + durationKey])); + + if(animationDuration > 0) { + animationDuration *= Math.max(parseInt(elementStyles[w3cAnimationProp + animationIterationCountKey]) || 0, + parseInt(elementStyles[vendorAnimationProp + animationIterationCountKey]) || 0, + 1); + } + + duration = Math.max(animationDelay + animationDuration, + transitionDelay + transitionDuration, + duration); + } + }); + + $timeout(done, duration * 1000, false); + } + + //this will automatically be called by $animate so + //there is no need to attach this internally to the + //timeout done method + function onEnd(cancelled) { + element.removeClass(activeClassName); + + //only when the animation is cancelled is the done() + //function not called for this animation therefore + //this must be also called + if(cancelled) { + done(); + } + } + } + + return { + enter : function(element, done) { + return animate(element, 'ng-enter', done); + }, + leave : function(element, done) { + return animate(element, 'ng-leave', done); + }, + move : function(element, done) { + return animate(element, 'ng-move', done); + }, + addClass : function(element, className, done) { + return animate(element, suffixClasses(className, '-add'), done); + }, + removeClass : function(element, className, done) { + return animate(element, suffixClasses(className, '-remove'), done); + } + }; + + }]); + + function suffixClasses(classes, suffix) { + var className = ''; + classes = angular.isArray(classes) ? classes : classes.split(/\s+/); + forEach(classes, function(klass, i) { + if(klass && klass.length > 0) { + className += (i > 0 ? ' ' : '') + klass + suffix; + } + }); + return className; + } + }]); + + +})(window, window.angular); diff --git a/lib/angular/angular-animate.min.js b/lib/angular/angular-animate.min.js new file mode 100755 index 0000000..2b67da3 --- /dev/null +++ b/lib/angular/angular-animate.min.js @@ -0,0 +1,14 @@ +/* + AngularJS v1.2.0rc1 + (c) 2010-2012 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(B,q,C){'use strict';q.module("ngAnimate",["ng"]).config(["$provide","$animateProvider",function(x,w){function s(c,h){var l="";c=q.isArray(c)?c:c.split(/\s+/);t(c,function(c,m){c&&0/g,">").replace(/"/g,""")}function A(d,f){var a=t.element("
"+f+"
");d.html("");d.append(a.contents());return d}var s={},w={value:{}},K={"angular.js":"http://code.angularjs.org/"+t.version.full+"/angular.min.js","angular-resource.js":"http://code.angularjs.org/"+t.version.full+"/angular-resource.min.js","angular-sanitize.js":"http://code.angularjs.org/"+t.version.full+"/angular-sanitize.min.js", -"angular-cookies.js":"http://code.angularjs.org/"+t.version.full+"/angular-cookies.min.js"};s.jsFiddle=function(d,f,a){return{terminal:!0,link:function(o,c,l){function b(a,c){return''}var r={html:"",css:"",js:""};t.forEach(l.jsFiddle.split(" "),function(a,c){var b=a.split(".")[1];r[b]+=b=="html"?c==0?"
\n"+d(a,2):"\n\n\n <\!-- CACHE FILE: "+a+' --\>\n + * + * + * + * # Usage + * To make sure the module is available to your application, declare it as a dependency of you application + * module. + * + *
+ *   angular.module('app', ['ngSanitize']);
+ * 
*/ /* @@ -48,68 +68,71 @@
Snippet: - + + - - - - + + + + + - - + + + + + + + + + - - - - -
FilterDirectiveHow Source Rendered
html filter -
<div ng-bind-html="snippet">
</div>
-
-
-
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html="snippet">
</div>
no filter
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value
<div ng-bind-html="deliberatelyTrustDangerousSnippet()">
</div>
ng-bindAutomatically escapes
<div ng-bind="snippet">
</div>
unsafe html filter
<div ng-bind-html-unsafe="snippet">
</div>
- it('should sanitize the html snippet ', function() { - expect(using('#html-filter').element('div').html()). + it('should sanitize the html snippet by default', function() { + expect(using('#bind-html-with-sanitize').element('div').html()). toBe('

an html\nclick here\nsnippet

'); }); - it('should escape snippet without any filter', function() { - expect(using('#escaped-html').element('div').html()). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should inline raw snippet if filtered as unsafe', function() { - expect(using('#html-unsafe-filter').element("div").html()). + it('should inline raw snippet if bound to a trusted value', function() { + expect(using('#bind-html-with-trust').element("div").html()). toBe("

an html\n" + "click here\n" + "snippet

"); }); + it('should escape snippet without any filter', function() { + expect(using('#bind-default').element('div').html()). + toBe("<p style=\"color:blue\">an html\n" + + "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + + "snippet</p>"); + }); + it('should update', function() { - input('snippet').enter('new text'); - expect(using('#html-filter').binding('snippet')).toBe('new text'); - expect(using('#escaped-html').element('div').html()).toBe("new <b>text</b>"); - expect(using('#html-unsafe-filter').binding("snippet")).toBe('new text'); + input('snippet').enter('new text'); + expect(using('#bind-html-with-sanitize').element('div').html()).toBe('new text'); + expect(using('#bind-html-with-trust').element('div').html()).toBe('new text'); + expect(using('#bind-default').element('div').html()).toBe("new <b onclick=\"alert(1)\">text</b>"); });
@@ -129,7 +152,7 @@ var START_TAG_REGEXP = /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?: BEGING_END_TAGE_REGEXP = /^<\s*\//, COMMENT_REGEXP = //g, CDATA_REGEXP = //g, - URI_REGEXP = /^((ftp|https?):\/\/|mailto:|tel:|#)/, + URI_REGEXP = /^((ftp|https?):\/\/|mailto:|tel:|#)/i, NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Match everything outside of normal chars and " (quote character) @@ -256,7 +279,7 @@ function htmlParser( html, handler ) { } if ( html == last ) { - throw "Parse Error: " + html; + throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block of html: {0}", html); } last = html; } @@ -283,10 +306,10 @@ function htmlParser( html, handler ) { var attrs = {}; - rest.replace(ATTR_REGEXP, function(match, name, doubleQuotedValue, singleQoutedValue, unqoutedValue) { + rest.replace(ATTR_REGEXP, function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { var value = doubleQuotedValue - || singleQoutedValue - || unqoutedValue + || singleQuotedValue + || unquotedValue || ''; attrs[name] = decodeEntities(value); @@ -400,29 +423,6 @@ function htmlSanitizeWriter(buf){ // define ngSanitize module and register $sanitize service angular.module('ngSanitize', []).value('$sanitize', $sanitize); -/** - * @ngdoc directive - * @name ngSanitize.directive:ngBindHtml - * - * @description - * Creates a binding that will sanitize the result of evaluating the `expression` with the - * {@link ngSanitize.$sanitize $sanitize} service and innerHTML the result into the current element. - * - * See {@link ngSanitize.$sanitize $sanitize} docs for examples. - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - */ -angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($sanitize) { - return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtml); - scope.$watch(attr.ngBindHtml, function ngBindHtmlWatchAction(value) { - value = $sanitize(value); - element.html(value || ''); - }); - }; -}]); - /** * @ngdoc filter * @name ngSanitize.filter:linky diff --git a/lib/angular/angular-sanitize.min.js b/lib/angular/angular-sanitize.min.js index 6f898f4..448b681 100755 --- a/lib/angular/angular-sanitize.min.js +++ b/lib/angular/angular-sanitize.min.js @@ -1,13 +1,15 @@ /* - AngularJS v1.1.4 + AngularJS v1.2.0rc1 (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -(function(I,h){'use strict';function i(a){var d={},a=a.split(","),c;for(c=0;c=0;c--)if(e[c]==b)break;if(c>=0){for(g=e.length-1;g>=c;g--)d.end&&d.end(e[g]);e.length= -c}}var b,f,e=[],j=a;for(e.last=function(){return e[e.length-1]};a;){f=!0;if(!e.last()||!q[e.last()]){if(a.indexOf("<\!--")===0)b=a.indexOf("--\>"),b>=0&&(d.comment&&d.comment(a.substring(4,b)),a=a.substring(b+3),f=!1);else if(B.test(a)){if(b=a.match(r))a=a.substring(b[0].length),b[0].replace(r,g),f=!1}else if(C.test(a)&&(b=a.match(s)))a=a.substring(b[0].length),b[0].replace(s,c),f=!1;f&&(b=a.indexOf("<"),f=b<0?a:a.substring(0,b),a=b<0?"":a.substring(b),d.chars&&d.chars(k(f)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+ -e.last()+"[^>]*>","i"),function(a,b){b=b.replace(D,"$1").replace(E,"$1");d.chars&&d.chars(k(b));return""}),g("",e.last());if(a==j)throw"Parse Error: "+a;j=a}g()}function k(a){l.innerHTML=a.replace(//g,">")}function u(a){var d=!1,c=h.bind(a,a.push);return{start:function(a,b,f){a=h.lowercase(a);!d&&q[a]&&(d=a);!d&&v[a]== -!0&&(c("<"),c(a),h.forEach(b,function(a,b){var d=h.lowercase(b);if(G[d]==!0&&(w[d]!==!0||a.match(H)))c(" "),c(b),c('="'),c(t(a)),c('"')}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);!d&&v[a]==!0&&(c(""));a==d&&(d=!1)},chars:function(a){d||c(t(a))}}}var s=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,r=/^<\s*\/\s*([\w:-]+)[^>]*>/,A=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,C=/^/g, -E=//g,H=/^((ftp|https?):\/\/|mailto:|tel:|#)/,F=/([^\#-~| |!])/g,p=i("area,br,col,hr,img,wbr"),x=i("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=i("rp,rt"),o=h.extend({},y,x),m=h.extend({},x,i("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),n=h.extend({},y,i("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")), -q=i("script,style"),v=h.extend({},p,m,n,o),w=i("background,cite,href,longdesc,src,usemap"),G=h.extend({},w,i("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),l=document.createElement("pre");h.module("ngSanitize",[]).value("$sanitize",function(a){var d=[]; -z(a,u(d));return d.join("")});h.module("ngSanitize").directive("ngBindHtml",["$sanitize",function(a){return function(d,c,g){c.addClass("ng-binding").data("$binding",g.ngBindHtml);d.$watch(g.ngBindHtml,function(b){b=a(b);c.html(b||"")})}}]);h.module("ngSanitize").filter("linky",function(){var a=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,d=/^mailto:/;return function(c,g){if(!c)return c;var b,f=c,e=[],j=u(e),i,k,l={};if(h.isDefined(g))l.target=g;for(;b=f.match(a);)i= -b[0],b[2]==b[3]&&(i="mailto:"+i),k=b.index,j.chars(f.substr(0,k)),l.href=i,j.start("a",l),j.chars(b[0].replace(d,"")),j.end("a"),f=f.substring(k+b[0].length);j.chars(f);return e.join("")}})})(window,window.angular); +(function(m,g,n){'use strict';function h(a){var d={};a=a.split(",");var c;for(c=0;c=c;k--)d.end&&d.end(e[k]);e.length= +c}}var b,f,e=[],l=a;for(e.last=function(){return e[e.length-1]};a;){f=!0;if(e.last()&&v[e.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+e.last()+"[^>]*>","i"),function(a,b){b=b.replace(E,"$1").replace(F,"$1");d.chars&&d.chars(p(b));return""}),k("",e.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--\x3e"),0<=b&&(d.comment&&d.comment(a.substring(4,b)),a=a.substring(b+3),f=!1);else if(G.test(a)){if(b=a.match(w))a=a.substring(b[0].length),b[0].replace(w,k),f=!1}else H.test(a)&&(b=a.match(x))&& +(a=a.substring(b[0].length),b[0].replace(x,c),f=!1);f&&(b=a.indexOf("<"),f=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),d.chars&&d.chars(p(f)))}if(a==l)throw I("badparse",a);l=a}k()}function p(a){q.innerHTML=a.replace(//g,">")}function z(a){var d=!1,c=g.bind(a,a.push);return{start:function(a,b,f){a=g.lowercase(a); +!d&&v[a]&&(d=a);d||!0!=A[a]||(c("<"),c(a),g.forEach(b,function(a,b){var d=g.lowercase(b);!0!=K[d]||!0===B[d]&&!a.match(L)||(c(" "),c(b),c('="'),c(y(a)),c('"'))}),c(f?"/>":">"))},end:function(a){a=g.lowercase(a);d||!0!=A[a]||(c(""));a==d&&(d=!1)},chars:function(a){d||c(y(a))}}}var I=g.$$minErr("$sanitize"),x=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,w=/^<\s*\/\s*([\w:-]+)[^>]*>/,D=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, +H=/^]/,d=/^mailto:/;return function(c,k){if(!c)return c;var b,f=c,e=[],l=z(e),h,m,n={};g.isDefined(k)&&(n.target=k);for(;b=f.match(a);)h=b[0],b[2]==b[3]&&(h="mailto:"+h),m=b.index,l.chars(f.substr(0,m)),n.href=h,l.start("a",n),l.chars(b[0].replace(d,"")),l.end("a"),f=f.substring(m+b[0].length);l.chars(f);return e.join("")}})})(window,window.angular); +/* +//@ sourceMappingURL=angular-sanitize.min.js.map +*/ diff --git a/lib/angular/angular-sanitize.min.js.map b/lib/angular/angular-sanitize.min.js.map new file mode 100755 index 0000000..489e84e --- /dev/null +++ b/lib/angular/angular-sanitize.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-sanitize.min.js", +"lineCount":12, +"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAgMtCC,QAASA,EAAO,CAACC,CAAD,CAAM,CAAA,IAChBC,EAAM,EAAIC,EAAAA,CAAQF,CAAAG,MAAA,CAAU,GAAV,CAAtB,KAAsCC,CACtC,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBF,CAAAG,OAAhB,CAA8BD,CAAA,EAA9B,CAAmCH,CAAA,CAAIC,CAAA,CAAME,CAAN,CAAJ,CAAA,CAAgB,CAAA,CACnD,OAAOH,EAHa,CAmBtBK,QAASA,EAAU,CAAEC,CAAF,CAAQC,CAAR,CAAkB,CAyEnCC,QAASA,EAAa,CAAEC,CAAF,CAAOC,CAAP,CAAgBC,CAAhB,CAAsBC,CAAtB,CAA8B,CAClDF,CAAA,CAAUd,CAAAiB,UAAA,CAAkBH,CAAlB,CACV,IAAKI,CAAA,CAAeJ,CAAf,CAAL,CACE,IAAA,CAAQK,CAAAC,KAAA,EAAR,EAAwBC,CAAA,CAAgBF,CAAAC,KAAA,EAAhB,CAAxB,CAAA,CACEE,CAAA,CAAa,EAAb,CAAiBH,CAAAC,KAAA,EAAjB,CAICG,EAAA,CAAwBT,CAAxB,CAAL,EAA0CK,CAAAC,KAAA,EAA1C,EAA0DN,CAA1D,EACEQ,CAAA,CAAa,EAAb,CAAiBR,CAAjB,CAKF,EAFAE,CAEA,CAFQQ,CAAA,CAAcV,CAAd,CAER,EAFmC,CAAC,CAACE,CAErC,GACEG,CAAAM,KAAA,CAAYX,CAAZ,CAEF,KAAIY,EAAQ,EAEZX,EAAAY,QAAA,CAAaC,CAAb,CAA0B,QAAQ,CAACC,CAAD,CAAQC,CAAR,CAAcC,CAAd,CAAiCC,CAAjC,CAAoDC,CAApD,CAAmE,CAMnGP,CAAA,CAAMI,CAAN,CAAA,CAAcI,CAAA,CALFH,CAKE,EAJTC,CAIS,EAHTC,CAGS,EAFT,EAES,CANqF,CAArG,CAQItB,EAAAwB,MAAJ,EAAmBxB,CAAAwB,MAAA,CAAerB,CAAf,CAAwBY,CAAxB,CAA+BV,CAA/B,CA3B+B,CA8BpDM,QAASA,EAAW,CAAET,CAAF,CAAOC,CAAP,CAAiB,CAAA,IAC/BsB,EAAM,CADyB,CACtB7B,CAEb,IADAO,CACA,CADUd,CAAAiB,UAAA,CAAkBH,CAAlB,CACV,CAEE,IAAMsB,CAAN,CAAYjB,CAAAX,OAAZ,CAA2B,CAA3B,CAAqC,CAArC,EAA8B4B,CAA9B,EACOjB,CAAA,CAAOiB,CAAP,CADP,EACuBtB,CADvB,CAAwCsB,CAAA,EAAxC,EAIF,GAAY,CAAZ,EAAKA,CAAL,CAAgB,CAEd,IAAM7B,CAAN,CAAUY,CAAAX,OAAV,CAAyB,CAAzB,CAA4BD,CAA5B,EAAiC6B,CAAjC,CAAsC7B,CAAA,EAAtC,CACMI,CAAA0B,IAAJ,EAAiB1B,CAAA0B,IAAA,CAAalB,CAAA,CAAOZ,CAAP,CAAb,CAGnBY,EAAAX,OAAA;AAAe4B,CAND,CATmB,CAvGF,IAC/BE,CAD+B,CACxBC,CADwB,CACVpB,EAAQ,EADE,CACEC,EAAOV,CAG5C,KAFAS,CAAAC,KAEA,CAFaoB,QAAQ,EAAG,CAAE,MAAOrB,EAAA,CAAOA,CAAAX,OAAP,CAAsB,CAAtB,CAAT,CAExB,CAAQE,CAAR,CAAA,CAAe,CACb6B,CAAA,CAAQ,CAAA,CAGR,IAAMpB,CAAAC,KAAA,EAAN,EAAuBqB,CAAA,CAAiBtB,CAAAC,KAAA,EAAjB,CAAvB,CA2CEV,CAUA,CAVOA,CAAAiB,QAAA,CAAiBe,MAAJ,CAAW,kBAAX,CAAgCvB,CAAAC,KAAA,EAAhC,CAA+C,QAA/C,CAAyD,GAAzD,CAAb,CAA4E,QAAQ,CAACuB,CAAD,CAAMC,CAAN,CAAW,CACpGA,CAAA,CAAOA,CAAAjB,QAAA,CACGkB,CADH,CACmB,IADnB,CAAAlB,QAAA,CAEGmB,CAFH,CAEiB,IAFjB,CAIHnC,EAAA4B,MAAJ,EAAmB5B,CAAA4B,MAAA,CAAeL,CAAA,CAAeU,CAAf,CAAf,CAEnB,OAAO,EAP6F,CAA/F,CAUP,CAAAtB,CAAA,CAAa,EAAb,CAAiBH,CAAAC,KAAA,EAAjB,CArDF,KAAyD,CAGvD,GAA8B,CAA9B,GAAKV,CAAAqC,QAAA,CAAa,SAAb,CAAL,CACET,CAEA,CAFQ5B,CAAAqC,QAAA,CAAa,QAAb,CAER,CAAc,CAAd,EAAKT,CAAL,GACM3B,CAAAqC,QAEJ,EAFqBrC,CAAAqC,QAAA,CAAiBtC,CAAAuC,UAAA,CAAgB,CAAhB,CAAmBX,CAAnB,CAAjB,CAErB,CADA5B,CACA,CADOA,CAAAuC,UAAA,CAAgBX,CAAhB,CAAwB,CAAxB,CACP,CAAAC,CAAA,CAAQ,CAAA,CAHV,CAHF,KAUO,IAAKW,CAAAC,KAAA,CAA4BzC,CAA5B,CAAL,CAGL,IAFAmB,CAEA,CAFQnB,CAAAmB,MAAA,CAAYuB,CAAZ,CAER,CACE1C,CAEA,CAFOA,CAAAuC,UAAA,CAAgBpB,CAAA,CAAM,CAAN,CAAArB,OAAhB,CAEP,CADAqB,CAAA,CAAM,CAAN,CAAAF,QAAA,CAAkByB,CAAlB,CAAkC9B,CAAlC,CACA,CAAAiB,CAAA,CAAQ,CAAA,CAHV,CAHK,IAUKc,EAAAF,KAAA,CAAsBzC,CAAtB,CAAL,GACLmB,CADK,CACGnB,CAAAmB,MAAA,CAAYyB,CAAZ,CADH;CAIH5C,CAEA,CAFOA,CAAAuC,UAAA,CAAgBpB,CAAA,CAAM,CAAN,CAAArB,OAAhB,CAEP,CADAqB,CAAA,CAAM,CAAN,CAAAF,QAAA,CAAkB2B,CAAlB,CAAoC1C,CAApC,CACA,CAAA2B,CAAA,CAAQ,CAAA,CANL,CAUFA,EAAL,GACED,CAKA,CALQ5B,CAAAqC,QAAA,CAAa,GAAb,CAKR,CAHIH,CAGJ,CAHmB,CAAR,CAAAN,CAAA,CAAY5B,CAAZ,CAAmBA,CAAAuC,UAAA,CAAgB,CAAhB,CAAmBX,CAAnB,CAG9B,CAFA5B,CAEA,CAFe,CAAR,CAAA4B,CAAA,CAAY,EAAZ,CAAiB5B,CAAAuC,UAAA,CAAgBX,CAAhB,CAExB,CAAI3B,CAAA4B,MAAJ,EAAmB5B,CAAA4B,MAAA,CAAeL,CAAA,CAAeU,CAAf,CAAf,CANrB,CAjCuD,CAwDzD,GAAKlC,CAAL,EAAaU,CAAb,CACE,KAAMmC,EAAA,CAAgB,UAAhB,CAAkG7C,CAAlG,CAAN,CAEFU,CAAA,CAAOV,CA/DM,CAmEfY,CAAA,EAvEmC,CAiIrCY,QAASA,EAAc,CAACsB,CAAD,CAAQ,CAC7BC,CAAAC,UAAA,CAAoBF,CAAA7B,QAAA,CAAc,IAAd,CAAmB,MAAnB,CACpB,OAAO8B,EAAAE,UAAP,EAA8BF,CAAAG,YAA9B,EAAuD,EAF1B,CAY/BC,QAASA,EAAc,CAACL,CAAD,CAAQ,CAC7B,MAAOA,EAAA7B,QAAA,CACG,IADH,CACS,OADT,CAAAA,QAAA,CAEGmC,CAFH,CAE4B,QAAQ,CAACN,CAAD,CAAO,CAC9C,MAAO,IAAP,CAAcA,CAAAO,WAAA,CAAiB,CAAjB,CAAd,CAAoC,GADU,CAF3C,CAAApC,QAAA,CAKG,IALH,CAKS,MALT,CAAAA,QAAA,CAMG,IANH,CAMS,MANT,CADsB,CAoB/BqC,QAASA,EAAkB,CAACC,CAAD,CAAK,CAC9B,IAAIC,EAAS,CAAA,CAAb,CACIC,EAAMnE,CAAAoE,KAAA,CAAaH,CAAb,CAAkBA,CAAAxC,KAAlB,CACV,OAAO,OACEU,QAAQ,CAACtB,CAAD,CAAMa,CAAN,CAAaV,CAAb,CAAmB,CAChCH,CAAA,CAAMb,CAAAiB,UAAA,CAAkBJ,CAAlB,CACDqD;CAAAA,CAAL,EAAezB,CAAA,CAAgB5B,CAAhB,CAAf,GACEqD,CADF,CACWrD,CADX,CAGKqD,EAAL,EAAqC,CAAA,CAArC,EAAeG,CAAA,CAAcxD,CAAd,CAAf,GACEsD,CAAA,CAAI,GAAJ,CAYA,CAXAA,CAAA,CAAItD,CAAJ,CAWA,CAVAb,CAAAsE,QAAA,CAAgB5C,CAAhB,CAAuB,QAAQ,CAAC8B,CAAD,CAAQe,CAAR,CAAY,CACzC,IAAIC,EAAKxE,CAAAiB,UAAA,CAAkBsD,CAAlB,CACa,EAAA,CAAtB,EAAIE,CAAA,CAAWD,CAAX,CAAJ,EAAgD,CAAA,CAAhD,GAA+BE,CAAA,CAASF,CAAT,CAA/B,EAAwD,CAAAhB,CAAA3B,MAAA,CAAY8C,CAAZ,CAAxD,GACER,CAAA,CAAI,GAAJ,CAIA,CAHAA,CAAA,CAAII,CAAJ,CAGA,CAFAJ,CAAA,CAAI,IAAJ,CAEA,CADAA,CAAA,CAAIN,CAAA,CAAeL,CAAf,CAAJ,CACA,CAAAW,CAAA,CAAI,GAAJ,CALF,CAFyC,CAA3C,CAUA,CAAAA,CAAA,CAAInD,CAAA,CAAQ,IAAR,CAAe,GAAnB,CAbF,CALgC,CAD7B,KAsBAqB,QAAQ,CAACxB,CAAD,CAAK,CACdA,CAAA,CAAMb,CAAAiB,UAAA,CAAkBJ,CAAlB,CACDqD,EAAL,EAAqC,CAAA,CAArC,EAAeG,CAAA,CAAcxD,CAAd,CAAf,GACEsD,CAAA,CAAI,IAAJ,CAEA,CADAA,CAAA,CAAItD,CAAJ,CACA,CAAAsD,CAAA,CAAI,GAAJ,CAHF,CAKItD,EAAJ,EAAWqD,CAAX,GACEA,CADF,CACW,CAAA,CADX,CAPc,CAtBb,OAiCE3B,QAAQ,CAACA,CAAD,CAAO,CACb2B,CAAL,EACEC,CAAA,CAAIN,CAAA,CAAetB,CAAf,CAAJ,CAFgB,CAjCjB,CAHuB,CAlXhC,IAAIgB,EAAkBvD,CAAA4E,SAAA,CAAiB,WAAjB,CAAtB,CA4IItB,EAAmB,4FA5IvB,CA6IEF,EAAiB,2BA7InB,CA8IExB,EAAc,yEA9IhB;AA+IEyB,EAAmB,IA/IrB,CAgJEH,EAAyB,SAhJ3B,CAiJEL,EAAiB,qBAjJnB,CAkJEC,EAAe,yBAlJjB,CAmJE6B,EAAa,sCAnJf,CAoJEb,EAA0B,gBApJ5B,CA6JItC,EAAetB,CAAA,CAAQ,wBAAR,CAIf2E,EAAAA,CAA8B3E,CAAA,CAAQ,gDAAR,CAC9B4E,EAAAA,CAA+B5E,CAAA,CAAQ,OAAR,CADnC,KAEIqB,EAAyBvB,CAAA+E,OAAA,CAAe,EAAf,CAAmBD,CAAnB,CAAiDD,CAAjD,CAF7B,CAKI3D,EAAgBlB,CAAA+E,OAAA,CAAe,EAAf,CAAmBF,CAAnB,CAAgD3E,CAAA,CAAQ,4KAAR,CAAhD,CALpB,CAUImB,EAAiBrB,CAAA+E,OAAA,CAAe,EAAf,CAAmBD,CAAnB,CAAiD5E,CAAA,CAAQ,2JAAR,CAAjD,CAVrB;AAgBIuC,EAAkBvC,CAAA,CAAQ,cAAR,CAhBtB,CAkBImE,EAAgBrE,CAAA+E,OAAA,CAAe,EAAf,CAAmBvD,CAAnB,CAAiCN,CAAjC,CAAgDG,CAAhD,CAAgEE,CAAhE,CAlBpB,CAqBImD,EAAWxE,CAAA,CAAQ,0CAAR,CArBf,CAsBIuE,EAAazE,CAAA+E,OAAA,CAAe,EAAf,CAAmBL,CAAnB,CAA6BxE,CAAA,CAC1C,oSAD0C,CAA7B,CAtBjB,CAgLIuD,EAAUuB,QAAAC,cAAA,CAAuB,KAAvB,CA+EdjF,EAAAkF,OAAA,CAAe,YAAf,CAA6B,EAA7B,CAAA1B,MAAA,CAAuC,WAAvC,CA5RgB2B,QAAQ,CAACzE,CAAD,CAAO,CAC7B,IAAIuD,EAAM,EACRxD;CAAA,CAAWC,CAAX,CAAiBsD,CAAA,CAAmBC,CAAnB,CAAjB,CACA,OAAOA,EAAAmB,KAAA,CAAS,EAAT,CAHoB,CA4R/B,CAkGApF,EAAAkF,OAAA,CAAe,YAAf,CAAAG,OAAA,CAAoC,OAApC,CAA6C,QAAQ,EAAG,CAAA,IAClDC,EAAmB,4EAD+B,CAElDC,EAAgB,UAEpB,OAAO,SAAQ,CAAC3C,CAAD,CAAO4C,CAAP,CAAe,CAC5B,GAAI,CAAC5C,CAAL,CAAW,MAAOA,EAClB,KAAIf,CAAJ,CACI4D,EAAM7C,CADV,CAEIlC,EAAO,EAFX,CAIIgF,EAAS1B,CAAA,CAAmBtD,CAAnB,CAJb,CAKIiF,CALJ,CAMIpF,CANJ,CAOIqF,EAAa,EACb5F,EAAA6F,UAAA,CAAkBL,CAAlB,CAAJ,GACEI,CAAAJ,OADF,CACsBA,CADtB,CAGA,KAAA,CAAQ3D,CAAR,CAAgB4D,CAAA5D,MAAA,CAAUyD,CAAV,CAAhB,CAAA,CAEEK,CASA,CATM9D,CAAA,CAAM,CAAN,CASN,CAPIA,CAAA,CAAM,CAAN,CAOJ,EAPgBA,CAAA,CAAM,CAAN,CAOhB,GAP0B8D,CAO1B,CAPgC,SAOhC,CAP4CA,CAO5C,EANApF,CAMA,CANIsB,CAAAS,MAMJ,CALAoD,CAAAnD,MAAA,CAAakD,CAAAK,OAAA,CAAW,CAAX,CAAcvF,CAAd,CAAb,CAKA,CAJAqF,CAAAG,KAIA,CAJkBJ,CAIlB,CAHAD,CAAAvD,MAAA,CAAa,GAAb,CAAkByD,CAAlB,CAGA,CAFAF,CAAAnD,MAAA,CAAaV,CAAA,CAAM,CAAN,CAAAF,QAAA,CAAiB4D,CAAjB,CAAgC,EAAhC,CAAb,CAEA,CADAG,CAAArD,IAAA,CAAW,GAAX,CACA,CAAAoD,CAAA,CAAMA,CAAAxC,UAAA,CAAc1C,CAAd,CAAkBsB,CAAA,CAAM,CAAN,CAAArB,OAAlB,CAERkF,EAAAnD,MAAA,CAAakD,CAAb,CACA,OAAO/E,EAAA0E,KAAA,CAAU,EAAV,CA3BqB,CAJwB,CAAxD,CApgBsC,CAArC,CAAA,CAwiBErF,MAxiBF,CAwiBUA,MAAAC,QAxiBV;", +"sources":["angular-sanitize.js"], +"names":["window","angular","undefined","makeMap","str","obj","items","split","i","length","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","lowercase","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","chars","stack.last","specialElements","RegExp","all","text","COMMENT_REGEXP","CDATA_REGEXP","indexOf","comment","substring","BEGING_END_TAGE_REGEXP","test","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","hiddenPre","innerHTML","innerText","textContent","encodeEntities","NON_ALPHANUMERIC_REGEXP","charCodeAt","htmlSanitizeWriter","buf","ignore","out","bind","validElements","forEach","key","lkey","validAttrs","uriAttrs","URI_REGEXP","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","document","createElement","module","$sanitize","join","filter","LINKY_URL_REGEXP","MAILTO_REGEXP","target","raw","writer","url","properties","isDefined","substr","href"] +} diff --git a/lib/angular/angular-scenario.js b/lib/angular/angular-scenario.js index f68bbba..d50614a 100755 --- a/lib/angular/angular-scenario.js +++ b/lib/angular/angular-scenario.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.8.2 + * jQuery JavaScript Library v1.8.3 * http://jquery.com/ * * Includes Sizzle.js @@ -9,898 +9,897 @@ * Released under the MIT license * http://jquery.org/license * - * Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time) + * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) */ -(function( window, undefined ) { -'use strict'; +(function( window, undefined ) {'use strict'; var - // A central reference to the root jQuery(document) - rootjQuery, + // A central reference to the root jQuery(document) + rootjQuery, - // The deferred used on DOM ready - readyList, + // The deferred used on DOM ready + readyList, - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - location = window.location, - navigator = window.navigator, + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, - // Map over the $ in case of overwrite - _$ = window.$, + // Map over the $ in case of overwrite + _$ = window.$, - // Save a reference to some core methods - core_push = Array.prototype.push, - core_slice = Array.prototype.slice, - core_indexOf = Array.prototype.indexOf, - core_toString = Object.prototype.toString, - core_hasOwn = Object.prototype.hasOwnProperty, - core_trim = String.prototype.trim, + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.trim, - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, - // Used for matching numbers - core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, - // Used for detecting and trimming whitespace - core_rnotwhite = /\S/, - core_rspace = /\s+/, + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, - // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, - rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return ( letter + "" ).toUpperCase(); - }, + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, - // The ready event handler and self cleanup method - DOMContentLoaded = function() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - } else if ( document.readyState === "complete" ) { - // we're here because readyState === "complete" in oldIE - // which is good enough for us to call the dom ready! - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }, + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, - // [[Class]] -> type pairs - class2type = {}; + // [[Class]] -> type pairs + class2type = {}; jQuery.fn = jQuery.prototype = { - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem, ret, doc; + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; - // Handle $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; - } else { - match = rquickExpr.exec( selector ); - } + } else { + match = rquickExpr.exec( selector ); + } - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); - // scripts is true for back-compat - selector = jQuery.parseHTML( match[1], doc, true ); - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - this.attr.call( selector, context, true ); - } + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } - return jQuery.merge( this, selector ); + return jQuery.merge( this, selector ); - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } - this.context = document; - this.selector = selector; - return this; - } + this.context = document; + this.selector = selector; + return this; + } - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } - return jQuery.makeArray( selector, this ); - }, + return jQuery.makeArray( selector, this ); + }, - // Start with an empty selector - selector: "", + // Start with an empty selector + selector: "", - // The current version of jQuery being used - jquery: "1.8.2", + // The current version of jQuery being used + jquery: "1.8.3", - // The default length of a jQuery object is 0 - length: 0, + // The default length of a jQuery object is 0 + length: 0, - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, - toArray: function() { - return core_slice.call( this ); - }, + toArray: function() { + return core_slice.call( this ); + }, - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? - // Return a 'clean' array - this.toArray() : + // Return a 'clean' array + this.toArray() : - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); - // Add the old object onto the stack (as a reference) - ret.prevObject = this; + // Add the old object onto the stack (as a reference) + ret.prevObject = this; - ret.context = this.context; + ret.context = this.context; - if ( name === "find" ) { - ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } - // Return the newly-formed element set - return ret; - }, + // Return the newly-formed element set + return ret; + }, - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, - ready: function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); - return this; - }, + return this; + }, - eq: function( i ) { - i = +i; - return i === -1 ? - this.slice( i ) : - this.slice( i, i + 1 ); - }, + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, - first: function() { - return this.eq( 0 ); - }, + first: function() { + return this.eq( 0 ); + }, - last: function() { - return this.eq( -1 ); - }, + last: function() { + return this.eq( -1 ); + }, - slice: function() { - return this.pushStack( core_slice.apply( this, arguments ), - "slice", core_slice.call(arguments).join(",") ); - }, + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, - end: function() { - return this.prevObject || this.constructor(null); - }, + end: function() { + return this.prevObject || this.constructor(null); + }, - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: core_push, - sort: [].sort, - splice: [].splice + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; - // Prevent never-ending loop - if ( target === copy ) { - continue; - } + // Prevent never-ending loop + if ( target === copy ) { + continue; + } - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } - // Return the modified object - return target; + // Return the modified object + return target; }; jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger("ready").off("ready"); - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - isWindow: function( obj ) { - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ core_toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !core_hasOwn.call(obj, "constructor") && - !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || core_hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - // data: string of html - // context (optional): If specified, the fragment will be created in this context, defaults to document - // scripts (optional): If true, will include scripts passed in the html string - parseHTML: function( data, context, scripts ) { - var parsed; - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - scripts = context; - context = 0; - } - context = context || document; - - // Single tag - if ( (parsed = rsingleTag.exec( data )) ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); - return jQuery.merge( [], - (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); - }, - - parseJSON: function( data ) { - if ( !data || typeof data !== "string") { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - - } - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && core_rnotwhite.test( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var name, - i = 0, - length = obj.length, - isObj = length === undefined || jQuery.isFunction( obj ); - - if ( args ) { - if ( isObj ) { - for ( name in obj ) { - if ( callback.apply( obj[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( obj[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in obj ) { - if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { - break; - } - } - } - } - - return obj; - }, - - // Use native String.trim function wherever possible - trim: core_trim && !core_trim.call("\uFEFF\xA0") ? - function( text ) { - return text == null ? - "" : - core_trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var type, - ret = results || []; - - if ( arr != null ) { - // The window, strings (and functions) also have 'length' - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - type = jQuery.type( arr ); - - if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { - core_push.call( ret, arr ); - } else { - jQuery.merge( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - var len; - - if ( arr ) { - if ( core_indexOf ) { - return core_indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var l = second.length, - i = first.length, - j = 0; - - if ( typeof l === "number" ) { - for ( ; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var retVal, - ret = [], - i = 0, - length = elems.length; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, key, - ret = [], - i = 0, - length = elems.length, - // jquery objects are treated as arrays - isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( key in elems ) { - value = callback( elems[ key ], key, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = core_slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - // Multifunctional method to get and set values of a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, pass ) { - var exec, - bulk = key == null, - i = 0, - length = elems.length; - - // Sets many values - if ( key && typeof key === "object" ) { - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); - } - chainable = 1; - - // Sets one value - } else if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = pass === undefined && jQuery.isFunction( value ); - - if ( bulk ) { - // Bulk operations only iterate when executing function values - if ( exec ) { - exec = fn; - fn = function( elem, key, value ) { - return exec.call( jQuery( elem ), value ); - }; - - // Otherwise they run against the entire set - } else { - fn.call( elems, value ); - fn = null; - } - } - - if ( fn ) { - for (; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - } - - chainable = 1; - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - } + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; + + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } }); jQuery.ready.promise = function( obj ) { - if ( !readyList ) { + if ( !readyList ) { - readyList = jQuery.Deferred(); + readyList = jQuery.Deferred(); - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready, 1 ); + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready, 1 ); - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); - // If IE event model is used - } else { - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", DOMContentLoaded ); + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); - // If IE and not a frame - // continually check to see if the document is ready - var top = false; + // If IE and not a frame + // continually check to see if the document is ready + var top = false; - try { - top = window.frameElement == null && document.documentElement; - } catch(e) {} + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} - if ( top && top.doScroll ) { - (function doScrollCheck() { - if ( !jQuery.isReady ) { + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { - try { - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); - } + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } - // and execute any waiting functions - jQuery.ready(); - } - })(); - } - } - } - return readyList.promise( obj ); + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); }; // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); + class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); // All jQuery objects should point back to these @@ -910,1734 +909,1729 @@ var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.split( core_rspace ), function( _, flag ) { - object[ flag ] = true; - }); - return object; + var object = optionsCache[ options ] = {}; + jQuery.each( options.split( core_rspace ), function( _, flag ) { + object[ flag ] = true; + }); + return object; } /* * Create a callback list using the following parameters: * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * - * once: will ensure the callback list can only be fired once (like a Deferred) + * once: will ensure the callback list can only be fired once (like a Deferred) * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) * - * unique: will ensure a callback can only be added once (no duplicate in the list) + * unique: will ensure a callback can only be added once (no duplicate in the list) * - * stopOnFalse: interrupt callings when a callback returns false + * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); - var // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) { - list.push( arg ); - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Control if a given callback is in the list - has: function( fn ) { - return jQuery.inArray( fn, list ) > -1; - }, - // Remove all callbacks from the list - empty: function() { - list = []; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( list && ( !fired || stack ) ) { - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; - return self; + return self; }; jQuery.extend({ - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var action = tuple[ 0 ], - fn = fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? - function() { - var returned = fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); - } - } : - newDefer[ action ] - ); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; - // Keep pipe for back-compat - promise.pipe = promise.then; + // Keep pipe for back-compat + promise.pipe = promise.then; - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } - // deferred[ resolve | reject | notify ] = list.fire - deferred[ tuple[0] ] = list.fire; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); + // deferred[ resolve | reject | notify ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); - // Make the deferred a promise - promise.promise( deferred ); + // Make the deferred a promise + promise.promise( deferred ); - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } - // All done! - return deferred; - }, + // All done! + return deferred; + }, - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = core_slice.call( arguments ), - length = resolveValues.length, + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; - if( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, - progressValues, progressContexts, resolveContexts; + progressValues, progressContexts, resolveContexts; - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } - return deferred.promise(); - } + return deferred.promise(); + } }); jQuery.support = (function() { - var support, - all, - a, - select, - opt, - input, - fragment, - eventName, - i, - isSupported, - clickFn, - div = document.createElement("div"); + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); - // Preliminary tests - div.setAttribute( "className", "t" ); - div.innerHTML = "
a"; + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; - all = div.getElementsByTagName("*"); - a = div.getElementsByTagName("a")[ 0 ]; - a.style.cssText = "top:1px;float:left;opacity:.5"; + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } - // Can't get basic test support - if ( !all || !all.length ) { - return {}; - } + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; - // First batch of supports tests - select = document.createElement("select"); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName("input")[ 0 ]; + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), - support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: ( div.firstChild.nodeType === 3 ), + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: ( a.getAttribute("href") === "/a" ), + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.5/.test( a.style.opacity ), + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: ( input.value === "on" ), + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, - // Tests for enctype support on a form(#6743) - enctype: !!document.createElement("form").enctype, + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), - // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode - boxModel: ( document.compatMode === "CSS1Compat" ), + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; - // Will be defined later - submitBubbles: true, - changeBubbles: true, - focusinBubbles: false, - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true, - boxSizingReliable: true, - pixelPosition: false - }; + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } - if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent( "onclick", clickFn = function() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - support.noCloneEvent = false; - }); - div.cloneNode( true ).fireEvent("onclick"); - div.detachEvent( "onclick", clickFn ); - } + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; - // Check if a radio maintains its value - // after being appended to the DOM - input = document.createElement("input"); - input.value = "t"; - input.setAttribute( "type", "radio" ); - support.radioValue = input.value === "t"; + input.setAttribute( "checked", "checked" ); - input.setAttribute( "checked", "checked" ); + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "name", "t" ); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); - div.appendChild( input ); - fragment = document.createDocumentFragment(); - fragment.appendChild( div.lastChild ); + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; + fragment.removeChild( input ); + fragment.appendChild( div ); - fragment.removeChild( input ); - fragment.appendChild( div ); + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } - // Technique from Juriy Zaytsev - // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( div.attachEvent ) { - for ( i in { - submit: true, - change: true, - focusin: true - }) { - eventName = "on" + i; - isSupported = ( eventName in div ); - if ( !isSupported ) { - div.setAttribute( eventName, "return;" ); - isSupported = ( typeof div[ eventName ] === "function" ); - } - support[ i + "Bubbles" ] = isSupported; - } - } + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; - // Run tests that need a body at doc ready - jQuery(function() { - var container, div, tds, marginDiv, - divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", - body = document.getElementsByTagName("body")[0]; + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); - container = document.createElement("div"); - container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; - body.insertBefore( container, body.firstChild ); + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); - // Construct the test element - div = document.createElement("div"); - container.appendChild( div ); + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - div.innerHTML = "
t
"; - tds = div.getElementsByTagName("td"); - tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; - isSupported = ( tds[ 0 ].offsetHeight === 0 ); + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - // Check if empty table cells still have offsetWidth/Height - // (IE <= 8 fail this test) - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); - // Check box-sizing and margin behavior - div.innerHTML = ""; - div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - support.boxSizing = ( div.offsetWidth === 4 ); - support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + // NOTE: To any future maintainer, we've window.getComputedStyle + // because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; - // NOTE: To any future maintainer, we've window.getComputedStyle - // because jsdom on node.js will break without it. - if ( window.getComputedStyle ) { - support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - marginDiv = document.createElement("div"); - marginDiv.style.cssText = div.style.cssText = divReset; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); - } + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - if ( typeof div.style.zoom !== "undefined" ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.innerHTML = ""; - div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = "block"; - div.style.overflow = "visible"; - div.innerHTML = "
"; - div.firstChild.style.width = "5px"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + container.style.zoom = 1; + } - container.style.zoom = 1; - } + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); - // Null elements to avoid leaks in IE - body.removeChild( container ); - container = div = tds = marginDiv = null; - }); + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; - // Null elements to avoid leaks in IE - fragment.removeChild( div ); - all = a = select = opt = input = fragment = div = null; - - return support; + return support; })(); var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - rmultiDash = /([A-Z])/g; + rmultiDash = /([A-Z])/g; jQuery.extend({ - cache: {}, + cache: {}, - deletedIds: [], + deletedIds: [], - // Remove at next major release (1.9/2.0) - uuid: 0, + // Remove at next major release (1.9/2.0) + uuid: 0, - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, - data: function( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } - var thisCache, ret, - internalKey = jQuery.expando, - getByName = typeof name === "string", + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { - return; - } + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } - if ( !cache[ id ] ) { - cache[ id ] = {}; + if ( !cache[ id ] ) { + cache[ id ] = {}; - // Avoids exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } - thisCache = cache[ id ]; + thisCache = cache[ id ]; - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } - thisCache = thisCache.data; - } + thisCache = thisCache.data; + } - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( getByName ) { + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { - // First Try to find as-is property data - ret = thisCache[ name ]; + // First Try to find as-is property data + ret = thisCache[ name ]; - // Test for null|undefined property data - if ( ret == null ) { + // Test for null|undefined property data + if ( ret == null ) { - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } - return ret; - }, + return ret; + }, - removeData: function( elem, name, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } - var thisCache, i, l, + var thisCache, i, l, - isNode = elem.nodeType, + isNode = elem.nodeType, - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } - if ( name ) { + if ( name ) { - thisCache = pvt ? cache[ id ] : cache[ id ].data; + thisCache = pvt ? cache[ id ] : cache[ id ].data; - if ( thisCache ) { + if ( thisCache ) { - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split(" "); - } - } - } + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } - for ( i = 0, l = name.length; i < l; i++ ) { - delete thisCache[ name[i] ]; - } + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { - return; - } - } - } + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - } else if ( jQuery.support.deleteExpando || cache != cache.window ) { - delete cache[ id ]; + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; - // When all else fails, null - } else { - cache[ id ] = null; - } - }, + // When all else fails, null + } else { + cache[ id ] = null; + } + }, - // For internal use only. - _data: function( elem, name, data ) { - return jQuery.data( elem, name, data, true ); - }, + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; - // nodes accept data unless otherwise specified; rejection can be conditional - return !noData || noData !== true && elem.getAttribute("classid") === noData; - } + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } }); jQuery.fn.extend({ - data: function( key, value ) { - var parts, part, attr, name, l, - elem = this[0], - i = 0, - data = null; + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attr = elem.attributes; - for ( l = attr.length; i < l; i++ ) { - name = attr[i].name; + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; - if ( !name.indexOf( "data-" ) ) { - name = jQuery.camelCase( name.substring(5) ); + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.substring(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } - return data; - } + return data; + } - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } - parts = key.split( ".", 2 ); - parts[1] = parts[1] ? "." + parts[1] : ""; - part = parts[1] + "!"; + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; - return jQuery.access( this, function( value ) { + return jQuery.access( this, function( value ) { - if ( value === undefined ) { - data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); - // Try to fetch any internally stored data first - if ( data === undefined && elem ) { - data = jQuery.data( elem, key ); - data = dataAttr( elem, key, data ); - } + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } - parts[1] = value; - this.each(function() { - var self = jQuery( this ); + parts[1] = value; + this.each(function() { + var self = jQuery( this ); - self.triggerHandler( "setData" + part, parts ); - jQuery.data( this, key, value ); - self.triggerHandler( "changeData" + part, parts ); - }); - }, null, value, arguments.length > 1, null, false ); - }, + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } }); function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - data = elem.getAttribute( name ); + data = elem.getAttribute( name ); - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); - } else { - data = undefined; - } - } + } else { + data = undefined; + } + } - return data; + return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { + var name; + for ( name in obj ) { - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } - return true; + return true; } jQuery.extend({ - queue: function( elem, type, data ) { - var queue; + queue: function( elem, type, data ) { + var queue; - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray(data) ) { - queue = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, - dequeue: function( elem, type ) { - type = type || "fx"; + dequeue: function( elem, type ) { + type = type || "fx"; - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } - if ( fn ) { + if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - jQuery.removeData( elem, type + "queue", true ); - jQuery.removeData( elem, key, true ); - }) - }); - } + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, key, true ); + }) + }); + } }); jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; + queue: function( type, data ) { + var setter = 2; - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; - while( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } }); var nodeHook, boolHook, fixSpecified, - rclass = /[\t\r\n]/g, - rreturn = /\r/g, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea|)$/i, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute; + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea|)$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute; jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, - prop: function( name, value ) { - return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, - addClass: function( value ) { - var classNames, i, l, elem, - setClass, c, cl; + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call(this, j, this.className) ); - }); - } + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } - if ( value && typeof value === "string" ) { - classNames = value.split( core_rspace ); + if ( value && typeof value === "string" ) { + classNames = value.split( core_rspace ); - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; - if ( elem.nodeType === 1 ) { - if ( !elem.className && classNames.length === 1 ) { - elem.className = value; + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; - } else { - setClass = " " + elem.className + " "; + } else { + setClass = " " + elem.className + " "; - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { - setClass += classNames[ c ] + " "; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } - return this; - }, + return this; + }, - removeClass: function( value ) { - var removes, className, elem, c, cl, i, l; + removeClass: function( value ) { + var removes, className, elem, c, cl, i, l; - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call(this, j, this.className) ); - }); - } - if ( (value && typeof value === "string") || value === undefined ) { - removes = ( value || "" ).split( core_rspace ); + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { + removes = ( value || "" ).split( core_rspace ); - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - if ( elem.nodeType === 1 && elem.className ) { + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + if ( elem.nodeType === 1 && elem.className ) { - className = (" " + elem.className + " ").replace( rclass, " " ); + className = (" " + elem.className + " ").replace( rclass, " " ); - // loop over each item in the removal list - for ( c = 0, cl = removes.length; c < cl; c++ ) { - // Remove until there is nothing to remove, - while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { - className = className.replace( " " + removes[ c ] + " " , " " ); - } - } - elem.className = value ? jQuery.trim( className ) : ""; - } - } - } + // loop over each item in the removal list + for ( c = 0, cl = removes.length; c < cl; c++ ) { + // Remove until there is nothing to remove, + while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { + className = className.replace( " " + removes[ c ] + " " , " " ); + } + } + elem.className = value ? jQuery.trim( className ) : ""; + } + } + } - return this; - }, + return this; + }, - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.split( core_rspace ); + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( core_rspace ); - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } - // toggle whole className - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } - return false; - }, + return false; + }, - val: function( value ) { - var hooks, ret, isFunction, - elem = this[0]; + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } - ret = elem.value; + ret = elem.value; - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } - return; - } + return; + } - isFunction = jQuery.isFunction( value ); + isFunction = jQuery.isFunction( value ); - return this.each(function( i ) { - var val, - self = jQuery(this); + return this.each(function( i ) { + var val, + self = jQuery(this); - if ( this.nodeType !== 1 ) { - return; - } + if ( this.nodeType !== 1 ) { + return; + } - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } }); jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, i, max, option, - index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; - // Nothing was selected - if ( index < 0 ) { - return null; - } + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; - // Loop through all the selected options - i = one ? index : 0; - max = one ? index + 1 : options.length; - for ( ; i < max; i++ ) { - option = options[ i ]; + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + // Get the specific value for the option + value = jQuery( option ).val(); - // Get the specific value for the option - value = jQuery( option ).val(); + // We don't need an array for one selects + if ( one ) { + return value; + } - // We don't need an array for one selects - if ( one ) { - return value; - } + // Multi-Selects return an array + values.push( value ); + } + } - // Multi-Selects return an array - values.push( value ); - } - } + return values; + }, - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } + set: function( elem, value ) { + var values = jQuery.makeArray( value ); - return values; - }, + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); - set: function( elem, value ) { - var values = jQuery.makeArray( value ); + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); + // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 + attrFn: {}, - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; - // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 - attrFn: {}, + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } - attr: function( elem, name, value, pass ) { - var ret, hooks, notxml, - nType = elem.nodeType; + if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } - if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { - return jQuery( elem )[ name ]( value ); - } + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + if ( value !== undefined ) { - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( notxml ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); - } + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; - if ( value !== undefined ) { + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; + } else { + elem.setAttribute( name, value + "" ); + return value; + } - } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; - } else { - elem.setAttribute( name, value + "" ); - return value; - } + } else { - } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { - return ret; + ret = elem.getAttribute( name ); - } else { + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, - ret = elem.getAttribute( name ); + removeAttr: function( elem, value ) { + var propName, attrNames, name, isBool, + i = 0; - // Non-existent attributes return null, we normalize to undefined - return ret === null ? - undefined : - ret; - } - }, + if ( value && elem.nodeType === 1 ) { - removeAttr: function( elem, value ) { - var propName, attrNames, name, isBool, - i = 0; + attrNames = value.split( core_rspace ); - if ( value && elem.nodeType === 1 ) { + for ( ; i < attrNames.length; i++ ) { + name = attrNames[ i ]; - attrNames = value.split( core_rspace ); + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); - for ( ; i < attrNames.length; i++ ) { - name = attrNames[ i ]; + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); - if ( name ) { - propName = jQuery.propFix[ name ] || name; - isBool = rboolean.test( name ); + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, - // See #9699 for explanation of this approach (setting first, then removal) - // Do not do this for boolean attributes (see #10870) - if ( !isBool ) { - jQuery.attr( elem, name, "" ); - } - elem.removeAttribute( getSetAttribute ? name : propName ); + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, - // Set corresponding property to false for boolean attributes - if ( isBool && propName in elem ) { - elem[ propName ] = false; - } - } - } - } - }, + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, - attrHooks: { - type: { - set: function( elem, value ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to it's default in case type is set after value - // This is for element creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - }, - // Use the value property for back compat - // Use the nodeHook for button elements in IE6/7 (#1954) - value: { - get: function( elem, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.get( elem, name ); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.set( elem, value, name ); - } - // Does not return so that setAttribute is also used - elem.value = value; - } - } - }, + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } + } else { + return ( elem[ name ] = value ); + } - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; - } else { - return ( elem[ name ] = value ); - } + } else { + return elem[ name ]; + } + } + }, - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); - } else { - return elem[ name ]; - } - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabindex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - } - } + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } }); // Hook for boolean attributes boolHook = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - // Fall back to attribute presence where some booleans are not supported - var attrNode, - property = jQuery.prop( elem, name ); - return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } }; // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !getSetAttribute ) { - fixSpecified = { - name: true, - id: true, - coords: true - }; + fixSpecified = { + name: true, + id: true, + coords: true + }; - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret; - ret = elem.getAttributeNode( name ); - return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? - ret.value : - undefined; - }, - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - ret = document.createAttribute( name ); - elem.setAttributeNode( ret ); - } - return ( ret.value = value + "" ); - } - }; + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.value = value + "" ); + } + }; - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - get: nodeHook.get, - set: function( elem, value, name ) { - if ( value === "" ) { - value = "false"; - } - nodeHook.set( elem, value, name ); - } - }; + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; } // Some attributes require a special call on IE if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret === null ? undefined : ret; - } - }); - }); + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); } if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Normalize to lowercase since IE uppercases css property names - return elem.style.cssText.toLowerCase() || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = value + "" ); - } - }; + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; } // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; + if ( parent ) { + parent.selectedIndex; - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }); + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); } // IE6/7 call enctype encoding if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; + jQuery.propFix.enctype = "encoding"; } // Radios and checkboxes getter/setter if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); } jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }); + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); }); var rformElems = /^(?:textarea|input|select)$/i, - rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, - rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - hoverHack = function( events ) { - return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); - }; + rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; /* * Helper functions for managing events -- not part of the public interface. @@ -2645,578 +2639,578 @@ var rformElems = /^(?:textarea|input|select)$/i, */ jQuery.event = { - add: function( elem, types, handler, data, selector ) { - - var elemData, eventHandle, events, - t, tns, type, namespaces, handleObj, - handleObjIn, handlers, special; - - // Don't attach events to noData or text/comment nodes (allow plain objects tho) - if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - events = elemData.events; - if ( !events ) { - elemData.events = events = {}; - } - eventHandle = elemData.handle; - if ( !eventHandle ) { - elemData.handle = eventHandle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = jQuery.trim( hoverHack(types) ).split( " " ); - for ( t = 0; t < types.length; t++ ) { - - tns = rtypenamespace.exec( types[t] ) || []; - type = tns[1]; - namespaces = ( tns[2] || "" ).split( "." ).sort(); - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: tns[1], - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - handlers = events[ type ]; - if ( !handlers ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var t, tns, type, origType, namespaces, origCount, - j, events, special, eventType, handleObj, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = jQuery.trim( hoverHack( types || "" ) ).split(" "); - for ( t = 0; t < types.length; t++ ) { - tns = rtypenamespace.exec( types[t] ) || []; - type = origType = tns[1]; - namespaces = tns[2]; - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector? special.delegateType : special.bindType ) || type; - eventType = events[ type ] || []; - origCount = eventType.length; - namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; - - // Remove matching events - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !namespaces || namespaces.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - eventType.splice( j--, 1 ); - - if ( handleObj.selector ) { - eventType.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( eventType.length === 0 && origCount !== eventType.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery.removeData( elem, "events", true ); - } - }, - - // Events that are safe to short-circuit if no handlers are attached. - // Native DOM events should not be added, they may have inline handlers. - customEvent: { - "getData": true, - "setData": true, - "changeData": true - }, - - trigger: function( event, data, elem, onlyHandlers ) { - // Don't do events on text and comment nodes - if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { - return; - } - - // Event object or event type - var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, - type = event.type || event, - namespaces = []; - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "!" ) >= 0 ) { - // Exclusive events trigger only for the exact event (no namespaces) - type = type.slice(0, -1); - exclusive = true; - } - - if ( type.indexOf( "." ) >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - - if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { - // No jQuery handlers for this event type, and it can't have inline handlers - return; - } - - // Caller can pass in an Event, Object, or just an event type string - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - new jQuery.Event( type, event ) : - // Just the event type (string) - new jQuery.Event( type ); - - event.type = type; - event.isTrigger = true; - event.exclusive = exclusive; - event.namespace = namespaces.join( "." ); - event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; - ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; - - // Handle a global trigger - if ( !elem ) { - - // TODO: Stop taunting the data cache; remove global events and always attach to document - cache = jQuery.cache; - for ( i in cache ) { - if ( cache[ i ].events && cache[ i ].events[ type ] ) { - jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); - } - } - return; - } - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data != null ? jQuery.makeArray( data ) : []; - data.unshift( event ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - eventPath = [[ elem, special.bindType || type ]]; - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; - for ( old = elem; cur; cur = cur.parentNode ) { - eventPath.push([ cur, bubbleType ]); - old = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( old === (elem.ownerDocument || document) ) { - eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); - } - } - - // Fire handlers on the event path - for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { - - cur = eventPath[i][0]; - event.type = eventPath[i][1]; - - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - // Note that this is a bare JS function and not a jQuery handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { - event.preventDefault(); - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - // IE<9 dies on focus/blur to hidden element (#1486) - if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( old ) { - elem[ ontype ] = old; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event || window.event ); - - var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, - handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), - delegateCount = handlers.delegateCount, - args = core_slice.call( arguments ), - run_all = !event.exclusive && !event.namespace, - special = jQuery.event.special[ event.type ] || {}, - handlerQueue = []; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers that should run if there are delegated events - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && !(event.button && event.type === "click") ) { - - for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { - - // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { - selMatch = {}; - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - sel = handleObj.selector; - - if ( selMatch[ sel ] === undefined ) { - selMatch[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( selMatch[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, matches: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( handlers.length > delegateCount ) { - handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); - } - - // Run delegates first; they may want to stop propagation beneath us - for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { - matched = handlerQueue[ i ]; - event.currentTarget = matched.elem; - - for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { - handleObj = matched.matches[ j ]; - - // Triggered event must either 1) be non-exclusive and have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { - - event.data = handleObj.data; - event.handleObj = handleObj; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** - props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, - originalEvent = event, - fixHook = jQuery.event.fixHooks[ event.type ] || {}, - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = jQuery.Event( originalEvent ); - - for ( i = copy.length; i; ) { - prop = copy[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Target should not be a text node (#504, Safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) - event.metaKey = !!event.metaKey; - - return fixHook.filter? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - - focus: { - delegateType: "focusin" - }, - blur: { - delegateType: "focusout" - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var t, tns, type, origType, namespaces, origCount, + j, events, special, eventType, handleObj, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, "events", true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, + type = event.type || event, + namespaces = []; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + for ( old = elem; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old === (elem.ownerDocument || document) ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, + handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = core_slice.call( arguments ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = []; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) + event.metaKey = !!event.metaKey; + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } }; // Some plugins are using, but it's undocumented/deprecated and will be removed. @@ -3224,447 +3218,447 @@ jQuery.event = { jQuery.event.handle = jQuery.event.dispatch; jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; - if ( elem.detachEvent ) { + if ( elem.detachEvent ) { - // #8545, #7054, preventing memory leaks for custom events in IE6-8 – - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === "undefined" ) { - elem[ name ] = null; - } + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } - elem.detachEvent( name, handle ); - } - }; + elem.detachEvent( name, handle ); + } + }; jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - // Event type - } else { - this.type = src; - } + // Event type + } else { + this.type = src; + } - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); - // Mark it as fixed - this[ jQuery.expando ] = true; + // Mark it as fixed + this[ jQuery.expando ] = true; }; function returnFalse() { - return false; + return false; } function returnTrue() { - return true; + return true; } // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; + preventDefault: function() { + this.isDefaultPrevented = returnTrue; - var e = this.originalEvent; - if ( !e ) { - return; - } + var e = this.originalEvent; + if ( !e ) { + return; + } - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" + mouseenter: "mouseover", + mouseleave: "mouseout" }, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj, - selector = handleObj.selector; + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; }); // IE submit delegation if ( !jQuery.support.submitBubbles ) { - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "_submit_attached" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "_submit_attached", true ); - } - }); - // return undefined since we don't need an event listener - }, + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "_submit_attached" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "_submit_attached", true ); + } + }); + // return undefined since we don't need an event listener + }, - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; } // IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { - jQuery.event.special.change = { + jQuery.event.special.change = { - setup: function() { + setup: function() { - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "_change_attached", true ); - } - }); - }, + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "_change_attached", true ); + } + }); + }, - handle: function( event ) { - var elem = event.target; + handle: function( event ) { + var elem = event.target; - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, - teardown: function() { - jQuery.event.remove( this, "._change" ); + teardown: function() { + jQuery.event.remove( this, "._change" ); - return !rformElems.test( this.nodeName ); - } - }; + return !rformElems.test( this.nodeName ); + } + }; } // Create "bubbling" focus and blur events if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); } jQuery.fn.extend({ - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { // && selector != null - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, - live: function( types, data, fn ) { - jQuery( this.context ).on( types, this.selector, data, fn ); - return this; - }, - die: function( types, fn ) { - jQuery( this.context ).off( types, this.selector || "**", fn ); - return this; - }, + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - }, + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - if ( this[0] ) { - return jQuery.event.trigger( type, data, this[0], true ); - } - }, + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - // Make sure that clicks stop - event.preventDefault(); + // Make sure that clicks stop + event.preventDefault(); - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } - return this.click( toggler ); - }, + return this.click( toggler ); + }, - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } }); jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; - if ( rkeyEvent.test( name ) ) { - jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; - } + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } - if ( rmouseEvent.test( name ) ) { - jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; - } + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } }); /*! * Sizzle CSS Selector Engine @@ -3675,314 +3669,315 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl (function( window, undefined ) { var cachedruns, - assertGetIdNotName, - Expr, - getText, - isXML, - contains, - compile, - sortOrder, - hasDuplicate, - outermostContext, + assertGetIdNotName, + Expr, + getText, + isXML, + contains, + compile, + sortOrder, + hasDuplicate, + outermostContext, - baseHasDuplicate = true, - strundefined = "undefined", + baseHasDuplicate = true, + strundefined = "undefined", - expando = ( "sizcache" + Math.random() ).replace( ".", "" ), + expando = ( "sizcache" + Math.random() ).replace( ".", "" ), - Token = String, - document = window.document, - docElem = document.documentElement, - dirruns = 0, - done = 0, - pop = [].pop, - push = [].push, - slice = [].slice, - // Use a stripped-down indexOf if a native one is unavailable - indexOf = [].indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, + Token = String, + document = window.document, + docElem = document.documentElement, + dirruns = 0, + done = 0, + pop = [].pop, + push = [].push, + slice = [].slice, + // Use a stripped-down indexOf if a native one is unavailable + indexOf = [].indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, - // Augment a function for special use by Sizzle - markFunction = function( fn, value ) { - fn[ expando ] = value == null || value; - return fn; - }, + // Augment a function for special use by Sizzle + markFunction = function( fn, value ) { + fn[ expando ] = value == null || value; + return fn; + }, - createCache = function() { - var cache = {}, - keys = []; + createCache = function() { + var cache = {}, + keys = []; - return markFunction(function( key, value ) { - // Only keep the most recent entries - if ( keys.push( key ) > Expr.cacheLength ) { - delete cache[ keys.shift() ]; - } + return markFunction(function( key, value ) { + // Only keep the most recent entries + if ( keys.push( key ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } - return (cache[ key ] = value); - }, cache ); - }, + // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157) + return (cache[ key + " " ] = value); + }, cache ); + }, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), - // Regex + // Regex - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), - // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors - operators = "([*^$|!~]?=)", - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + - "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", - // Prefer arguments not in parens/brackets, - // then attribute selectors and non-pseudos (denoted by :), - // then anything else - // These preferences are here to reduce the number of selectors - // needing tokenize in the PSEUDO preFilter - pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", + // Prefer arguments not in parens/brackets, + // then attribute selectors and non-pseudos (denoted by :), + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", - // For matchExpr.POS and matchExpr.needsContext - pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", + // For matchExpr.POS and matchExpr.needsContext + pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), - rpseudo = new RegExp( pseudos ), + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, - rnot = /^:not/, - rsibling = /[\x20\t\r\n\f]*[+~]/, - rendsWithNot = /:not\($/, + rnot = /^:not/, + rsibling = /[\x20\t\r\n\f]*[+~]/, + rendsWithNot = /:not\($/, - rheader = /h\d/i, - rinputs = /input|select|textarea|button/i, + rheader = /h\d/i, + rinputs = /input|select|textarea|button/i, - rbackslash = /\\(?!\\)/g, + rbackslash = /\\(?!\\)/g, - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "POS": new RegExp( pos, "i" ), - "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - // For use in libraries implementing .is() - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) - }, + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "POS": new RegExp( pos, "i" ), + "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) + }, - // Support + // Support - // Used for testing something on an element - assert = function( fn ) { - var div = document.createElement("div"); + // Used for testing something on an element + assert = function( fn ) { + var div = document.createElement("div"); - try { - return fn( div ); - } catch (e) { - return false; - } finally { - // release memory in IE - div = null; - } - }, + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } + }, - // Check if getElementsByTagName("*") returns only elements - assertTagNameNoComments = assert(function( div ) { - div.appendChild( document.createComment("") ); - return !div.getElementsByTagName("*").length; - }), + // Check if getElementsByTagName("*") returns only elements + assertTagNameNoComments = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }), - // Check if getAttribute returns normalized href attributes - assertHrefNotNormalized = assert(function( div ) { - div.innerHTML = ""; - return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && - div.firstChild.getAttribute("href") === "#"; - }), + // Check if getAttribute returns normalized href attributes + assertHrefNotNormalized = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }), - // Check if attributes should be retrieved by attribute nodes - assertAttributes = assert(function( div ) { - div.innerHTML = ""; - var type = typeof div.lastChild.getAttribute("multiple"); - // IE8 returns a string for some attributes even when not present - return type !== "boolean" && type !== "string"; - }), + // Check if attributes should be retrieved by attribute nodes + assertAttributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }), - // Check if getElementsByClassName can be trusted - assertUsableClassName = assert(function( div ) { - // Opera can't find a second classname (in 9.6) - div.innerHTML = ""; - if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { - return false; - } + // Check if getElementsByClassName can be trusted + assertUsableClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } - // Safari 3.2 caches class attributes and doesn't catch changes - div.lastChild.className = "e"; - return div.getElementsByClassName("e").length === 2; - }), + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }), - // Check if getElementById returns elements by name - // Check if getElementsByName privileges form controls or returns elements by ID - assertUsableName = assert(function( div ) { - // Inject content - div.id = expando + 0; - div.innerHTML = "
"; - docElem.insertBefore( div, docElem.firstChild ); + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + assertUsableName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
"; + docElem.insertBefore( div, docElem.firstChild ); - // Test - var pass = document.getElementsByName && - // buggy browsers will return fewer than the correct 2 - document.getElementsByName( expando ).length === 2 + - // buggy browsers will return more than the correct 0 - document.getElementsByName( expando + 0 ).length; - assertGetIdNotName = !document.getElementById( expando ); + // Test + var pass = document.getElementsByName && + // buggy browsers will return fewer than the correct 2 + document.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + document.getElementsByName( expando + 0 ).length; + assertGetIdNotName = !document.getElementById( expando ); - // Cleanup - docElem.removeChild( div ); + // Cleanup + docElem.removeChild( div ); - return pass; - }); + return pass; + }); // If slice is not available, provide a backup try { - slice.call( docElem.childNodes, 0 )[0].nodeType; + slice.call( docElem.childNodes, 0 )[0].nodeType; } catch ( e ) { - slice = function( i ) { - var elem, - results = []; - for ( ; (elem = this[i]); i++ ) { - results.push( elem ); - } - return results; - }; + slice = function( i ) { + var elem, + results = []; + for ( ; (elem = this[i]); i++ ) { + results.push( elem ); + } + return results; + }; } function Sizzle( selector, context, results, seed ) { - results = results || []; - context = context || document; - var match, elem, xml, m, - nodeType = context.nodeType; + results = results || []; + context = context || document; + var match, elem, xml, m, + nodeType = context.nodeType; - if ( !selector || typeof selector !== "string" ) { - return results; - } + if ( !selector || typeof selector !== "string" ) { + return results; + } - if ( nodeType !== 1 && nodeType !== 9 ) { - return []; - } + if ( nodeType !== 1 && nodeType !== 9 ) { + return []; + } - xml = isXML( context ); + xml = isXML( context ); - if ( !xml && !seed ) { - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } + if ( !xml && !seed ) { + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); - return results; + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { - push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); - return results; - } - } - } + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + } - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); } Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); + return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { - return Sizzle( expr, null, null, [ elem ] ).length > 0; + return Sizzle( expr, null, null, [ elem ] ).length > 0; }; // Returns a function to use in pseudos for input types function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; } // Returns a function to use in pseudos for buttons function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; } // Returns a function to use in pseudos for positionals function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); } /** @@ -3990,667 +3985,667 @@ function createPositionalPseudo( fn ) { * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; - if ( nodeType ) { - if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (see #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - } else { + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + } else { - // If no nodeType, this is expected to be an array - for ( ; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } - return ret; + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } + return ret; }; isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; }; // Element contains another contains = Sizzle.contains = docElem.contains ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); - } : - docElem.compareDocumentPosition ? - function( a, b ) { - return b && !!( a.compareDocumentPosition( b ) & 16 ); - } : - function( a, b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - return false; - }; + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); + } : + docElem.compareDocumentPosition ? + function( a, b ) { + return b && !!( a.compareDocumentPosition( b ) & 16 ); + } : + function( a, b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + return false; + }; Sizzle.attr = function( elem, name ) { - var val, - xml = isXML( elem ); + var val, + xml = isXML( elem ); - if ( !xml ) { - name = name.toLowerCase(); - } - if ( (val = Expr.attrHandle[ name ]) ) { - return val( elem ); - } - if ( xml || assertAttributes ) { - return elem.getAttribute( name ); - } - val = elem.getAttributeNode( name ); - return val ? - typeof elem[ name ] === "boolean" ? - elem[ name ] ? name : null : - val.specified ? val.value : null : - null; + if ( !xml ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( xml || assertAttributes ) { + return elem.getAttribute( name ); + } + val = elem.getAttributeNode( name ); + return val ? + typeof elem[ name ] === "boolean" ? + elem[ name ] ? name : null : + val.specified ? val.value : null : + null; }; Expr = Sizzle.selectors = { - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - // IE6/7 return a modified href - attrHandle: assertHrefNotNormalized ? - {} : - { - "href": function( elem ) { - return elem.getAttribute( "href", 2 ); - }, - "type": function( elem ) { - return elem.getAttribute("type"); - } - }, - - find: { - "ID": assertGetIdNotName ? - function( id, context, xml ) { - if ( typeof context.getElementById !== strundefined && !xml ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - } : - function( id, context, xml ) { - if ( typeof context.getElementById !== strundefined && !xml ) { - var m = context.getElementById( id ); - - return m ? - m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? - [m] : - undefined : - []; - } - }, - - "TAG": assertTagNameNoComments ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - var elem, - tmp = [], - i = 0; - - for ( ; (elem = results[i]); i++ ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }, - - "NAME": assertUsableName && function( tag, context ) { - if ( typeof context.getElementsByName !== strundefined ) { - return context.getElementsByName( name ); - } - }, - - "CLASS": assertUsableClassName && function( className, context, xml ) { - if ( typeof context.getElementsByClassName !== strundefined && !xml ) { - return context.getElementsByClassName( className ); - } - } - }, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( rbackslash, "" ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 3 xn-component of xn+y argument ([+-]?\d*n|) - 4 sign of xn-component - 5 x of xn-component - 6 sign of y-component - 7 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1] === "nth" ) { - // nth-child requires argument - if ( !match[2] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); - match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); - - // other types prohibit arguments - } else if ( match[2] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var unquoted, excess; - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - if ( match[3] ) { - match[2] = match[3]; - } else if ( (unquoted = match[4]) ) { - // Only check arguments that contain a pseudo - if ( rpseudo.test(unquoted) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - unquoted = unquoted.slice( 0, excess ); - match[0] = match[0].slice( 0, excess ); - } - match[2] = unquoted; - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - "ID": assertGetIdNotName ? - function( id ) { - id = id.replace( rbackslash, "" ); - return function( elem ) { - return elem.getAttribute("id") === id; - }; - } : - function( id ) { - id = id.replace( rbackslash, "" ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === id; - }; - }, - - "TAG": function( nodeName ) { - if ( nodeName === "*" ) { - return function() { return true; }; - } - nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); - - return function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ expando ][ className ]; - if ( !pattern ) { - pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") ); - } - return function( elem ) { - return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); - }; - }, - - "ATTR": function( name, operator, check ) { - return function( elem, context ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.substr( result.length - check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, argument, first, last ) { - - if ( type === "nth" ) { - return function( elem ) { - var node, diff, - parent = elem.parentNode; - - if ( first === 1 && last === 0 ) { - return true; - } - - if ( parent ) { - diff = 0; - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - diff++; - if ( elem === node ) { - break; - } - } - } - } - - // Incorporate the offset (or cast to NaN), then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - }; - } - - return function( elem ) { - var node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - /* falls through */ - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), - // not comment, processing instructions, or others - // Thanks to Diego Perini for the nodeName shortcut - // Greater than "@" means alpha characters (specifically not starting with "#" or "?") - var nodeType; - elem = elem.firstChild; - while ( elem ) { - if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { - return false; - } - elem = elem.nextSibling; - } - return true; - }, - - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "text": function( elem ) { - var type, attr; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && - (type = elem.type) === "text" && - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); - }, - - // Input types - "radio": createInputPseudo("radio"), - "checkbox": createInputPseudo("checkbox"), - "file": createInputPseudo("file"), - "password": createInputPseudo("password"), - "image": createInputPseudo("image"), - - "submit": createButtonPseudo("submit"), - "reset": createButtonPseudo("reset"), - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "focus": function( elem ) { - var doc = elem.ownerDocument; - return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href); - }, - - "active": function( elem ) { - return elem === elem.ownerDocument.activeElement; - }, - - // Positional types - "first": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length, argument ) { - for ( var i = 0; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length, argument ) { - for ( var i = 1; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + // IE6/7 return a modified href + attrHandle: assertHrefNotNormalized ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }, + + find: { + "ID": assertGetIdNotName ? + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + } : + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }, + + "TAG": assertTagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + var elem, + tmp = [], + i = 0; + + for ( ; (elem = results[i]); i++ ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }, + + "NAME": assertUsableName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }, + + "CLASS": assertUsableClassName && function( className, context, xml ) { + if ( typeof context.getElementsByClassName !== strundefined && !xml ) { + return context.getElementsByClassName( className ); + } + } + }, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( rbackslash, "" ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 3 xn-component of xn+y argument ([+-]?\d*n|) + 4 sign of xn-component + 5 x of xn-component + 6 sign of y-component + 7 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1] === "nth" ) { + // nth-child requires argument + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); + match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); + + // other types prohibit arguments + } else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var unquoted, excess; + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] ) { + match[2] = match[3]; + } else if ( (unquoted = match[4]) ) { + // Only check arguments that contain a pseudo + if ( rpseudo.test(unquoted) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + unquoted = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + } + match[2] = unquoted; + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + "ID": assertGetIdNotName ? + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + return elem.getAttribute("id") === id; + }; + } : + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === id; + }; + }, + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); + + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ expando ][ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem, context ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.substr( result.length - check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, argument, first, last ) { + + if ( type === "nth" ) { + return function( elem ) { + var node, diff, + parent = elem.parentNode; + + if ( first === 1 && last === 0 ) { + return true; + } + + if ( parent ) { + diff = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + diff++; + if ( elem === node ) { + break; + } + } + } + } + + // Incorporate the offset (or cast to NaN), then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + }; + } + + return function( elem ) { + var node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + var nodeType; + elem = elem.firstChild; + while ( elem ) { + if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { + return false; + } + elem = elem.nextSibling; + } + return true; + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "text": function( elem ) { + var type, attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + (type = elem.type) === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); + }, + + // Input types + "radio": createInputPseudo("radio"), + "checkbox": createInputPseudo("checkbox"), + "file": createInputPseudo("file"), + "password": createInputPseudo("password"), + "image": createInputPseudo("image"), + + "submit": createButtonPseudo("submit"), + "reset": createButtonPseudo("reset"), + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "focus": function( elem ) { + var doc = elem.ownerDocument; + return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "active": function( elem ) { + return elem === elem.ownerDocument.activeElement; + }, + + // Positional types + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 0; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 1; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } }; function siblingCheck( a, b, ret ) { - if ( a === b ) { - return ret; - } + if ( a === b ) { + return ret; + } - var cur = a.nextSibling; + var cur = a.nextSibling; - while ( cur ) { - if ( cur === b ) { - return -1; - } + while ( cur ) { + if ( cur === b ) { + return -1; + } - cur = cur.nextSibling; - } + cur = cur.nextSibling; + } - return 1; + return 1; } sortOrder = docElem.compareDocumentPosition ? - function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } - return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? - a.compareDocumentPosition : - a.compareDocumentPosition(b) & 4 - ) ? -1 : 1; - } : - function( a, b ) { - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; + return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? + a.compareDocumentPosition : + a.compareDocumentPosition(b) & 4 + ) ? -1 : 1; + } : + function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; - // Fallback to using sourceIndex (in IE) if it's available on both nodes - } else if ( a.sourceIndex && b.sourceIndex ) { - return a.sourceIndex - b.sourceIndex; - } + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; - // If the nodes are siblings (or identical) we can do a quick check - if ( aup === bup ) { - return siblingCheck( a, b ); + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; - } else if ( !bup ) { - return 1; - } + } else if ( !bup ) { + return 1; + } - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } - cur = bup; + cur = bup; - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } - al = ap.length; - bl = bp.length; + al = ap.length; + bl = bp.length; - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; // Always assume the presence of duplicates if sort doesn't // pass them to our comparison function (as in Google Chrome). @@ -4659,664 +4654,681 @@ baseHasDuplicate = !hasDuplicate; // Document sorting and removing duplicates Sizzle.uniqueSort = function( results ) { - var elem, - i = 1; + var elem, + duplicates = [], + i = 1, + j = 0; - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); - if ( hasDuplicate ) { - for ( ; (elem = results[i]); i++ ) { - if ( elem === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } - return results; + return results; }; Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); + throw new Error( "Syntax error, unrecognized expression: " + msg ); }; function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, soFar, groups, preFilters, - cached = tokenCache[ expando ][ selector ]; + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ expando ][ selector + " " ]; - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } - soFar = selector; - groups = []; - preFilters = Expr.preFilter; + soFar = selector; + groups = []; + preFilters = Expr.preFilter; - while ( soFar ) { + while ( soFar ) { - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - soFar = soFar.slice( match[0].length ); - } - groups.push( tokens = [] ); - } + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } - matched = false; + matched = false; - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - tokens.push( matched = new Token( match.shift() ) ); - soFar = soFar.slice( matched.length ); + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); - // Cast descendant combinators to space - matched.type = match[0].replace( rtrim, " " ); - } + // Cast descendant combinators to space + matched.type = match[0].replace( rtrim, " " ); + } - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - // The last two arguments here are (context, xml) for backCompat - (match = preFilters[ type ]( match, document, true ))) ) { + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { - tokens.push( matched = new Token( match.shift() ) ); - soFar = soFar.slice( matched.length ); - matched.type = type; - matched.matches = match; - } - } + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + matched.type = type; + matched.matches = match; + } + } - if ( !matched ) { - break; - } - } + if ( !matched ) { + break; + } + } - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); } function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && combinator.dir === "parentNode", - doneName = done++; + var dir = combinator.dir, + checkNonElements = base && combinator.dir === "parentNode", + doneName = done++; - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( checkNonElements || elem.nodeType === 1 ) { - return matcher( elem, context, xml ); - } - } - } : + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + return matcher( elem, context, xml ); + } + } + } : - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( !xml ) { - var cache, - dirkey = dirruns + " " + doneName + " ", - cachedkey = dirkey + cachedruns; - while ( (elem = elem[ dir ]) ) { - if ( checkNonElements || elem.nodeType === 1 ) { - if ( (cache = elem[ expando ]) === cachedkey ) { - return elem.sizset; - } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { - if ( elem.sizset ) { - return elem; - } - } else { - elem[ expando ] = cachedkey; - if ( matcher( elem, context, xml ) ) { - elem.sizset = true; - return elem; - } - elem.sizset = false; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( checkNonElements || elem.nodeType === 1 ) { - if ( matcher( elem, context, xml ) ) { - return elem; - } - } - } - } - }; + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( !xml ) { + var cache, + dirkey = dirruns + " " + doneName + " ", + cachedkey = dirkey + cachedruns; + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( (cache = elem[ expando ]) === cachedkey ) { + return elem.sizset; + } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { + if ( elem.sizset ) { + return elem; + } + } else { + elem[ expando ] = cachedkey; + if ( matcher( elem, context, xml ) ) { + elem.sizset = true; + return elem; + } + elem.sizset = false; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( matcher( elem, context, xml ) ) { + return elem; + } + } + } + } + }; } function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; } function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } - return newUnmatched; + return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - // Positional selectors apply to seed elements, so it is invalid to follow them with relative ones - if ( seed && postFinder ) { - return; - } + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, - var i, elem, postFilterIn, - preMap = [], - postMap = [], - preexisting = results.length, + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ), + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + // ...intermediate processing is necessary + [] : - // ...intermediate processing is necessary - [] : + // ...otherwise use results directly + results : + matcherIn; - // ...otherwise use results directly - results : - matcherIn; + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); - // Apply postFilter - if ( postFilter ) { - postFilterIn = condense( matcherOut, postMap ); - postFilter( postFilterIn, [], context, xml ); + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } - // Un-match failing elements by moving them back to matcherIn - i = postFilterIn.length; - while ( i-- ) { - if ( (elem = postFilterIn[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } - // Keep seed and results synchronized - if ( seed ) { - // Ignore postFinder because it can't coexist with seed - i = preFilter && matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - seed[ preMap[i] ] = !(results[ preMap[i] ] = elem); - } - } - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); } function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - // The concatenated values are (context, xml) for backCompat - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && tokens.join("") - ); - } - matchers.push( matcher ); - } - } + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && tokens.join("") + ); + } + matchers.push( matcher ); + } + } - return elementMatcher( matchers ); + return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, expandContext ) { - var elem, j, matcher, - setMatched = [], - matchedCount = 0, - i = "0", - unmatched = seed && [], - outermost = expandContext != null, - contextBackup = outermostContext, - // We must always have either seed elements or context - elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), - // Nested matchers should use non-integer dirruns - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Nested matchers should use non-integer dirruns + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); - if ( outermost ) { - outermostContext = context !== document && context; - cachedruns = superMatcher.el; - } + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = superMatcher.el; + } - // Add elements passing elementMatchers directly to results - for ( ; (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - for ( j = 0; (matcher = elementMatchers[j]); j++ ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - cachedruns = ++superMatcher.el; - } - } + // Add elements passing elementMatchers directly to results + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + for ( j = 0; (matcher = elementMatchers[j]); j++ ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++superMatcher.el; + } + } - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - for ( j = 0; (matcher = setMatchers[j]); j++ ) { - matcher( unmatched, setMatched, context, xml ); - } + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + for ( j = 0; (matcher = setMatchers[j]); j++ ) { + matcher( unmatched, setMatched, context, xml ); + } - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } - // Add matches to results - push.apply( results, setMatched ); + // Add matches to results + push.apply( results, setMatched ); - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { - Sizzle.uniqueSort( results ); - } - } + Sizzle.uniqueSort( results ); + } + } - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } - return unmatched; - }; + return unmatched; + }; - superMatcher.el = 0; - return bySet ? - markFunction( superMatcher ) : - superMatcher; + superMatcher.el = 0; + return bySet ? + markFunction( superMatcher ) : + superMatcher; } compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ expando ][ selector ]; + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ expando ][ selector + " " ]; - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !group ) { - group = tokenize( selector ); - } - i = group.length; - while ( i-- ) { - cached = matcherFromTokens( group[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - } - return cached; + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; }; -function multipleContexts( selector, contexts, results, seed ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results, seed ); - } - return results; +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; } function select( selector, context, results, seed, xml ) { - var i, tokens, token, type, find, - match = tokenize( selector ), - j = match.length; + var i, tokens, token, type, find, + match = tokenize( selector ), + j = match.length; - if ( !seed ) { - // Try to minimize operations if there is only one group - if ( match.length === 1 ) { + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && !xml && - Expr.relative[ tokens[1].type ] ) { + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !xml && + Expr.relative[ tokens[1].type ] ) { - context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; - if ( !context ) { - return results; - } + context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; + if ( !context ) { + return results; + } - selector = selector.slice( tokens.shift().length ); - } + selector = selector.slice( tokens.shift().length ); + } - // Fetch a seed set for right-to-left matching - for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { - token = tokens[i]; + // Fetch a seed set for right-to-left matching + for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { + token = tokens[i]; - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( rbackslash, "" ), - rsibling.test( tokens[0].type ) && context.parentNode || context, - xml - )) ) { + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( rbackslash, "" ), + rsibling.test( tokens[0].type ) && context.parentNode || context, + xml + )) ) { - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && tokens.join(""); - if ( !selector ) { - push.apply( results, slice.call( seed, 0 ) ); - return results; - } + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && tokens.join(""); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } - break; - } - } - } - } - } + break; + } + } + } + } + } - // Compile and execute a filtering function - // Provide `match` to avoid retokenization if we modified the selector above - compile( selector, match )( - seed, - context, - xml, - results, - rsibling.test( selector ) - ); - return results; + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + xml, + results, + rsibling.test( selector ) + ); + return results; } if ( document.querySelectorAll ) { - (function() { - var disconnectedMatch, - oldSelect = select, - rescape = /'|\\/g, - rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + (function() { + var disconnectedMatch, + oldSelect = select, + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, - // qSa(:focus) reports false when true (Chrome 21), - // A support test would require too much code (would include document ready) - rbuggyQSA = [":focus"], + // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ], - // matchesSelector(:focus) reports false when true (Chrome 21), - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - // A support test would require too much code (would include document ready) - // just skip matchesSelector for :active - rbuggyMatches = [ ":active", ":focus" ], - matches = docElem.matchesSelector || - docElem.mozMatchesSelector || - docElem.webkitMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector; + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + // A support test would require too much code (would include document ready) + // just skip matchesSelector for :active + rbuggyMatches = [ ":active" ], + matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector; - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explictly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; - // IE8 - Some boolean attributes are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); - } + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here (do not put tests after this one) - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here (do not put tests after this one) + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); - assert(function( div ) { + assert(function( div ) { - // Opera 10-12/IE9 - ^= $= *= and empty values - // Should not select anything - div.innerHTML = "

"; - if ( div.querySelectorAll("[test^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); - } + // Opera 10-12/IE9 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "

"; + if ( div.querySelectorAll("[test^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here (do not put tests after this one) - div.innerHTML = ""; - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push(":enabled", ":disabled"); - } - }); + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here (do not put tests after this one) + div.innerHTML = ""; + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push(":enabled", ":disabled"); + } + }); - // rbuggyQSA always contains :focus, so no need for a length check - rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); + // rbuggyQSA always contains :focus, so no need for a length check + rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); - select = function( selector, context, results, seed, xml ) { - // Only use querySelectorAll when not filtering, - // when this is not xml, - // and when no QSA bugs apply - if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - var groups, i, - old = true, - nid = expando, - newContext = context, - newSelector = context.nodeType === 9 && selector; + select = function( selector, context, results, seed, xml ) { + // Only use querySelectorAll when not filtering, + // when this is not xml, + // and when no QSA bugs apply + if ( !seed && !xml && !rbuggyQSA.test( selector ) ) { + var groups, i, + old = true, + nid = expando, + newContext = context, + newSelector = context.nodeType === 9 && selector; - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; - i = groups.length; - while ( i-- ) { - groups[i] = nid + groups[i].join(""); - } - newContext = rsibling.test( selector ) && context.parentNode || context; - newSelector = groups.join(","); - } + i = groups.length; + while ( i-- ) { + groups[i] = nid + groups[i].join(""); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } - if ( newSelector ) { - try { - push.apply( results, slice.call( newContext.querySelectorAll( - newSelector - ), 0 ) ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } - return oldSelect( selector, context, results, seed, xml ); - }; + return oldSelect( selector, context, results, seed, xml ); + }; - if ( matches ) { - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - disconnectedMatch = matches.call( div, "div" ); + if ( matches ) { + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + disconnectedMatch = matches.call( div, "div" ); - // This should fail with an exception - // Gecko does not error, returns false instead - try { - matches.call( div, "[test!='']:sizzle" ); - rbuggyMatches.push( "!=", pseudos ); - } catch ( e ) {} - }); + // This should fail with an exception + // Gecko does not error, returns false instead + try { + matches.call( div, "[test!='']:sizzle" ); + rbuggyMatches.push( "!=", pseudos ); + } catch ( e ) {} + }); - // rbuggyMatches always contains :active and :focus, so no need for a length check - rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); + // rbuggyMatches always contains :active and :focus, so no need for a length check + rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); - Sizzle.matchesSelector = function( elem, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); + Sizzle.matchesSelector = function( elem, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); - // rbuggyMatches always contains :active, so no need for an existence check - if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) { - try { - var ret = matches.call( elem, expr ); + // rbuggyMatches always contains :active, so no need for an existence check + if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) { + try { + var ret = matches.call( elem, expr ); - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } - return Sizzle( expr, null, null, [ elem ] ).length > 0; - }; - } - })(); + return Sizzle( expr, null, null, [ elem ] ).length > 0; + }; + } + })(); } // Deprecated @@ -5340,149 +5352,149 @@ jQuery.contains = Sizzle.contains; })( window ); var runtil = /Until$/, - rparentsprev = /^(?:parents|prev(?:Until|All))/, - isSimple = /^.[^:#\[\.,]*$/, - rneedsContext = jQuery.expr.match.needsContext, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; jQuery.fn.extend({ - find: function( selector ) { - var i, l, length, n, r, ret, - self = this; + find: function( selector ) { + var i, l, length, n, r, ret, + self = this; - if ( typeof selector !== "string" ) { - return jQuery( selector ).filter(function() { - for ( i = 0, l = self.length; i < l; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }); - } + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } - ret = this.pushStack( "", "find", selector ); + ret = this.pushStack( "", "find", selector ); - for ( i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); - if ( i > 0 ) { - // Make sure that the results are unique - for ( n = length; n < ret.length; n++ ) { - for ( r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } - return ret; - }, + return ret; + }, - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; - return this.filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, - is: function( selector ) { - return !!selector && ( - typeof selector === "string" ? - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - rneedsContext.test( selector ) ? - jQuery( selector, this.context ).index( this[0] ) >= 0 : - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - ret = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; - for ( ; i < l; i++ ) { - cur = this[i]; + for ( ; i < l; i++ ) { + cur = this[i]; - while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - } - cur = cur.parentNode; - } - } + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } - ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; - return this.pushStack( ret, "closest", selectors ); - }, + return this.pushStack( ret, "closest", selectors ); + }, - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; - } + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } }); jQuery.fn.andSelf = jQuery.fn.addBack; @@ -5490,192 +5502,192 @@ jQuery.fn.andSelf = jQuery.fn.addBack; // A painfully simple check to see if an element is disconnected // from a document (should be improved, where feasible). function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; + return !node || !node.parentNode || node.parentNode.nodeType === 11; } function sibling( cur, dir ) { - do { - cur = cur[ dir ]; - } while ( cur && cur.nodeType !== 1 ); + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); - return cur; + return cur; } jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.merge( [], elem.childNodes ); - } + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } }, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); - if ( !runtil.test( name ) ) { - selector = until; - } + if ( !runtil.test( name ) ) { + selector = until; + } - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - if ( this.length > 1 && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } - return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); - }; + return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); + }; }); jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, - sibling: function( n, elem ) { - var r = []; + sibling: function( n, elem ) { + var r = []; - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } - return r; - } + return r; + } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return ( elem === qualifier ) === keep; - }); + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } - return jQuery.grep(elements, function( elem, i ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; - }); + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); } function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /]", "i"), - rcheckableType = /^(?:checkbox|radio)$/, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /\/(java|ecma)script/i, - rcleanScript = /^\s*\s*$/g, - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
", "
" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - col: [ 2, "", "
" ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + rcheckableType = /^(?:checkbox|radio)$/, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*\s*$/g, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; @@ -5684,781 +5696,781 @@ wrapMap.th = wrapMap.td; // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. if ( !jQuery.support.htmlSerialize ) { - wrapMap._default = [ 1, "X
", "
" ]; + wrapMap._default = [ 1, "X
", "
" ]; } jQuery.fn.extend({ - text: function( value ) { - return jQuery.access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } - wrap.map(function() { - var elem = this; + wrap.map(function() { + var elem = this; - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } - return elem; - }).append( this ); - } + return elem; + }).append( this ); + } - return this; - }, + return this; + }, - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); - if ( contents.length ) { - contents.wrapAll( html ); + if ( contents.length ) { + contents.wrapAll( html ); - } else { - self.append( html ); - } - }); - }, + } else { + self.append( html ); + } + }); + }, - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); - return this.each(function(i) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - }, + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, - append: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 ) { - this.appendChild( elem ); - } - }); - }, + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.appendChild( elem ); + } + }); + }, - prepend: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 ) { - this.insertBefore( elem, this.firstChild ); - } - }); - }, + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, - before: function() { - if ( !isDisconnected( this[0] ) ) { - return this.domManip(arguments, false, function( elem ) { - this.parentNode.insertBefore( elem, this ); - }); - } + before: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this ); + }); + } - if ( arguments.length ) { - var set = jQuery.clean( arguments ); - return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); - } - }, + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); + } + }, - after: function() { - if ( !isDisconnected( this[0] ) ) { - return this.domManip(arguments, false, function( elem ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - } + after: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + } - if ( arguments.length ) { - var set = jQuery.clean( arguments ); - return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); - } - }, + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); + } + }, - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - i = 0; + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; - for ( ; (elem = this[i]) != null; i++ ) { - if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( elem.getElementsByTagName("*") ); - jQuery.cleanData( [ elem ] ); - } + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } - } - } + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } - return this; - }, + return this; + }, - empty: function() { - var elem, - i = 0; + empty: function() { + var elem, + i = 0; - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( elem.getElementsByTagName("*") ); - } + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - } + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } - return this; - }, + return this; + }, - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, - html: function( value ) { - return jQuery.access( this, function( value ) { - var elem = this[0] || {}, - i = 0, - l = this.length; + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - value = value.replace( rxhtmlTag, "<$1>" ); + value = value.replace( rxhtmlTag, "<$1>" ); - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( elem.getElementsByTagName( "*" ) ); - elem.innerHTML = value; - } - } + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } - elem = 0; + elem = 0; - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, - replaceWith: function( value ) { - if ( !isDisconnected( this[0] ) ) { - // Make sure that the elements are removed from the DOM before they are inserted - // this can help fix replacing a parent with child elements - if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this), old = self.html(); - self.replaceWith( value.call( this, i, old ) ); - }); - } + replaceWith: function( value ) { + if ( !isDisconnected( this[0] ) ) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); + } - if ( typeof value !== "string" ) { - value = jQuery( value ).detach(); - } + if ( typeof value !== "string" ) { + value = jQuery( value ).detach(); + } - return this.each(function() { - var next = this.nextSibling, - parent = this.parentNode; + return this.each(function() { + var next = this.nextSibling, + parent = this.parentNode; - jQuery( this ).remove(); + jQuery( this ).remove(); - if ( next ) { - jQuery(next).before( value ); - } else { - jQuery(parent).append( value ); - } - }); - } + if ( next ) { + jQuery(next).before( value ); + } else { + jQuery(parent).append( value ); + } + }); + } - return this.length ? - this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : - this; - }, + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; + }, - detach: function( selector ) { - return this.remove( selector, true ); - }, + detach: function( selector ) { + return this.remove( selector, true ); + }, - domManip: function( args, table, callback ) { + domManip: function( args, table, callback ) { - // Flatten any nested arrays - args = [].concat.apply( [], args ); + // Flatten any nested arrays + args = [].concat.apply( [], args ); - var results, first, fragment, iNoClone, - i = 0, - value = args[0], - scripts = [], - l = this.length; + var results, first, fragment, iNoClone, + i = 0, + value = args[0], + scripts = [], + l = this.length; - // We can't cloneNode fragments that contain checked, in WebKit - if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { - return this.each(function() { - jQuery(this).domManip( args, table, callback ); - }); - } + // We can't cloneNode fragments that contain checked, in WebKit + if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { + return this.each(function() { + jQuery(this).domManip( args, table, callback ); + }); + } - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - args[0] = value.call( this, i, table ? self.html() : undefined ); - self.domManip( args, table, callback ); - }); - } + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + args[0] = value.call( this, i, table ? self.html() : undefined ); + self.domManip( args, table, callback ); + }); + } - if ( this[0] ) { - results = jQuery.buildFragment( args, this, scripts ); - fragment = results.fragment; - first = fragment.firstChild; + if ( this[0] ) { + results = jQuery.buildFragment( args, this, scripts ); + fragment = results.fragment; + first = fragment.firstChild; - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } - if ( first ) { - table = table && jQuery.nodeName( first, "tr" ); + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - // Fragments from the fragment cache must always be cloned and never used in place. - for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { - callback.call( - table && jQuery.nodeName( this[i], "table" ) ? - findOrAppend( this[i], "tbody" ) : - this[i], - i === iNoClone ? - fragment : - jQuery.clone( fragment, true, true ) - ); - } - } + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + // Fragments from the fragment cache must always be cloned and never used in place. + for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + i === iNoClone ? + fragment : + jQuery.clone( fragment, true, true ) + ); + } + } - // Fix #11809: Avoid leaking memory - fragment = first = null; + // Fix #11809: Avoid leaking memory + fragment = first = null; - if ( scripts.length ) { - jQuery.each( scripts, function( i, elem ) { - if ( elem.src ) { - if ( jQuery.ajax ) { - jQuery.ajax({ - url: elem.src, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } else { - jQuery.error("no ajax"); - } - } else { - jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); - } + if ( scripts.length ) { + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + if ( jQuery.ajax ) { + jQuery.ajax({ + url: elem.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.error("no ajax"); + } + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); + } - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } - }); - } - } + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); + } + } - return this; - } + return this; + } }); function findOrAppend( elem, tag ) { - return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); } function cloneCopyEvent( src, dest ) { - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; - if ( events ) { - delete curData.handle; - curData.events = {}; + if ( events ) { + delete curData.handle; + curData.events = {}; - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } } function cloneFixAttributes( src, dest ) { - var nodeName; + var nodeName; - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } - // clearAttributes removes the attributes, which we don't want, - // but also removes the attachEvent events, which we *do* want - if ( dest.clearAttributes ) { - dest.clearAttributes(); - } + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } - // mergeAttributes, in contrast, only merges back on the - // original attributes, not the events - if ( dest.mergeAttributes ) { - dest.mergeAttributes( src ); - } + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } - nodeName = dest.nodeName.toLowerCase(); + nodeName = dest.nodeName.toLowerCase(); - if ( nodeName === "object" ) { - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } + if ( nodeName === "object" ) { + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { - dest.innerHTML = src.innerHTML; - } + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { + dest.innerHTML = src.innerHTML; + } - } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set - dest.defaultChecked = dest.checked = src.checked; + dest.defaultChecked = dest.checked = src.checked; - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.selected = src.defaultSelected; + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; - // IE blanks contents when cloning scripts - } else if ( nodeName === "script" && dest.text !== src.text ) { - dest.text = src.text; - } + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } - // Event data gets referenced instead of copied if the expando - // gets copied too - dest.removeAttribute( jQuery.expando ); + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); } jQuery.buildFragment = function( args, context, scripts ) { - var fragment, cacheable, cachehit, - first = args[ 0 ]; + var fragment, cacheable, cachehit, + first = args[ 0 ]; - // Set context from what may come in as undefined or a jQuery collection or a node - // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & - // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception - context = context || document; - context = !context.nodeType && context[0] || context; - context = context.ownerDocument || context; + // Set context from what may come in as undefined or a jQuery collection or a node + // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & + // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; - // Only cache "small" (1/2 KB) HTML strings that are associated with the main document - // Cloning options loses the selected state, so don't cache them - // IE 6 doesn't like it when you put or elements in a fragment - // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache - // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 - if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && - first.charAt(0) === "<" && !rnocache.test( first ) && - (jQuery.support.checkClone || !rchecked.test( first )) && - (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { - // Mark cacheable and look for a hit - cacheable = true; - fragment = jQuery.fragments[ first ]; - cachehit = fragment !== undefined; - } + // Mark cacheable and look for a hit + cacheable = true; + fragment = jQuery.fragments[ first ]; + cachehit = fragment !== undefined; + } - if ( !fragment ) { - fragment = context.createDocumentFragment(); - jQuery.clean( args, context, fragment, scripts ); + if ( !fragment ) { + fragment = context.createDocumentFragment(); + jQuery.clean( args, context, fragment, scripts ); - // Update the cache, but only store false - // unless this is a second parsing of the same content - if ( cacheable ) { - jQuery.fragments[ first ] = cachehit && fragment; - } - } + // Update the cache, but only store false + // unless this is a second parsing of the same content + if ( cacheable ) { + jQuery.fragments[ first ] = cachehit && fragment; + } + } - return { fragment: fragment, cacheable: cacheable }; + return { fragment: fragment, cacheable: cacheable }; }; jQuery.fragments = {}; jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" }, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - l = insert.length, - parent = this.length === 1 && this[0].parentNode; + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + l = insert.length, + parent = this.length === 1 && this[0].parentNode; - if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { - insert[ original ]( this[0] ); - return this; - } else { - for ( ; i < l; i++ ) { - elems = ( i > 0 ? this.clone(true) : this ).get(); - jQuery( insert[i] )[ original ]( elems ); - ret = ret.concat( elems ); - } + if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { + insert[ original ]( this[0] ); + return this; + } else { + for ( ; i < l; i++ ) { + elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } - return this.pushStack( ret, name, insert.selector ); - } - }; + return this.pushStack( ret, name, insert.selector ); + } + }; }); function getAll( elem ) { - if ( typeof elem.getElementsByTagName !== "undefined" ) { - return elem.getElementsByTagName( "*" ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); - } else if ( typeof elem.querySelectorAll !== "undefined" ) { - return elem.querySelectorAll( "*" ); + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); - } else { - return []; - } + } else { + return []; + } } // Used in clean, fixes the defaultChecked property function fixDefaultChecked( elem ) { - if ( rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } } jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var srcElements, - destElements, - i, - clone; + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + clone; - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - // IE copies events bound via attachEvent when using cloneNode. - // Calling detachEvent on the clone will also remove the events - // from the original. In order to get around this, we use some - // proprietary methods to clear the events. Thanks to MooTools - // guys for this hotness. + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. - cloneFixAttributes( elem, clone ); + cloneFixAttributes( elem, clone ); - // Using Sizzle here is crazy slow, so we use getElementsByTagName instead - srcElements = getAll( elem ); - destElements = getAll( clone ); + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); - // Weird iteration because IE will replace the length property - // with an element if you are cloning the body and one of the - // elements on the page has a name or id of "length" - for ( i = 0; srcElements[i]; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - cloneFixAttributes( srcElements[i], destElements[i] ); - } - } - } + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } - // Copy the events from the original to the clone - if ( dataAndEvents ) { - cloneCopyEvent( elem, clone ); + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); - if ( deepDataAndEvents ) { - srcElements = getAll( elem ); - destElements = getAll( clone ); + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); - for ( i = 0; srcElements[i]; ++i ) { - cloneCopyEvent( srcElements[i], destElements[i] ); - } - } - } + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } - srcElements = destElements = null; + srcElements = destElements = null; - // Return the cloned set - return clone; - }, + // Return the cloned set + return clone; + }, - clean: function( elems, context, fragment, scripts ) { - var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, - safe = context === document && safeFragment, - ret = []; + clean: function( elems, context, fragment, scripts ) { + var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, + safe = context === document && safeFragment, + ret = []; - // Ensure that context is a document - if ( !context || typeof context.createDocumentFragment === "undefined" ) { - context = document; - } + // Ensure that context is a document + if ( !context || typeof context.createDocumentFragment === "undefined" ) { + context = document; + } - // Use the already-created safe fragment if context permits - for ( i = 0; (elem = elems[i]) != null; i++ ) { - if ( typeof elem === "number" ) { - elem += ""; - } + // Use the already-created safe fragment if context permits + for ( i = 0; (elem = elems[i]) != null; i++ ) { + if ( typeof elem === "number" ) { + elem += ""; + } - if ( !elem ) { - continue; - } + if ( !elem ) { + continue; + } - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - if ( !rhtml.test( elem ) ) { - elem = context.createTextNode( elem ); - } else { - // Ensure a safe container in which to render the html - safe = safe || createSafeFragment( context ); - div = context.createElement("div"); - safe.appendChild( div ); + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Ensure a safe container in which to render the html + safe = safe || createSafeFragment( context ); + div = context.createElement("div"); + safe.appendChild( div ); - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(rxhtmlTag, "<$1>"); + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); - // Go to html and back, then peel off extra wrappers - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - depth = wrap[0]; - div.innerHTML = wrap[1] + elem + wrap[2]; + // Go to html and back, then peel off extra wrappers + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + depth = wrap[0]; + div.innerHTML = wrap[1] + elem + wrap[2]; - // Move to the right depth - while ( depth-- ) { - div = div.lastChild; - } + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } - // Remove IE's autoinserted from table fragments - if ( !jQuery.support.tbody ) { + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { - // String was a , *may* have spurious - hasBody = rtbody.test(elem); - tbody = tag === "table" && !hasBody ? - div.firstChild && div.firstChild.childNodes : + // String was a
, *may* have spurious + hasBody = rtbody.test(elem); + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : - // String was a bare or - wrap[1] === "
" && !hasBody ? - div.childNodes : - []; + // String was a bare or + wrap[1] === "
" && !hasBody ? + div.childNodes : + []; - for ( j = tbody.length - 1; j >= 0 ; --j ) { - if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { - tbody[ j ].parentNode.removeChild( tbody[ j ] ); - } - } - } + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } - // IE completely kills leading whitespace when innerHTML is used - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); - } + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } - elem = div.childNodes; + elem = div.childNodes; - // Take out of fragment container (we need a fresh div each time) - div.parentNode.removeChild( div ); - } - } + // Take out of fragment container (we need a fresh div each time) + div.parentNode.removeChild( div ); + } + } - if ( elem.nodeType ) { - ret.push( elem ); - } else { - jQuery.merge( ret, elem ); - } - } + if ( elem.nodeType ) { + ret.push( elem ); + } else { + jQuery.merge( ret, elem ); + } + } - // Fix #11356: Clear elements from safeFragment - if ( div ) { - elem = div = safe = null; - } + // Fix #11356: Clear elements from safeFragment + if ( div ) { + elem = div = safe = null; + } - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - for ( i = 0; (elem = ret[i]) != null; i++ ) { - if ( jQuery.nodeName( elem, "input" ) ) { - fixDefaultChecked( elem ); - } else if ( typeof elem.getElementsByTagName !== "undefined" ) { - jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); - } - } - } + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + for ( i = 0; (elem = ret[i]) != null; i++ ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } + } + } - // Append elements to a provided document fragment - if ( fragment ) { - // Special handling of each script element - handleScript = function( elem ) { - // Check if we consider it executable - if ( !elem.type || rscriptType.test( elem.type ) ) { - // Detach the script and store it in the scripts array (if provided) or the fragment - // Return truthy to indicate that it has been handled - return scripts ? - scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : - fragment.appendChild( elem ); - } - }; + // Append elements to a provided document fragment + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; - for ( i = 0; (elem = ret[i]) != null; i++ ) { - // Check if we're done after handling an executable script - if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { - // Append to fragment and handle embedded scripts - fragment.appendChild( elem ); - if ( typeof elem.getElementsByTagName !== "undefined" ) { - // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration - jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); - // Splice the scripts into ret after their former ancestor and advance our index beyond them - ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); - i += jsTags.length; - } - } - } - } + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } - return ret; - }, + return ret; + }, - cleanData: function( elems, /* internal */ acceptData ) { - var data, id, elem, type, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.support.deleteExpando, - special = jQuery.event.special; + cleanData: function( elems, /* internal */ acceptData ) { + var data, id, elem, type, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; - for ( ; (elem = elems[i]) != null; i++ ) { + for ( ; (elem = elems[i]) != null; i++ ) { - if ( acceptData || jQuery.acceptData( elem ) ) { + if ( acceptData || jQuery.acceptData( elem ) ) { - id = elem[ internalKey ]; - data = id && cache[ id ]; + id = elem[ internalKey ]; + data = id && cache[ id ]; - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { - delete cache[ id ]; + delete cache[ id ]; - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; - } else if ( elem.removeAttribute ) { - elem.removeAttribute( internalKey ); + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); - } else { - elem[ internalKey ] = null; - } + } else { + elem[ internalKey ] = null; + } - jQuery.deletedIds.push( id ); - } - } - } - } - } + jQuery.deletedIds.push( id ); + } + } + } + } + } }); // Limit scope pollution from any deprecated API (function() { @@ -6469,849 +6481,851 @@ var matched, browser; // More details: http://api.jquery.com/jQuery.browser // jQuery.uaMatch maintained for back-compat jQuery.uaMatch = function( ua ) { - ua = ua.toLowerCase(); + ua = ua.toLowerCase(); - var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || - []; + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; }; matched = jQuery.uaMatch( navigator.userAgent ); browser = {}; if ( matched.browser ) { - browser[ matched.browser ] = true; - browser.version = matched.version; + browser[ matched.browser ] = true; + browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if ( browser.chrome ) { - browser.webkit = true; + browser.webkit = true; } else if ( browser.webkit ) { - browser.safari = true; + browser.safari = true; } jQuery.browser = browser; jQuery.sub = function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - return jQuerySub; + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; }; })(); var curCSS, iframe, iframeDoc, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity=([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), - elemdisplay = {}, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], - eventsToggle = jQuery.fn.toggle; + eventsToggle = jQuery.fn.toggle; // return a css property mapped to a potentially vendor prefixed property function vendorPropName( style, name ) { - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } - // check for vendor prefixed names - var capName = name.charAt(0).toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } - return origName; + return origName; } function isHidden( elem, el ) { - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); } function showHide( elements, show ) { - var elem, display, - values = [], - index = 0, - length = elements.length; + var elem, display, + values = [], + index = 0, + length = elements.length; - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - values[ index ] = jQuery._data( elem, "olddisplay" ); - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && elem.style.display === "none" ) { - elem.style.display = ""; - } + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + values[ index ] = jQuery._data( elem, "olddisplay" ); + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && elem.style.display === "none" ) { + elem.style.display = ""; + } - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - display = curCSS( elem, "display" ); + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + display = curCSS( elem, "display" ); - if ( !values[ index ] && display !== "none" ) { - jQuery._data( elem, "olddisplay", display ); - } - } - } + if ( !values[ index ] && display !== "none" ) { + jQuery._data( elem, "olddisplay", display ); + } + } + } - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } - return elements; + return elements; } jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state, fn2 ) { - var bool = typeof state === "boolean"; + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state, fn2 ) { + var bool = typeof state === "boolean"; - if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { - return eventsToggle.apply( this, arguments ); - } + if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { + return eventsToggle.apply( this, arguments ); + } - return this.each(function() { - if ( bool ? state : isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } }); jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; - } - } - } - }, + } + } + } + }, - // Exclude the following css properties to add px - cssNumber: { - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } - // Otherwise just get the value from the style object - return style[ name ]; - } - }, + // Otherwise just get the value from the style object + return style[ name ]; + } + }, - css: function( elem, name, numeric, extra ) { - var val, num, hooks, - origName = jQuery.camelCase( name ); + css: function( elem, name, numeric, extra ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name ); - } + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name ); + } - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( numeric || extra !== undefined ) { - num = parseFloat( val ); - return numeric || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - }, + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( numeric || extra !== undefined ) { + num = parseFloat( val ); + return numeric || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var ret, name, - old = {}; + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var ret, name, + old = {}; - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } - ret = callback.call( elem ); + ret = callback.call( elem ); - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } - return ret; - } + return ret; + } }); // NOTE: To any future maintainer, we've window.getComputedStyle // because jsdom on node.js will break without it. if ( window.getComputedStyle ) { - curCSS = function( elem, name ) { - var ret, width, minWidth, maxWidth, - computed = window.getComputedStyle( elem, null ), - style = elem.style; + curCSS = function( elem, name ) { + var ret, width, minWidth, maxWidth, + computed = window.getComputedStyle( elem, null ), + style = elem.style; - if ( computed ) { + if ( computed ) { - ret = computed[ name ]; - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed.getPropertyValue( name ) || computed[ name ]; - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; - return ret; - }; + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; } else if ( document.documentElement.currentStyle ) { - curCSS = function( elem, name ) { - var left, rsLeft, - ret = elem.currentStyle && elem.currentStyle[ name ], - style = elem.style; + curCSS = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - // Remember the original values - left = style.left; - rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; - // Put in the new values to get a computed value out - if ( rsLeft ) { - elem.runtimeStyle.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; - // Revert the changed values - style.left = left; - if ( rsLeft ) { - elem.runtimeStyle.left = rsLeft; - } - } + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; + } + } - return ret === "" ? "auto" : ret; - }; + return ret === "" ? "auto" : ret; + }; } function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; + var matches = rnumsplit.exec( value ); + return matches ? + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; } function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, - val = 0; + val = 0; - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - // we use jQuery.css instead of curCSS here - // because of the reliableMarginRight CSS hook! - val += jQuery.css( elem, extra + cssExpand[ i ], true ); - } + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + // we use jQuery.css instead of curCSS here + // because of the reliableMarginRight CSS hook! + val += jQuery.css( elem, extra + cssExpand[ i ], true ); + } - // From this point on we use curCSS for maximum performance (relevant in animations) - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; - } + // From this point on we use curCSS for maximum performance (relevant in animations) + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + } - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; - } - } else { - // at this point, extra isn't content, so add padding - val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } else { + // at this point, extra isn't content, so add padding + val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; - } - } - } + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } - return val; + return val; } function getWidthOrHeight( elem, name, extra ) { - // Start with offset property, which is equivalent to the border-box value - var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - valueIsBorderBox = true, - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; + // Start with offset property, which is equivalent to the border-box value + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + valueIsBorderBox = true, + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox - ) - ) + "px"; + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox + ) + ) + "px"; } // Try to determine the default display value of an element function css_defaultDisplay( nodeName ) { - if ( elemdisplay[ nodeName ] ) { - return elemdisplay[ nodeName ]; - } + if ( elemdisplay[ nodeName ] ) { + return elemdisplay[ nodeName ]; + } - var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), - display = elem.css("display"); - elem.remove(); + var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), + display = elem.css("display"); + elem.remove(); - // If the simple way fails, - // get element's real default display by attaching it to a temp iframe - if ( display === "none" || display === "" ) { - // Use the already-created iframe if possible - iframe = document.body.appendChild( - iframe || jQuery.extend( document.createElement("iframe"), { - frameBorder: 0, - width: 0, - height: 0 - }) - ); + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // Use the already-created iframe if possible + iframe = document.body.appendChild( + iframe || jQuery.extend( document.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + }) + ); - // Create a cacheable copy of the iframe document on first call. - // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML - // document to it; WebKit & Firefox won't allow reusing the iframe document. - if ( !iframeDoc || !iframe.createElement ) { - iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; - iframeDoc.write(""); - iframeDoc.close(); - } + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write(""); + iframeDoc.close(); + } - elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); + elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); - display = curCSS( elem, "display" ); - document.body.removeChild( iframe ); - } + display = curCSS( elem, "display" ); + document.body.removeChild( iframe ); + } - // Store the correct default display - elemdisplay[ nodeName ] = display; + // Store the correct default display + elemdisplay[ nodeName ] = display; - return display; + return display; } jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - // certain elements can have dimension info if we invisibly show them - // however, it must have a current display style that would benefit from this - if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { - return jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }); - } else { - return getWidthOrHeight( elem, name, extra ); - } - } - }, + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } else { + return getWidthOrHeight( elem, name, extra ); + } + } + }, - set: function( elem, value, extra ) { - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" - ) : 0 - ); - } - }; + set: function( elem, value, extra ) { + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" + ) : 0 + ); + } + }; }); if ( !jQuery.support.opacity ) { - jQuery.cssHooks.opacity = { - get: function( elem, computed ) { - // IE uses filters for opacity - return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? - ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : - computed ? "1" : ""; - }, + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, - set: function( elem, value ) { - var style = elem.style, - currentStyle = elem.currentStyle, - opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", - filter = currentStyle && currentStyle.filter || style.filter || ""; + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; - // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 - if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && - style.removeAttribute ) { + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { - // Setting style.filter to null, "" & " " still leave "filter:" in the cssText - // if "filter:" is present at all, clearType is disabled, we want to avoid this - // style.removeAttribute is IE Only, but so apparently is this code path... - style.removeAttribute( "filter" ); + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); - // if there there is no filter style applied in a css rule, we are done - if ( currentStyle && !currentStyle.filter ) { - return; - } - } + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } - // otherwise, set new filter values - style.filter = ralpha.test( filter ) ? - filter.replace( ralpha, opacity ) : - filter + " " + opacity; - } - }; + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; } // These hooks cannot be added until DOM ready because the support test // for it is not run until after DOM ready jQuery(function() { - if ( !jQuery.support.reliableMarginRight ) { - jQuery.cssHooks.marginRight = { - get: function( elem, computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - return jQuery.swap( elem, { "display": "inline-block" }, function() { - if ( computed ) { - return curCSS( elem, "marginRight" ); - } - }); - } - }; - } + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "marginRight" ); + } + }); + } + }; + } - // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 - // getComputedStyle returns percent when specified for top/left/bottom/right - // rather than make the css module depend on the offset module, we just check for it here - if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { - jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = { - get: function( elem, computed ) { - if ( computed ) { - var ret = curCSS( elem, prop ); - // if curCSS returns percentage, fallback to offset - return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; - } - } - }; - }); - } + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + var ret = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; + } + } + }; + }); + } }); if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.hidden = function( elem ) { - return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); - }; + jQuery.expr.filters.hidden = function( elem ) { + return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); + }; - jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); - }; + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; } // These hooks are used by animate to expand properties jQuery.each({ - margin: "", - padding: "", - border: "Width" + margin: "", + padding: "", + border: "Width" }, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i, + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, - // assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ], - expanded = {}; + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; - for ( i = 0; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } - return expanded; - } - }; + return expanded; + } + }; - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } }); var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, - rselectTextarea = /^(?:select|textarea)/i; + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rselectTextarea = /^(?:select|textarea)/i; jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function(){ - return this.elements ? jQuery.makeArray( this.elements ) : this; - }) - .filter(function(){ - return this.name && !this.disabled && - ( this.checked || rselectTextarea.test( this.nodeName ) || - rinput.test( this.type ) ); - }) - .map(function( i, elem ){ - var val = jQuery( this ).val(); + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val, i ){ - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } }); //Serialize an array of form elements or a set of //key/values into a query string jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); }; function buildParams( prefix, obj, traditional, add ) { - var name; + var name; - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); - } else { - // If array item is non-scalar (array or object), encode its - // numeric index to resolve deserialization ambiguity issues. - // Note that rack (as of 1.0.0) can't currently deserialize - // nested arrays properly, and attempting to do so may cause - // a server error. Possible fixes are to modify rack's - // deserialization algorithm or to provide an option or flag - // to force array serialization to be shallow. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } - } else { - // Serialize scalar item. - add( prefix, obj ); - } + } else { + // Serialize scalar item. + add( prefix, obj ); + } } var - // Document location - ajaxLocParts, - ajaxLocation, + // Document location + ajaxLocParts, + ajaxLocation, - rhash = /#.*$/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rquery = /\?/, - rscript = /)<[^<]*)*<\/script>/gi, - rts = /([?&])_=[^&]*/, - rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /)<[^<]*)*<\/script>/gi, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - // Keep a copy of the old load method - _load = jQuery.fn.load, + // Keep a copy of the old load method + _load = jQuery.fn.load, - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = ["*/"] + ["*"]; + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; // #8138, IE may throw an exception when accessing // a field from window.location if document.domain has been set try { - ajaxLocation = location.href; + ajaxLocation = location.href; } catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; } // Segment location into parts @@ -7320,673 +7334,676 @@ ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } - var dataType, list, placeBefore, - dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), - i = 0, - length = dataTypes.length; + var dataType, list, placeBefore, + dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), + i = 0, + length = dataTypes.length; - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - for ( ; i < length; i++ ) { - dataType = dataTypes[ i ]; - // We control if we're asked to add before - // any existing element - placeBefore = /^\+/.test( dataType ); - if ( placeBefore ) { - dataType = dataType.substr( 1 ) || "*"; - } - list = structure[ dataType ] = structure[ dataType ] || []; - // then we add to the structure accordingly - list[ placeBefore ? "unshift" : "push" ]( func ); - } - } - }; + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; } // Base inspection function for prefilters and transports function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, - dataType /* internal */, inspected /* internal */ ) { + dataType /* internal */, inspected /* internal */ ) { - dataType = dataType || options.dataTypes[ 0 ]; - inspected = inspected || {}; + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; - inspected[ dataType ] = true; + inspected[ dataType ] = true; - var selection, - list = structure[ dataType ], - i = 0, - length = list ? list.length : 0, - executeOnly = ( structure === prefilters ); + var selection, + list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ); - for ( ; i < length && ( executeOnly || !selection ); i++ ) { - selection = list[ i ]( options, originalOptions, jqXHR ); - // If we got redirected to another dataType - // we try there if executing only and not done already - if ( typeof selection === "string" ) { - if ( !executeOnly || inspected[ selection ] ) { - selection = undefined; - } else { - options.dataTypes.unshift( selection ); - selection = inspectPrefiltersOrTransports( - structure, options, originalOptions, jqXHR, selection, inspected ); - } - } - } - // If we're only executing or nothing was selected - // we try the catchall dataType if not done already - if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { - selection = inspectPrefiltersOrTransports( - structure, options, originalOptions, jqXHR, "*", inspected ); - } - // unnecessary when only executing (prefilters) - // but it'll be ignored by the caller in that case - return selection; + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; } // A special extend for ajax options // that takes "flat" options (not to be deep extended) // Fixes #9887 function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } } jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } - // Don't do a request if no elements are being requested - if ( !this.length ) { - return this; - } + // Don't do a request if no elements are being requested + if ( !this.length ) { + return this; + } - var selector, type, response, - self = this, - off = url.indexOf(" "); + var selector, type, response, + self = this, + off = url.indexOf(" "); - if ( off >= 0 ) { - selector = url.slice( off, url.length ); - url = url.slice( 0, off ); - } + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } - // If it's a function - if ( jQuery.isFunction( params ) ) { + // If it's a function + if ( jQuery.isFunction( params ) ) { - // We assume that it's the callback - callback = params; - params = undefined; + // We assume that it's the callback + callback = params; + params = undefined; - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } - // Request the remote document - jQuery.ajax({ - url: url, + // Request the remote document + jQuery.ajax({ + url: url, - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params, - complete: function( jqXHR, status ) { - if ( callback ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - } - } - }).done(function( responseText ) { + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params, + complete: function( jqXHR, status ) { + if ( callback ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + } + } + }).done(function( responseText ) { - // Save response for use in complete callback - response = arguments; + // Save response for use in complete callback + response = arguments; - // See if a selector was specified - self.html( selector ? + // See if a selector was specified + self.html( selector ? - // Create a dummy div to hold the results - jQuery("
") + // Create a dummy div to hold the results + jQuery("
") - // inject the contents of the document in, removing the scripts - // to avoid any 'Permission Denied' errors in IE - .append( responseText.replace( rscript, "" ) ) + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) - // Locate the specified elements - .find( selector ) : + // Locate the specified elements + .find( selector ) : - // If not, just inject the full result - responseText ); + // If not, just inject the full result + responseText ); - }); + }); - return this; + return this; }; // Attach a bunch of functions for handling common AJAX events jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ - jQuery.fn[ o ] = function( f ){ - return this.on( o, f ); - }; + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; }); jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } - return jQuery.ajax({ - type: method, - url: url, - data: data, - success: callback, - dataType: type - }); - }; + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; }); jQuery.extend({ - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - if ( settings ) { - // Building a settings object - ajaxExtend( target, jQuery.ajaxSettings ); - } else { - // Extending ajaxSettings - settings = target; - target = jQuery.ajaxSettings; - } - ajaxExtend( target, settings ); - return target; - }, - - ajaxSettings: { - url: ajaxLocation, - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - type: "GET", - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - processData: true, - async: true, - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - xml: "application/xml, text/xml", - html: "text/html", - text: "text/plain", - json: "application/json, text/javascript", - "*": allTypes - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText" - }, - - // List of data converters - // 1) key format is "source_type destination_type" (a single space in-between) - // 2) the catchall symbol "*" can be used for source_type - converters: { - - // Convert anything to text - "* text": window.String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - context: true, - url: true - } - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var // ifModified key - ifModifiedKey, - // Response headers - responseHeadersString, - responseHeaders, - // transport - transport, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events - // It's the callbackContext if one was provided in the options - // and if it's a DOM node or a jQuery collection - globalEventContext = callbackContext !== s && - ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? - jQuery( callbackContext ) : jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - - readyState: 0, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( !state ) { - var lname = name.toLowerCase(); - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match === undefined ? null : match; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - statusText = statusText || strAbort; - if ( transport ) { - transport.abort( statusText ); - } - done( 0, statusText ); - return this; - } - }; - - // Callback for when everything is done - // It is defined here because jslint complains if it is declared - // at the end of the function (which would be more logical and readable) - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // If successful, handle type chaining - if ( status >= 200 && status < 300 || status === 304 ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ ifModifiedKey ] = modified; - } - modified = jqXHR.getResponseHeader("Etag"); - if ( modified ) { - jQuery.etag[ ifModifiedKey ] = modified; - } - } - - // If not modified - if ( status === 304 ) { - - statusText = "notmodified"; - isSuccess = true; - - // If we have data - } else { - - isSuccess = ajaxConvert( s, response ); - statusText = isSuccess.state; - success = isSuccess.data; - error = isSuccess.error; - isSuccess = !error; - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if ( !statusText || status ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - // Attach deferreds - deferred.promise( jqXHR ); - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - jqXHR.complete = completeDeferred.add; - - // Status-dependent callbacks - jqXHR.statusCode = function( map ) { - if ( map ) { - var tmp; - if ( state < 2 ) { - for ( tmp in map ) { - statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; - } - } else { - tmp = map[ jqXHR.status ]; - jqXHR.always( tmp ); - } - } - return this; - }; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) - // We also use the url parameter if available - s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ) || false; - s.crossDomain = parts && ( parts.join(":") + ( parts[ 3 ] ? "" : parts[ 1 ] === "http:" ? 80 : 443 ) ) !== - ( ajaxLocParts.join(":") + ( ajaxLocParts[ 3 ] ? "" : ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Get ifModifiedKey before adding the anti-cache parameter - ifModifiedKey = s.url; - - // Add anti-cache in url if needed - if ( s.cache === false ) { - - var ts = jQuery.now(), - // try replacing _= if it is there - ret = s.url.replace( rts, "$1_=" + ts ); - - // if nothing was replaced, add timestamp to the end - s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - ifModifiedKey = ifModifiedKey || s.url; - if ( jQuery.lastModified[ ifModifiedKey ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); - } - if ( jQuery.etag[ ifModifiedKey ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); - } - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - - } - - // aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout( function(){ - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch (e) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - return jqXHR; - }, - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {} + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; + }, + + ajaxSettings: { + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: true, + async: true, + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": allTypes + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // ifModified key + ifModifiedKey, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || strAbort; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ ifModifiedKey ] = modified; + } + modified = jqXHR.getResponseHeader("Etag"); + if ( modified ) { + jQuery.etag[ ifModifiedKey ] = modified; + } + } + + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.always( tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if ( s.cache === false ) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }, + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {} }); @@ -7997,1427 +8014,1441 @@ jQuery.extend({ */ function ajaxHandleResponses( s, jqXHR, responses ) { - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes, - responseFields = s.responseFields; + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; - // Fill responseXXX fields - for ( type in responseFields ) { - if ( type in responses ) { - jqXHR[ responseFields[type] ] = responses[ type ]; - } - } + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } - // Remove auto dataType and get content-type in the process - while( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); - } - } + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } } // Chain conversions given the request and the original response function ajaxConvert( s, response ) { - var conv, conv2, current, tmp, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(), - prev = dataTypes[ 0 ], - converters = {}, - i = 0; + var conv, conv2, current, tmp, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ], + converters = {}, + i = 0; - // Apply the dataFilter if provided - if ( s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } - // Convert to each sequential dataType, tolerating list modification - for ( ; (current = dataTypes[++i]); ) { + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { - // There's only work to do if current dataType is non-auto - if ( current !== "*" ) { + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { - // Convert response if prev dataType is non-auto and differs from current - if ( prev !== "*" && prev !== current ) { + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { - // If conv2 outputs current - tmp = conv2.split(" "); - if ( tmp[ 1 ] === current ) { + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.splice( i--, 0, current ); - } + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } - break; - } - } - } - } + break; + } + } + } + } - // Apply converter (if not an equivalence) - if ( conv !== true ) { + // Apply converter (if not an equivalence) + if ( conv !== true ) { - // Unless errors are allowed to bubble, catch and return them - if ( conv && s["throws"] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } - // Update prev for next iteration - prev = current; - } - } + // Update prev for next iteration + prev = current; + } + } - return { state: "success", data: response }; + return { state: "success", data: response }; } var oldCallbacks = [], - rquestion = /\?/, - rjsonp = /(=)\?(?=&|$)|\?\?/, - nonce = jQuery.now(); + rquestion = /\?/, + rjsonp = /(=)\?(?=&|$)|\?\?/, + nonce = jQuery.now(); // Default jsonp settings jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } }); // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - var callbackName, overwritten, responseContainer, - data = s.data, - url = s.url, - hasCallback = s.jsonp !== false, - replaceInUrl = hasCallback && rjsonp.test( url ), - replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && - !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && - rjsonp.test( data ); + var callbackName, overwritten, responseContainer, + data = s.data, + url = s.url, + hasCallback = s.jsonp !== false, + replaceInUrl = hasCallback && rjsonp.test( url ), + replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && + !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && + rjsonp.test( data ); - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - overwritten = window[ callbackName ]; + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + overwritten = window[ callbackName ]; - // Insert callback into url or form data - if ( replaceInUrl ) { - s.url = url.replace( rjsonp, "$1" + callbackName ); - } else if ( replaceInData ) { - s.data = data.replace( rjsonp, "$1" + callbackName ); - } else if ( hasCallback ) { - s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } + // Insert callback into url or form data + if ( replaceInUrl ) { + s.url = url.replace( rjsonp, "$1" + callbackName ); + } else if ( replaceInData ) { + s.data = data.replace( rjsonp, "$1" + callbackName ); + } else if ( hasCallback ) { + s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; - // force json dataType - s.dataTypes[ 0 ] = "json"; + // force json dataType + s.dataTypes[ 0 ] = "json"; - // Install callback - window[ callbackName ] = function() { - responseContainer = arguments; - }; + // Install callback + window[ callbackName ] = function() { + responseContainer = arguments; + }; - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; - // save the callback name for future use - oldCallbacks.push( callbackName ); - } + // save the callback name for future use + oldCallbacks.push( callbackName ); + } - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } - responseContainer = overwritten = undefined; - }); + responseContainer = overwritten = undefined; + }); - // Delegate to script - return "script"; - } + // Delegate to script + return "script"; + } }); // Install script dataType jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /javascript|ecmascript/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } }); // Handle cache's special case and global jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - s.global = false; - } + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } }); // Bind script tag hack transport jQuery.ajaxTransport( "script", function(s) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { - var script, - head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; - return { + return { - send: function( _, callback ) { + send: function( _, callback ) { - script = document.createElement( "script" ); + script = document.createElement( "script" ); - script.async = "async"; + script.async = "async"; - if ( s.scriptCharset ) { - script.charset = s.scriptCharset; - } + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } - script.src = s.url; + script.src = s.url; - // Attach handlers for all browsers - script.onload = script.onreadystatechange = function( _, isAbort ) { + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { - if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { - // Handle memory leak in IE - script.onload = script.onreadystatechange = null; + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; - // Remove the script - if ( head && script.parentNode ) { - head.removeChild( script ); - } + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } - // Dereference the script - script = undefined; + // Dereference the script + script = undefined; - // Callback if not abort - if ( !isAbort ) { - callback( 200, "success" ); - } - } - }; - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709 and #4378). - head.insertBefore( script, head.firstChild ); - }, + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, - abort: function() { - if ( script ) { - script.onload( 0, 1 ); - } - } - }; - } + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; + } }); var xhrCallbacks, - // #5280: Internet Explorer will keep connections alive if we don't abort on unload - xhrOnUnloadAbort = window.ActiveXObject ? function() { - // Abort all pending requests - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ]( 0, 1 ); - } - } : false, - xhrId = 0; + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; // Functions to create xhrs function createStandardXHR() { - try { - return new window.XMLHttpRequest(); - } catch( e ) {} + try { + return new window.XMLHttpRequest(); + } catch( e ) {} } function createActiveXHR() { - try { - return new window.ActiveXObject( "Microsoft.XMLHTTP" ); - } catch( e ) {} + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} } // Create the request object // (This is still attached to ajaxSettings for backward compatibility) jQuery.ajaxSettings.xhr = window.ActiveXObject ? - /* Microsoft failed to properly - * implement the XMLHttpRequest in IE7 (can't request local files), - * so we use the ActiveXObject when it is available - * Additionally XMLHttpRequest can be disabled in IE7/IE8 so - * we need a fallback. - */ - function() { - return !this.isLocal && createStandardXHR() || createActiveXHR(); - } : - // For all other browsers, use the standard XMLHttpRequest object - createStandardXHR; + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; // Determine support properties (function( xhr ) { - jQuery.extend( jQuery.support, { - ajax: !!xhr, - cors: !!xhr && ( "withCredentials" in xhr ) - }); + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); })( jQuery.ajaxSettings.xhr() ); // Create transport if the browser can provide an xhr if ( jQuery.support.ajax ) { - jQuery.ajaxTransport(function( s ) { - // Cross domain only allowed if supported through XMLHttpRequest - if ( !s.crossDomain || jQuery.support.cors ) { + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { - var callback; + var callback; - return { - send: function( headers, complete ) { + return { + send: function( headers, complete ) { - // Get a new xhr - var handle, i, - xhr = s.xhr(); + // Get a new xhr + var handle, i, + xhr = s.xhr(); - // Open the socket - // Passing null username, generates a login popup on Opera (#2865) - if ( s.username ) { - xhr.open( s.type, s.url, s.async, s.username, s.password ); - } else { - xhr.open( s.type, s.url, s.async ); - } + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } - // Apply custom fields if provided - if ( s.xhrFields ) { - for ( i in s.xhrFields ) { - xhr[ i ] = s.xhrFields[ i ]; - } - } + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } - // Override mime type if needed - if ( s.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( s.mimeType ); - } + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !s.crossDomain && !headers["X-Requested-With"] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } - // Need an extra try/catch for cross domain requests in Firefox 3 - try { - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - } catch( _ ) {} + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} - // Do send the request - // This may raise an exception which is actually - // handled in jQuery.ajax (so no try/catch here) - xhr.send( ( s.hasContent && s.data ) || null ); + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); - // Listener - callback = function( _, isAbort ) { + // Listener + callback = function( _, isAbort ) { - var status, - statusText, - responseHeaders, - responses, - xml; + var status, + statusText, + responseHeaders, + responses, + xml; - // Firefox throws exceptions when accessing properties - // of an xhr when a network error occurred - // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) - try { + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { - // Was never called and is aborted or complete - if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { - // Only called once - callback = undefined; + // Only called once + callback = undefined; - // Do not keep as active anymore - if ( handle ) { - xhr.onreadystatechange = jQuery.noop; - if ( xhrOnUnloadAbort ) { - delete xhrCallbacks[ handle ]; - } - } + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } - // If it's an abort - if ( isAbort ) { - // Abort it manually if needed - if ( xhr.readyState !== 4 ) { - xhr.abort(); - } - } else { - status = xhr.status; - responseHeaders = xhr.getAllResponseHeaders(); - responses = {}; - xml = xhr.responseXML; + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; - // Construct response list - if ( xml && xml.documentElement /* #4958 */ ) { - responses.xml = xml; - } + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } - // When requesting binary data, IE6-9 will throw an exception - // on any attempt to access responseText (#11426) - try { - responses.text = xhr.responseText; - } catch( _ ) { - } + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( e ) { + } - // Firefox throws an exception when accessing - // statusText for faulty cross-domain requests - try { - statusText = xhr.statusText; - } catch( e ) { - // We normalize with Webkit giving an empty statusText - statusText = ""; - } + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } - // Filter status for non standard behaviors + // Filter status for non standard behaviors - // If the request is local and we have data: assume a success - // (success with no data won't get notified, that's the best we - // can do given current implementations) - if ( !status && s.isLocal && !s.crossDomain ) { - status = responses.text ? 200 : 404; - // IE - #1450: sometimes returns 1223 when it should be 204 - } else if ( status === 1223 ) { - status = 204; - } - } - } - } catch( firefoxAccessException ) { - if ( !isAbort ) { - complete( -1, firefoxAccessException ); - } - } + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } - // Call complete if needed - if ( responses ) { - complete( status, statusText, responses, responseHeaders ); - } - }; + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; - if ( !s.async ) { - // if we're in sync mode we fire the callback - callback(); - } else if ( xhr.readyState === 4 ) { - // (IE6 & IE7) if it's in cache and has been - // retrieved directly we need to fire the callback - setTimeout( callback, 0 ); - } else { - handle = ++xhrId; - if ( xhrOnUnloadAbort ) { - // Create the active xhrs callbacks list if needed - // and attach the unload handler - if ( !xhrCallbacks ) { - xhrCallbacks = {}; - jQuery( window ).unload( xhrOnUnloadAbort ); - } - // Add to list of active xhrs callbacks - xhrCallbacks[ handle ] = callback; - } - xhr.onreadystatechange = callback; - } - }, + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback, 0 ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, - abort: function() { - if ( callback ) { - callback(0,1); - } - } - }; - } - }); + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; + } + }); } var fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [function( prop, value ) { - var end, unit, - tween = this.createTween( prop, value ), - parts = rfxnum.exec( value ), - target = tween.cur(), - start = +target || 0, - scale = 1, - maxIterations = 20; + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; - if ( parts ) { - end = +parts[2]; - unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - // We need to compute starting value - if ( unit !== "px" && start ) { - // Iteratively approximate from a nonzero starting point - // Prefer the current property, because this process will be trivial if it uses the same units - // Fallback to end or a simple constant - start = jQuery.css( tween.elem, prop, true ) || end || 1; + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; - do { - // If previous iteration zeroed out, double until we get *something* - // Use a string for doubling factor so we don't accidentally see scale as unchanged below - scale = scale || ".5"; + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); - // Update scale, tolerating zero or NaN from tween.cur() - // And breaking the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } - tween.unit = unit; - tween.start = start; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; - } - return tween; - }] - }; + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; // Animations created synchronously will run synchronously function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }, 0 ); - return ( fxNow = jQuery.now() ); + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); } function createTweens( animation, props ) { - jQuery.each( props, function( prop, value ) { - var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( collection[ index ].call( animation, prop, value ) ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { - // we're done with this property - return; - } - } - }); + // we're done with this property + return; + } + } + }); } function Animation( elem, properties, options ) { - var result, - index = 0, - tweenerIndex = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - percent = 1 - ( remaining / animation.duration || 0 ), - index = 0, - length = animation.tweens.length; + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } - deferred.notifyWith( elem, [ animation, percent, remaining ]); + deferred.notifyWith( elem, [ animation, percent, remaining ]); - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end, easing ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // if we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end, easing ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } - // resolve when we played the last frame - // otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; - propFilter( props, animation.opts.specialEasing ); + propFilter( props, animation.opts.specialEasing ); - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } - createTweens( animation, props ); + createTweens( animation, props ); - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } - jQuery.fx.timer( - jQuery.extend( tick, { - anim: animation, - queue: animation.opts.queue, - elem: elem - }) - ); + jQuery.fx.timer( + jQuery.extend( tick, { + anim: animation, + queue: animation.opts.queue, + elem: elem + }) + ); - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); } function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; + var index, name, easing, value, hooks; - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; - // not quite $.extend, this wont overwrite keys already present. - // also - reusing 'index' from above because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } } jQuery.Animation = jQuery.extend( Animation, { - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } - var prop, - index = 0, - length = props.length; + var prop, + index = 0, + length = props.length; - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } }); function defaultPrefilter( elem, props, opts ) { - var index, prop, value, length, dataShow, tween, hooks, oldfire, - anim = this, - style = elem.style, - orig = {}, - handled = [], - hidden = elem.nodeType && isHidden( elem ); + var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); - // handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; - anim.always(function() { - // doing this makes sure that the complete handler will be called - // before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } - // height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE does not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - if ( jQuery.css( elem, "display" ) === "inline" && - jQuery.css( elem, "float" ) === "none" ) { + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { - // inline-level elements accept inline-block; - // block-level elements need to be inline with layout - if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { - style.display = "inline-block"; + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; - } else { - style.zoom = 1; - } - } - } + } else { + style.zoom = 1; + } + } + } - if ( opts.overflow ) { - style.overflow = "hidden"; - if ( !jQuery.support.shrinkWrapBlocks ) { - anim.done(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - } + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.done(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } - // show/hide pass - for ( index in props ) { - value = props[ index ]; - if ( rfxtypes.exec( value ) ) { - delete props[ index ]; - if ( value === ( hidden ? "hide" : "show" ) ) { - continue; - } - handled.push( index ); - } - } + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } - length = handled.length; - if ( length ) { - dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - jQuery.removeData( elem, "fxshow", true ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( index = 0 ; index < length ; index++ ) { - prop = handled[ index ]; - tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); - orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - } + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery.removeData( elem, "fxshow", true ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } } function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); + return new Tween.prototype.init( elem, options, prop, end, easing ); } jQuery.Tween = Tween; Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } }; Tween.prototype.init.prototype = Tween.prototype; Tween.propHooks = { - _default: { - get: function( tween ) { - var result; + _default: { + get: function( tween ) { + var result; - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } - // passing any value as a 4th parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails - // so, simple values such as "10px" are parsed to Float. - // complex values such as "rotate(1rad)" are returned as is. - result = jQuery.css( tween.elem, tween.prop, false, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // use step hook for back compat - use cssHook if its there - use .style if its - // available and use plain properties where available - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } + // passing any value as a 4th parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, false, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } }; // Remove in 2.0 - this supports IE8's panic based approach // to setting things on disconnected nodes Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } }; jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" || - // special check for .toggle( handler, handler, ... ) - ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" || + // special check for .toggle( handler, handler, ... ) + ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; }); jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { + fadeTo: function( speed, to, easing, callback ) { - // show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() - // animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - // Empty animations resolve immediately - if ( empty ) { - anim.stop( true ); - } - }; + // Empty animations resolve immediately + if ( empty ) { + anim.stop( true ); + } + }; - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = jQuery._data( this ); + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } - // start the next in the queue if the last step wasn't forced - // timers currently will call their complete callbacks, which will dequeue - // but only if they were gotoEnd - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - } + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + } }); // Generate parameters to create a standard animation function genFx( type, includeWidth ) { - var which, - attrs = { height: type }, - i = 0; + var which, + attrs = { height: type }, + i = 0; - // if we include width, step value is 1 to do all cssExpand values, - // if we don't include width, step value is 2 to skip over Left and Right - includeWidth = includeWidth? 1 : 0; - for( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } - return attrs; + return attrs; } // Generate shortcuts for custom animations jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } }, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; }); jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - // normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } - // Queueing - opt.old = opt.complete; + // Queueing + opt.old = opt.complete; - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; - return opt; + return opt; }; jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p*Math.PI ) / 2; - } + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } }; jQuery.timers = []; jQuery.fx = Tween.prototype.init; jQuery.fx.tick = function() { - var timer, - timers = jQuery.timers, - i = 0; + var timer, + timers = jQuery.timers, + i = 0; - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } + fxNow = jQuery.now(); - if ( !timers.length ) { - jQuery.fx.stop(); - } + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; }; jQuery.fx.timer = function( timer ) { - if ( timer() && jQuery.timers.push( timer ) && !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } + if ( timer() && jQuery.timers.push( timer ) && !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } }; jQuery.fx.interval = 13; jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; + clearInterval( timerId ); + timerId = null; }; jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 + slow: 600, + fast: 200, + // Default speed + _default: 400 }; // Back Compat <1.8 extension point jQuery.fx.step = {}; if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; - }; + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; } var rroot = /^(?:body|html)$/i; jQuery.fn.offset = function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } - var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, - box = { top: 0, left: 0 }, - elem = this[ 0 ], - doc = elem && elem.ownerDocument; + var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; - if ( !doc ) { - return; - } + if ( !doc ) { + return; + } - if ( (body = doc.body) === elem ) { - return jQuery.offset.bodyOffset( elem ); - } + if ( (body = doc.body) === elem ) { + return jQuery.offset.bodyOffset( elem ); + } - docElem = doc.documentElement; + docElem = doc.documentElement; - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } - // If we don't have gBCR, just use 0,0 rather than error - // BlackBerry 5, iOS 3 (original iPhone) - if ( typeof elem.getBoundingClientRect !== "undefined" ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - clientTop = docElem.clientTop || body.clientTop || 0; - clientLeft = docElem.clientLeft || body.clientLeft || 0; - scrollTop = win.pageYOffset || docElem.scrollTop; - scrollLeft = win.pageXOffset || docElem.scrollLeft; - return { - top: box.top + scrollTop - clientTop, - left: box.left + scrollLeft - clientLeft - }; + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== "undefined" ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + clientTop = docElem.clientTop || body.clientTop || 0; + clientLeft = docElem.clientLeft || body.clientLeft || 0; + scrollTop = win.pageYOffset || docElem.scrollTop; + scrollLeft = win.pageXOffset || docElem.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; }; jQuery.offset = { - bodyOffset: function( body ) { - var top = body.offsetTop, - left = body.offsetLeft; + bodyOffset: function( body ) { + var top = body.offsetTop, + left = body.offsetLeft; - if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { - top += parseFloat( jQuery.css(body, "marginTop") ) || 0; - left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; - } + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; + } - return { top: top, left: left }; - }, + return { top: top, left: left }; + }, - setOffset: function( elem, options, i ) { - var position = jQuery.css( elem, "position" ); + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); - // set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } - var curElem = jQuery( elem ), - curOffset = curElem.offset(), - curCSSTop = jQuery.css( elem, "top" ), - curCSSLeft = jQuery.css( elem, "left" ), - calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, - props = {}, curPosition = {}, curTop, curLeft; + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; - // need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } - if ( "using" in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - } + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } }; jQuery.fn.extend({ - position: function() { - if ( !this[0] ) { - return; - } + position: function() { + if ( !this[0] ) { + return; + } - var elem = this[0], + var elem = this[0], - // Get *real* offsetParent - offsetParent = this.offsetParent(), + // Get *real* offsetParent + offsetParent = this.offsetParent(), - // Get correct offsets - offset = this.offset(), - parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); - // Subtract element margins - // note: when an element has margin: auto the offsetLeft and marginLeft - // are the same in Safari causing offset.left to incorrectly be 0 - offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; - offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; - // Add offsetParent borders - parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; - parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; + // Add offsetParent borders + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; - // Subtract the two offsets - return { - top: offset.top - parentOffset.top, - left: offset.left - parentOffset.left - }; - }, + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }, - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || document.body; - while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { - offsetParent = offsetParent.offsetParent; - } - return offsetParent || document.body; - }); - } + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.body; + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.body; + }); + } }); // Create scrollLeft and scrollTop methods jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { - var top = /Y/.test( prop ); + var top = /Y/.test( prop ); - jQuery.fn[ method ] = function( val ) { - return jQuery.access( this, function( elem, method, val ) { - var win = getWindow( elem ); + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); - if ( val === undefined ) { - return win ? (prop in win) ? win[ prop ] : - win.document.documentElement[ method ] : - elem[ method ]; - } + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } - if ( win ) { - win.scrollTo( - !top ? val : jQuery( win ).scrollLeft(), - top ? val : jQuery( win ).scrollTop() - ); + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; }); function getWindow( elem ) { - return jQuery.isWindow( elem ) ? - elem : - elem.nodeType === 9 ? - elem.defaultView || elem.parentWindow : - false; + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; } // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - return jQuery.access( this, function( elem, type, value ) { - var doc; + return jQuery.access( this, function( elem, type, value ) { + var doc; - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest - // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, value, extra ) : + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, value, extra ) : - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); }); // Expose jQuery to the global object window.jQuery = window.$ = jQuery; @@ -9435,21 +9466,87 @@ window.jQuery = window.$ = jQuery; // Do this after creating the global so that if an AMD module wants to call // noConflict to hide this version of jQuery, it will work. if ( typeof define === "function" && define.amd && define.amd.jQuery ) { - define( "jquery", [], function () { return jQuery; } ); + define( "jquery", [], function () { return jQuery; } ); } })( window ); /** - * @license AngularJS v1.1.4 + * @license AngularJS v1.2.0rc1 * (c) 2010-2012 Google, Inc. http://angularjs.org * License: MIT */ (function(window, document){ var _jQuery = window.jQuery.noConflict(true); +/** + * @description + * + * This object provides a utility for producing rich Error messages within + * Angular. It can be called as follows: + * + * var exampleMinErr = minErr('example'); + * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); + * + * The above creates an instance of minErr in the example namespace. The + * resulting error will have a namespaced error code of example.one. The + * resulting error will replace {0} with the value of foo, and {1} with the + * value of bar. The object is not restricted in the number of arguments it can + * take. + * + * If fewer arguments are specified than necessary for interpolation, the extra + * interpolation markers will be preserved in the final string. + * + * Since data will be parsed statically during a build step, some restrictions + * are applied with respect to how minErr instances are created and called. + * Instances should have names of the form namespaceMinErr for a minErr created + * using minErr('namespace') . Error codes, namespaces and template strings + * should all be static strings, not variables or general expressions. + * + * @param {string} module The namespace to use for the new minErr instance. + * @returns {function(string, string, ...): Error} instance + */ + +function minErr(module) { + return function () { + var prefix = '[' + (module ? module + ':' : '') + arguments[0] + '] ', + template = arguments[1], + templateArgs = arguments, + message; + + message = prefix + template.replace(/\{\d+\}/g, function (match) { + var index = +match.slice(1, -1), arg; + + if (index + 2 < templateArgs.length) { + arg = templateArgs[index + 2]; + if (isFunction(arg)) { + return arg.toString().replace(/ ?\{[\s\S]*$/, ''); + } else if (isUndefined(arg)) { + return 'undefined'; + } else if (!isString(arg)) { + return toJson(arg); + } + return arg; + } + return match; + }); + + return new Error(message); + }; +} + //////////////////////////////////// +/** + * hasOwnProperty may be overwritten by a property of the same name, or entirely + * absent from an object that does not inherit Object.prototype; this copy is + * used instead + */ +var hasOwnPropertyFn = Object.prototype.hasOwnProperty; +var hasOwnPropertyLocal = function(obj, key) { + return hasOwnPropertyFn.call(obj, key); +}; + /** * @ngdoc function * @name angular.lowercase @@ -9502,6 +9599,7 @@ var /** holds major version number for IE or NaN for real browsers */ slice = [].slice, push = [].push, toString = Object.prototype.toString, + ngMinErr = minErr('ng'), _angular = window.angular, @@ -9512,21 +9610,24 @@ var /** holds major version number for IE or NaN for real browsers */ uid = ['0', '0', '0']; /** - * @ngdoc function - * @name angular.noConflict - * @function - * - * @description - * Restores the previous global value of angular and returns the current instance. Other libraries may already use the - * angular namespace. Or a previous version of angular is already loaded on the page. In these cases you may want to - * restore the previous namespace and keep a reference to angular. - * - * @return {Object} The current angular namespace + * @private + * @param {*} obj + * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, ...) */ -function noConflict() { - var a = window.angular; - window.angular = _angular; - return a; +function isArrayLike(obj) { + if (obj == null || isWindow(obj)) { + return false; + } + + var length = obj.length; + + if (obj.nodeType === 1 && length) { + return true; + } + + return isArray(obj) || !isFunction(obj) && ( + length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj + ); } /** @@ -9556,30 +9657,6 @@ function noConflict() { * @param {Object=} context Object to become context (`this`) for the iterator function. * @returns {Object|Array} Reference to `obj`. */ - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, ...) - */ -function isArrayLike(obj) { - if (!obj || (typeof obj.length !== 'number')) return false; - - // We have on object which has length property. Should we treat it as array? - if (typeof obj.hasOwnProperty != 'function' && - typeof obj.constructor != 'function') { - // This is here for IE8: it is a bogus object treat it as array; - return true; - } else { - return obj instanceof JQLite || // JQLite - (jQuery && obj instanceof jQuery) || // jQuery - toString.call(obj) !== '[object Object]' || // some browser native object - typeof obj.callee === 'function'; // arguments (on IE8 looks like regular obj) - } -} - - function forEach(obj, iterator, context) { var key; if (obj) { @@ -9663,6 +9740,21 @@ function nextUid() { return uid.join(''); } + +/** + * Set or clear the hashkey for an object. + * @param obj object + * @param h the hashkey (!truthy to delete the hashkey) + */ +function setHashKey(obj, h) { + if (h) { + obj.$$hashKey = h; + } + else { + delete obj.$$hashKey; + } +} + /** * @ngdoc function * @name angular.extend @@ -9674,8 +9766,10 @@ function nextUid() { * * @param {Object} dst Destination object. * @param {...Object} src Source object(s). + * @returns {Object} Reference to `dst`. */ function extend(dst) { + var h = dst.$$hashKey; forEach(arguments, function(obj){ if (obj !== dst) { forEach(obj, function(value, key){ @@ -9683,6 +9777,8 @@ function extend(dst) { }); } }); + + setHashKey(dst,h); return dst; } @@ -9695,12 +9791,6 @@ function inherit(parent, extra) { return extend(new (extend(function() {}, {prototype:parent}))(), extra); } -var START_SPACE = /^\s*/; -var END_SPACE = /\s*$/; -function stripWhitespace(str) { - return isString(str) ? str.replace(START_SPACE, '').replace(END_SPACE, '') : str; -} - /** * @ngdoc function * @name angular.noop @@ -9731,7 +9821,7 @@ noop.$inject = []; *
      function transformer(transformationFn, value) {
-       return (transformationFn || identity)(value);
+       return (transformationFn || angular.identity)(value);
      };
    
*/ @@ -9858,6 +9948,18 @@ function isArray(value) { function isFunction(value){return typeof value == 'function';} +/** + * Determines if a value is a regular expression object. + * + * @private + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `RegExp`. + */ +function isRegExp(value) { + return toString.apply(value) == '[object RegExp]'; +} + + /** * Checks if `obj` is a window object. * @@ -9885,9 +9987,20 @@ function isBoolean(value) { } -function trim(value) { - return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; -} +var trim = (function() { + // native trim is way faster: http://jsperf.com/angular-trim-test + // but IE doesn't have it... :-( + // TODO: we should move this into IE/ES5 polyfill + if (!String.prototype.trim) { + return function(value) { + return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; + }; + } + return function(value) { + return isString(value) ? value.trim() : value; + }; +})(); + /** * @ngdoc function @@ -9903,7 +10016,7 @@ function trim(value) { function isElement(node) { return node && (node.nodeName // we are a direct element - || (node.bind && node.find)); // we have a bind and find method part of jQuery API + || (node.on && node.find)); // we have an on and find method part of jQuery API } /** @@ -10022,7 +10135,10 @@ function isLeafNode (node) { * @returns {*} The copy or updated `destination`, if `destination` was specified. */ function copy(source, destination){ - if (isWindow(source) || isScope(source)) throw Error("Can't copy Window or Scope"); + if (isWindow(source) || isScope(source)) { + throw ngMinErr('cpws', "Can't copy! Making copies of Window or Scope instances is not supported."); + } + if (!destination) { destination = source; if (source) { @@ -10030,24 +10146,28 @@ function copy(source, destination){ destination = copy(source, []); } else if (isDate(source)) { destination = new Date(source.getTime()); + } else if (isRegExp(source)) { + destination = new RegExp(source.source); } else if (isObject(source)) { destination = copy(source, {}); } } } else { - if (source === destination) throw Error("Can't copy equivalent objects or arrays"); + if (source === destination) throw ngMinErr('cpi', "Can't copy! Source and destination are identical."); if (isArray(source)) { destination.length = 0; for ( var i = 0; i < source.length; i++) { destination.push(copy(source[i])); } } else { + var h = destination.$$hashKey; forEach(destination, function(value, key){ delete destination[key]; }); for ( var key in source) { destination[key] = copy(source[key]); } + setHashKey(destination,h); } } return destination; @@ -10075,7 +10195,7 @@ function shallowCopy(src, dst) { * @function * * @description - * Determines if two objects or two values are equivalent. Supports value types, arrays and + * Determines if two objects or two values are equivalent. Supports value types, regular expressions, arrays and * objects. * * Two objects or values are considered equivalent if at least one of the following is true: @@ -10083,11 +10203,14 @@ function shallowCopy(src, dst) { * * Both objects or values pass `===` comparison. * * Both objects or values are of the same type and all of their properties pass `===` comparison. * * Both values are NaN. (In JavasScript, NaN == NaN => false. But we consider two NaN as equal) + * * Both values represent the same regular expression (In JavasScript, + * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual + * representation matches). * * During a property comparison, properties of `function` type and properties with names * that begin with `$` are ignored. * - * Scope and DOMWindow objects are being compared only be identify (`===`). + * Scope and DOMWindow objects are being compared only by identify (`===`). * * @param {*} o1 Object or value to compare. * @param {*} o2 Object or value to compare. @@ -10101,6 +10224,7 @@ function equals(o1, o2) { if (t1 == t2) { if (t1 == 'object') { if (isArray(o1)) { + if (!isArray(o2)) return false; if ((length = o1.length) == o2.length) { for(key=0; key @@ -10272,10 +10417,19 @@ function startingTag(element) { function parseKeyValue(/**string*/keyValue) { var obj = {}, key_value, key; forEach((keyValue || "").split('&'), function(keyValue){ - if (keyValue) { + if ( keyValue ) { key_value = keyValue.split('='); - key = decodeURIComponent(key_value[0]); - obj[key] = isDefined(key_value[1]) ? decodeURIComponent(key_value[1]) : true; + key = tryDecodeURIComponent(key_value[0]); + if ( isDefined(key) ) { + var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; + if (!obj[key]) { + obj[key] = val; + } else if(isArray(obj[key])) { + obj[key].push(val); + } else { + obj[key] = [obj[key],val]; + } + } } }); return obj; @@ -10284,7 +10438,13 @@ function parseKeyValue(/**string*/keyValue) { function toKeyValue(obj) { var parts = []; forEach(obj, function(value, key) { + if (isArray(value)) { + forEach(value, function(arrayValue) { + parts.push(encodeUriQuery(key, true) + (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); + }); + } else { parts.push(encodeUriQuery(key, true) + (value === true ? '' : '=' + encodeUriQuery(value, true))); + } }); return parts.length ? parts.join('&') : ''; } @@ -10340,11 +10500,15 @@ function encodeUriQuery(val, pctEncodeSpaces) { * * @description * - * Use this directive to auto-bootstrap on application. Only - * one directive can be used per HTML document. The directive + * Use this directive to auto-bootstrap an application. Only + * one ngApp directive can be used per HTML document. The directive * designates the root of the application and is typically placed * at the root of the page. * + * The first ngApp found in the document will be auto-bootstrapped. To use multiple applications in an + * HTML document you must manually bootstrap them using {@link angular.bootstrap}. + * Applications cannot be nested. + * * In the example below if the `ngApp` directive would not be placed * on the `html` element then the document would not be compiled * and the `{{ 1+2 }}` would not be resolved to `3`. @@ -10410,25 +10574,35 @@ function angularInit(element, bootstrap) { * * See: {@link guide/bootstrap Bootstrap} * + * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. + * They must use {@link api/ng.directive:ngApp ngApp}. + * * @param {Element} element DOM element which is the root of angular application. * @param {Array=} modules an array of module declarations. See: {@link angular.module modules} * @returns {AUTO.$injector} Returns the newly created injector for this app. */ function bootstrap(element, modules) { - var resumeBootstrapInternal = function() { + var doBootstrap = function() { element = jqLite(element); + + if (element.injector()) { + var tag = (element[0] === document) ? 'document' : startingTag(element); + throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); + } + modules = modules || []; modules.unshift(['$provide', function($provide) { $provide.value('$rootElement', element); }]); modules.unshift('ng'); var injector = createInjector(modules); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function(scope, element, compile, injector) { + injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', + function(scope, element, compile, injector, animate) { scope.$apply(function() { element.data('$injector', injector); compile(element)(scope); }); + animate.enabled(true); }] ); return injector; @@ -10437,7 +10611,7 @@ function bootstrap(element, modules) { var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return resumeBootstrapInternal(); + return doBootstrap(); } window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); @@ -10445,7 +10619,7 @@ function bootstrap(element, modules) { forEach(extraModules, function(module) { modules.push(module); }); - resumeBootstrapInternal(); + doBootstrap(); }; } @@ -10469,9 +10643,10 @@ function bindJQuery() { injector: JQLitePrototype.injector, inheritedData: JQLitePrototype.inheritedData }); - JQLitePatchJQueryRemove('remove', true); - JQLitePatchJQueryRemove('empty'); - JQLitePatchJQueryRemove('html'); + // Method signature: JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) + JQLitePatchJQueryRemove('remove', true, true, false); + JQLitePatchJQueryRemove('empty', false, false, false); + JQLitePatchJQueryRemove('html', false, false, true); } else { jqLite = JQLite; } @@ -10479,11 +10654,11 @@ function bindJQuery() { } /** - * throw error of the argument is falsy. + * throw error if the argument is falsy. */ function assertArg(arg, name, reason) { if (!arg) { - throw new Error("Argument '" + (name || '?') + "' is " + (reason || "required")); + throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); } return arg; } @@ -10498,6 +10673,33 @@ function assertArgFn(arg, name, acceptArrayAnnotation) { return arg; } +/** + * Return the value accessible from the object by path. Any undefined traversals are ignored + * @param {Object} obj starting object + * @param {string} path path to traverse + * @param {boolean=true} bindFnToScope + * @returns value as accessible by path + */ +//TODO(misko): this function needs to be removed +function getter(obj, path, bindFnToScope) { + if (!path) return obj; + var keys = path.split('.'); + var key; + var lastInstance = obj; + var len = keys.length; + + for (var i = 0; i < len; i++) { + key = keys[i]; + if (obj) { + obj = (lastInstance = obj)[key]; + } + } + if (!bindFnToScope && isFunction(obj)) { + return bind(lastInstance, obj); + } + return obj; +} + /** * @ngdoc interface * @name angular.Module @@ -10528,8 +10730,8 @@ function setupModuleLoader(window) { * * # Module * - * A module is a collocation of services, directives, filters, and configuration information. Module - * is used to configure the {@link AUTO.$injector $injector}. + * A module is a collection of services, directives, filters, and configuration information. + * `angular.module` is used to configure the {@link AUTO.$injector $injector}. * *
      * // Create a new module
@@ -10568,7 +10770,9 @@ function setupModuleLoader(window) {
       }
       return ensure(modules, name, function() {
         if (!requires) {
-          throw Error('No module: ' + name);
+          throw minErr('$injector')('nomod', "Module '{0}' is not available! You either misspelled the module name " +
+              "or forgot to load it. If registering a module ensure that you specify the dependencies as the second " +
+              "argument.", name);
         }
 
         /** @type {!Array.>} */
@@ -10669,24 +10873,30 @@ function setupModuleLoader(window) {
            * @param {Function} animationFactory Factory function for creating new instance of an animation.
            * @description
            *
-           * Defines an animation hook that can be later used with {@link ng.directive:ngAnimate ngAnimate}
-           * alongside {@link ng.directive:ngAnimate#Description common ng directives} as well as custom directives.
-           * 
-           * module.animation('animation-name', function($inject1, $inject2) {
-           *   return {
-           *     //this gets called in preparation to setup an animation
-           *     setup : function(element) { ... },
+           * **NOTE**: animations are take effect only if the **ngAnimate** module is loaded.
            *
-           *     //this gets called once the animation is run
-           *     start : function(element, done, memo) { ... }
+           *
+           * Defines an animation hook that can be later used with {@link ngAnimate.$animate $animate} service and
+           * directives that use this service.
+           *
+           * 
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
            *   }
            * })
            * 
* - * See {@link ng.$animationProvider#register $animationProvider.register()} and - * {@link ng.directive:ngAnimate ngAnimate} for more information. + * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and + * {@link ngAnimate ngAnimate module} for more information. */ - animation: invokeLater('$animationProvider', 'register'), + animation: invokeLater('$animateProvider', 'register'), /** * @ngdoc method @@ -10787,11 +10997,11 @@ function setupModuleLoader(window) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.1.4', // all of these placeholder strings will be replaced by grunt's + full: '1.2.0rc1', // all of these placeholder strings will be replaced by grunt's major: 1, // package task - minor: 1, - dot: 4, - codeName: 'quantum-manipulation' + minor: 2, + dot: 0, + codeName: 'spooky-giraffe' }; @@ -10817,12 +11027,12 @@ function publishExternalAPI(angular){ 'isNumber': isNumber, 'isElement': isElement, 'isArray': isArray, + '$$minErr': minErr, 'version': version, 'isDate': isDate, 'lowercase': lowercase, 'uppercase': uppercase, - 'callbacks': {counter: 0}, - 'noConflict': noConflict + 'callbacks': {counter: 0} }); angularModule = setupModuleLoader(window); @@ -10845,7 +11055,7 @@ function publishExternalAPI(angular){ style: styleDirective, option: optionDirective, ngBind: ngBindDirective, - ngBindHtmlUnsafe: ngBindHtmlUnsafeDirective, + ngBindHtml: ngBindHtmlDirective, ngBindTemplate: ngBindTemplateDirective, ngClass: ngClassDirective, ngClassEven: ngClassEvenDirective, @@ -10855,19 +11065,18 @@ function publishExternalAPI(angular){ ngController: ngControllerDirective, ngForm: ngFormDirective, ngHide: ngHideDirective, + ngIf: ngIfDirective, ngInclude: ngIncludeDirective, ngInit: ngInitDirective, ngNonBindable: ngNonBindableDirective, ngPluralize: ngPluralizeDirective, ngRepeat: ngRepeatDirective, ngShow: ngShowDirective, - ngSubmit: ngSubmitDirective, ngStyle: ngStyleDirective, ngSwitch: ngSwitchDirective, ngSwitchWhen: ngSwitchWhenDirective, ngSwitchDefault: ngSwitchDefaultDirective, ngOptions: ngOptionsDirective, - ngView: ngViewDirective, ngTransclude: ngTranscludeDirective, ngModel: ngModelDirective, ngList: ngListDirective, @@ -10880,8 +11089,7 @@ function publishExternalAPI(angular){ directive(ngEventDirectives); $provide.provider({ $anchorScroll: $AnchorScrollProvider, - $animation: $AnimationProvider, - $animator: $AnimatorProvider, + $animate: $AnimateProvider, $browser: $BrowserProvider, $cacheFactory: $CacheFactoryProvider, $controller: $ControllerProvider, @@ -10894,14 +11102,15 @@ function publishExternalAPI(angular){ $location: $LocationProvider, $log: $LogProvider, $parse: $ParseProvider, - $route: $RouteProvider, - $routeParams: $RouteParamsProvider, $rootScope: $RootScopeProvider, $q: $QProvider, + $sce: $SceProvider, + $sceDelegate: $SceDelegateProvider, $sniffer: $SnifferProvider, $templateCache: $TemplateCacheProvider, $timeout: $TimeoutProvider, - $window: $WindowProvider + $window: $WindowProvider, + $$urlUtils: $$UrlUtilsProvider }); } ]); @@ -10933,24 +11142,27 @@ function publishExternalAPI(angular){ * Note: All element references in Angular are always wrapped with jQuery or jqLite; they are never * raw DOM references. * - * ## Angular's jQuery lite provides the following methods: + * ## Angular's jqLite + * Angular's lite version of jQuery provides only the following jQuery methods: * * - [addClass()](http://api.jquery.com/addClass/) * - [after()](http://api.jquery.com/after/) * - [append()](http://api.jquery.com/append/) * - [attr()](http://api.jquery.com/attr/) - * - [bind()](http://api.jquery.com/bind/) - * - [children()](http://api.jquery.com/children/) + * - [bind()](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData + * - [children()](http://api.jquery.com/children/) - Does not support selectors * - [clone()](http://api.jquery.com/clone/) * - [contents()](http://api.jquery.com/contents/) * - [css()](http://api.jquery.com/css/) * - [data()](http://api.jquery.com/data/) * - [eq()](http://api.jquery.com/eq/) - * - [find()](http://api.jquery.com/find/) - Limited to lookups by tag name. + * - [find()](http://api.jquery.com/find/) - Limited to lookups by tag name * - [hasClass()](http://api.jquery.com/hasClass/) * - [html()](http://api.jquery.com/html/) - * - [next()](http://api.jquery.com/next/) - * - [parent()](http://api.jquery.com/parent/) + * - [next()](http://api.jquery.com/next/) - Does not support selectors + * - [on()](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData + * - [off()](http://api.jquery.com/off/) - Does not support namespaces or selectors + * - [parent()](http://api.jquery.com/parent/) - Does not support selectors * - [prepend()](http://api.jquery.com/prepend/) * - [prop()](http://api.jquery.com/prop/) * - [ready()](http://api.jquery.com/ready/) @@ -10961,13 +11173,19 @@ function publishExternalAPI(angular){ * - [replaceWith()](http://api.jquery.com/replaceWith/) * - [text()](http://api.jquery.com/text/) * - [toggleClass()](http://api.jquery.com/toggleClass/) - * - [triggerHandler()](http://api.jquery.com/triggerHandler/) - Doesn't pass native event objects to handlers. - * - [unbind()](http://api.jquery.com/unbind/) + * - [triggerHandler()](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. + * - [unbind()](http://api.jquery.com/off/) - Does not support namespaces * - [val()](http://api.jquery.com/val/) * - [wrap()](http://api.jquery.com/wrap/) * - * ## In addition to the above, Angular provides additional methods to both jQuery and jQuery lite: + * ## jQuery/jqLite Extras + * Angular also provides the following additional methods and events to both jQuery and jqLite: * + * ### Events + * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event + * on all DOM nodes being removed. This can be used to clean up and 3rd party bindings to the DOM + * element before it is removed. + * ### Methods * - `controller(name)` - retrieves the controller of the current element or its parent. By default * retrieves controller associated with the `ngController` directive. If `name` is provided as * camelCase directive name, then the controller for this directive will be retrieved (e.g. @@ -10997,6 +11215,7 @@ function jqNextId() { return ++jqId; } var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; var MOZ_HACK_REGEXP = /^moz([A-Z])/; +var jqLiteMinErr = minErr('jqLite'); /** * Converts snake_case to camelCase. @@ -11014,37 +11233,38 @@ function camelCase(name) { ///////////////////////////////////////////// // jQuery mutation patch // -// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a +// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a // $destroy event on all DOM nodes being removed. // ///////////////////////////////////////////// -function JQLitePatchJQueryRemove(name, dispatchThis) { +function JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { var originalJqFn = jQuery.fn[name]; originalJqFn = originalJqFn.$original || originalJqFn; removePatch.$original = originalJqFn; jQuery.fn[name] = removePatch; - function removePatch() { - var list = [this], + function removePatch(param) { + var list = filterElems && param ? [this.filter(param)] : [this], fireEvent = dispatchThis, set, setIndex, setLength, - element, childIndex, childLength, children, - fns, events; + element, childIndex, childLength, children; - while(list.length) { - set = list.shift(); - for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { - element = jqLite(set[setIndex]); - if (fireEvent) { - element.triggerHandler('$destroy'); - } else { - fireEvent = !fireEvent; - } - for(childIndex = 0, childLength = (children = element.children()).length; - childIndex < childLength; - childIndex++) { - list.push(jQuery(children[childIndex])); + if (!getterIfNoArguments || param != null) { + while(list.length) { + set = list.shift(); + for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { + element = jqLite(set[setIndex]); + if (fireEvent) { + element.triggerHandler('$destroy'); + } else { + fireEvent = !fireEvent; + } + for(childIndex = 0, childLength = (children = element.children()).length; + childIndex < childLength; + childIndex++) { + list.push(jQuery(children[childIndex])); + } } } } @@ -11059,7 +11279,7 @@ function JQLite(element) { } if (!(this instanceof JQLite)) { if (isString(element) && element.charAt(0) != '<') { - throw Error('selectors not implemented'); + throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); } return new JQLite(element); } @@ -11071,7 +11291,8 @@ function JQLite(element) { div.innerHTML = '
 
' + element; // IE insanity to make NoScope elements work! div.removeChild(div.firstChild); // remove the superfluous div JQLiteAddNodes(this, div.childNodes); - this.remove(); // detach the elements from the temporary DOM div. + var fragment = jqLite(document.createDocumentFragment()); + fragment.append(this); // detach the elements from the temporary DOM div. } else { JQLiteAddNodes(this, element); } @@ -11088,7 +11309,9 @@ function JQLiteDealoc(element){ } } -function JQLiteUnbind(element, type, fn) { +function JQLiteOff(element, type, fn, unsupported) { + if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); + var events = JQLiteExpandoStore(element, 'events'), handle = JQLiteExpandoStore(element, 'handle'); @@ -11100,23 +11323,30 @@ function JQLiteUnbind(element, type, fn) { delete events[type]; }); } else { - if (isUndefined(fn)) { - removeEventListenerFn(element, type, events[type]); - delete events[type]; - } else { - arrayRemove(events[type], fn); - } + forEach(type.split(' '), function(type) { + if (isUndefined(fn)) { + removeEventListenerFn(element, type, events[type]); + delete events[type]; + } else { + arrayRemove(events[type] || [], fn); + } + }); } } -function JQLiteRemoveData(element) { +function JQLiteRemoveData(element, name) { var expandoId = element[jqName], expandoStore = jqCache[expandoId]; if (expandoStore) { + if (name) { + delete jqCache[expandoId].data[name]; + return; + } + if (expandoStore.handle) { expandoStore.events.$destroy && expandoStore.handle({}, '$destroy'); - JQLiteUnbind(element); + JQLiteOff(element); } delete jqCache[expandoId]; element[jqName] = undefined; // ie does not allow deletion of attributes on elements. @@ -11216,7 +11446,7 @@ function JQLiteInheritedData(element, name, value) { } while (element.length) { - if (value = element.data(name)) return value; + if ((value = element.data(name)) !== undefined) return value; element = element.parent(); } } @@ -11238,9 +11468,9 @@ var JQLitePrototype = JQLite.prototype = { if (document.readyState === 'complete'){ setTimeout(trigger); } else { - this.bind('DOMContentLoaded', trigger); // works for modern browsers and IE9 + this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 // we can not use jqLite since we are not done loading and jQuery could be loaded later. - JQLite(window).bind('load', trigger); // fallback to window.onload for others + JQLite(window).on('load', trigger); // fallback to window.onload for others } }, toString: function() { @@ -11362,27 +11592,38 @@ forEach({ } }, - text: extend((msie < 9) - ? function(element, value) { - if (element.nodeType == 1 /** Element */) { - if (isUndefined(value)) - return element.innerText; - element.innerText = value; - } else { - if (isUndefined(value)) - return element.nodeValue; - element.nodeValue = value; - } + text: (function() { + var NODE_TYPE_TEXT_PROPERTY = []; + if (msie < 9) { + NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ + NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ + } else { + NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ + NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ + } + getText.$dv = ''; + return getText; + + function getText(element, value) { + var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType] + if (isUndefined(value)) { + return textProp ? element[textProp] : ''; } - : function(element, value) { - if (isUndefined(value)) { - return element.textContent; - } - element.textContent = value; - }, {$dv:''}), + element[textProp] = value; + } + })(), val: function(element, value) { if (isUndefined(value)) { + if (nodeName_(element) === 'SELECT' && element.multiple) { + var result = []; + forEach(element.options, function (option) { + if (option.selected) { + result.push(option.value || option.text); + } + }); + return result.length === 0 ? null : result; + } return element.value; } element.value = value; @@ -11424,8 +11665,14 @@ forEach({ return this; } else { // we are a read, so read the first child. - if (this.length) - return fn(this[0], arg1, arg2); + var value = fn.$dv; + // Only if we have $dv do we iterate over all, otherwise it is just the first element. + var jj = value == undefined ? Math.min(this.length, 1) : this.length; + for (var j = 0; j < jj; j++) { + var nodeValue = fn(this[j], arg1, arg2); + value = value ? value + nodeValue : nodeValue; + } + return value; } } else { // we are a write, so apply to all children @@ -11435,7 +11682,6 @@ forEach({ // return self for chaining return this; } - return fn.$dv; }; }); @@ -11467,7 +11713,7 @@ function createEventHandler(element, events) { } event.isDefaultPrevented = function() { - return event.defaultPrevented; + return event.defaultPrevented || event.returnValue == false; }; forEach(events[type || event.type], function(fn) { @@ -11502,7 +11748,9 @@ forEach({ dealoc: JQLiteDealoc, - bind: function bindFn(element, type, fn){ + on: function onFn(element, type, fn, unsupported){ + if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); + var events = JQLiteExpandoStore(element, 'events'), handle = JQLiteExpandoStore(element, 'handle'); @@ -11514,23 +11762,43 @@ forEach({ if (!eventFns) { if (type == 'mouseenter' || type == 'mouseleave') { - var counter = 0; + var contains = document.body.contains || document.body.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; - events.mouseenter = []; - events.mouseleave = []; + events[type] = []; - bindFn(element, 'mouseover', function(event) { - counter++; - if (counter == 1) { - handle(event, 'mouseenter'); - } - }); - bindFn(element, 'mouseout', function(event) { - counter --; - if (counter == 0) { - handle(event, 'mouseleave'); + // Refer to jQuery's implementation of mouseenter & mouseleave + // Read about mouseenter and mouseleave: + // http://www.quirksmode.org/js/events_mouse.html#link8 + var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; + + onFn(element, eventmap[type], function(event) { + var target = this, related = event.relatedTarget; + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !contains(target, related)) ){ + handle(event, type); } }); + } else { addEventListenerFn(element, type, handle); events[type] = []; @@ -11541,7 +11809,7 @@ forEach({ }); }, - unbind: JQLiteUnbind, + off: JQLiteOff, replaceWith: function(element, replaceNode) { var index, parent = element.parentNode; @@ -11581,12 +11849,7 @@ forEach({ if (element.nodeType === 1) { var index = element.firstChild; forEach(new JQLite(node), function(child){ - if (index) { - element.insertBefore(child, index); - } else { - element.appendChild(child); - index = child; - } + element.insertBefore(child, index); }); } }, @@ -11648,32 +11911,40 @@ forEach({ clone: JQLiteClone, - triggerHandler: function(element, eventName) { + triggerHandler: function(element, eventName, eventData) { var eventFns = (JQLiteExpandoStore(element, 'events') || {})[eventName]; + eventData = eventData || { + preventDefault: noop, + stopPropagation: noop + }; forEach(eventFns, function(fn) { - fn.call(element, null); + fn.call(element, eventData); }); } }, function(fn, name){ /** * chaining functions */ - JQLite.prototype[name] = function(arg1, arg2) { + JQLite.prototype[name] = function(arg1, arg2, arg3) { var value; for(var i=0; i < this.length; i++) { if (value == undefined) { - value = fn(this[i], arg1, arg2); + value = fn(this[i], arg1, arg2, arg3); if (value !== undefined) { // any function which returns a value needs to be wrapped value = jqLite(value); } } else { - JQLiteAddNodes(value, fn(this[i], arg1, arg2)); + JQLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); } } return value == undefined ? this : value; }; + + // bind legacy bind/unbind to on/off + JQLite.prototype.bind = JQLite.prototype.on; + JQLite.prototype.unbind = JQLite.prototype.off; }); /** @@ -11783,6 +12054,7 @@ var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; var FN_ARG_SPLIT = /,/; var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; +var $injectorMinErr = minErr('$injector'); function annotate(fn) { var $inject, fnText, @@ -11803,7 +12075,7 @@ function annotate(fn) { } } else if (isArray(fn)) { last = fn.length - 1; - assertArgFn(fn[last], 'fn') + assertArgFn(fn[last], 'fn'); $inject = fn.slice(0, last); } else { assertArgFn(fn, 'fn', true); @@ -11837,7 +12109,7 @@ function annotate(fn) { * # Injection Function Annotation * * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following ways are all valid way of annotating function with injection arguments and are equivalent. + * following are all valid ways of annotating function with injection arguments and are equivalent. * *
  *   // inferred (only works if code not minified/obfuscated)
@@ -11892,6 +12164,18 @@ function annotate(fn) {
  * @returns {*} the value returned by the invoked `fn` function.
  */
 
+/**
+ * @ngdoc method
+ * @name AUTO.$injector#has
+ * @methodOf AUTO.$injector
+ *
+ * @description
+ * Allows the user to query if the particular service exist.
+ *
+ * @param {string} Name of the service to query.
+ * @returns {boolean} returns true if injector has given service.
+ */
+
 /**
  * @ngdoc method
  * @name AUTO.$injector#instantiate
@@ -11930,7 +12214,7 @@ function annotate(fn) {
  *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
  * 
* - * This method does not work with code minfication / obfuscation. For this reason the following annotation strategies + * This method does not work with code minification / obfuscation. For this reason the following annotation strategies * are supported. * * # The `$inject` property @@ -11966,7 +12250,7 @@ function annotate(fn) { * // ... * }; * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tempFn); + * injector.invoke(tmpFn); * * // To better support inline function the inline annotation is supported * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { @@ -12019,7 +12303,7 @@ function annotate(fn) { * * beforeEach(module(function($provide) { * $provide.provider('greet', GreetProvider); - * }); + * })); * * it('should greet', inject(function(greet) { * expect(greet('angular')).toEqual('Hello angular!'); @@ -12032,9 +12316,7 @@ function annotate(fn) { * inject(function(greet) { * expect(greet('angular')).toEqual('Ahoj angular!'); * }); - * )}; - * - * }); + * }); *
*/ @@ -12128,7 +12410,7 @@ function annotate(fn) { * * @param {string} name The name of the service to decorate. * @param {function()} decorator This function will be invoked when the service needs to be - * instanciated. The function is called using the {@link AUTO.$injector#invoke + * instantiated. The function is called using the {@link AUTO.$injector#invoke * injector.invoke} method and is therefore fully injectable. Local injection arguments: * * * `$delegate` - The original service instance, which can be monkey patched, configured, @@ -12153,7 +12435,7 @@ function createInjector(modulesToLoad) { }, providerInjector = (providerCache.$injector = createInternalInjector(providerCache, function() { - throw Error("Unknown provider: " + path.join(' <- ')); + throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); })), instanceCache = {}, instanceInjector = (instanceCache.$injector = @@ -12186,7 +12468,7 @@ function createInjector(modulesToLoad) { provider_ = providerInjector.instantiate(provider_); } if (!provider_.$get) { - throw Error('Provider ' + name + ' must define $get factory method.'); + throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); } return providerCache[name + providerSuffix] = provider_; } @@ -12224,37 +12506,36 @@ function createInjector(modulesToLoad) { forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; loadedModules.put(module, true); - if (isString(module)) { - var moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - try { + try { + if (isString(module)) { + var moduleFn = angularModule(module); + runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); + for(var invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { var invokeArgs = invokeQueue[i], provider = providerInjector.get(invokeArgs[0]); provider[invokeArgs[1]].apply(provider, invokeArgs[2]); } - } catch (e) { - if (e.message) e.message += ' from ' + module; - throw e; + } else if (isFunction(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else if (isArray(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else { + assertArgFn(module, 'module'); } - } else if (isFunction(module)) { - try { - runBlocks.push(providerInjector.invoke(module)); - } catch (e) { - if (e.message) e.message += ' from ' + module; - throw e; + } catch (e) { + if (isArray(module)) { + module = module[module.length - 1]; } - } else if (isArray(module)) { - try { - runBlocks.push(providerInjector.invoke(module)); - } catch (e) { - if (e.message) e.message += ' from ' + String(module[module.length - 1]); - throw e; + if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { + // Safari & FF's stack traces don't contain error.message content unlike those of Chrome and IE + // So if stack doesn't contain message, we create a new string that contains both. + // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. + e = e.message + '\n' + e.stack; } - } else { - assertArgFn(module, 'module'); + throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", module, e.stack || e.message || e); } }); return runBlocks; @@ -12267,12 +12548,9 @@ function createInjector(modulesToLoad) { function createInternalInjector(cache, factory) { function getService(serviceName) { - if (typeof serviceName !== 'string') { - throw Error('Service name expected'); - } if (cache.hasOwnProperty(serviceName)) { if (cache[serviceName] === INSTANTIATING) { - throw Error('Circular dependency: ' + path.join(' <- ')); + throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); } return cache[serviceName]; } else { @@ -12294,6 +12572,9 @@ function createInjector(modulesToLoad) { for(i = 0, length = $inject.length; i < length; i++) { key = $inject[i]; + if (typeof key !== 'string') { + throw $injectorMinErr('itkn', 'Incorrect injection token! Expected service name as string, got {0}', key); + } args.push( locals && locals.hasOwnProperty(key) ? locals[key] @@ -12327,6 +12608,8 @@ function createInjector(modulesToLoad) { 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); @@ -12338,7 +12621,10 @@ function createInjector(modulesToLoad) { invoke: invoke, instantiate: instantiate, get: getService, - annotate: annotate + annotate: annotate, + has: function(name) { + return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); + } }; } } @@ -12410,382 +12696,191 @@ function $AnchorScrollProvider() { }]; } +var $animateMinErr = minErr('$animate'); /** * @ngdoc object - * @name ng.$animationProvider + * @name ng.$animateProvider + * * @description + * Default implementation of $animate that doesn't perform any animations, instead just synchronously performs DOM + * updates and calls done() callbacks. * - * The $AnimationProvider provider allows developers to register and access custom JavaScript animations directly inside - * of a module. + * In order to enable animations the ngAnimate module has to be loaded. * + * To see the functional implementation check out src/ngAnimate/animate.js */ -$AnimationProvider.$inject = ['$provide']; -function $AnimationProvider($provide) { - var suffix = 'Animation'; +var $AnimateProvider = ['$provide', function($provide) { + + this.$$selectors = {}; + /** * @ngdoc function - * @name ng.$animation#register - * @methodOf ng.$animationProvider + * @name ng.$animateProvider#register + * @methodOf ng.$animateProvider * * @description * Registers a new injectable animation factory function. The factory function produces the animation object which - * has these two properties: + * contains callback functions for each event that is expected to be animated. * - * * `setup`: `function(Element):*` A function which receives the starting state of the element. The purpose - * of this function is to get the element ready for animation. Optionally the function returns an memento which - * is passed to the `start` function. - * * `start`: `function(Element, doneFunction, *)` The element to animate, the `doneFunction` to be called on - * element animation completion, and an optional memento from the `setup` function. + * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` must be called once the + * element animation is complete. If a function is returned then the animation service will use this function to + * cancel the animation whenever a cancel event is triggered. + * + * + *
+   *   return {
+     *     eventFn : function(element, done) {
+     *       //code to run the animation
+     *       //once complete, then run done()
+     *       return function cancellationFunction() {
+     *         //code to cancel the animation
+     *       }
+     *     }
+     *   }
+   *
* * @param {string} name The name of the animation. * @param {function} factory The factory function that will be executed to return the animation object. - * */ this.register = function(name, factory) { - $provide.factory(camelCase(name) + suffix, factory); + var key = name + '-animation'; + if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', + "Expecting class selector starting with '.' got '{0}'.", name); + this.$$selectors[name.substr(1)] = key; + $provide.factory(key, factory); }; - this.$get = ['$injector', function($injector) { + this.$get = ['$timeout', function($timeout) { + /** - * @ngdoc function - * @name ng.$animation - * @function + * @ngdoc object + * @name ng.$animate * * @description - * The $animation service is used to retrieve any defined animation functions. When executed, the $animation service - * will return a object that contains the setup and start functions that were defined for the animation. + * The $animate service provides rudimentary DOM manipulation functions to insert, remove, move elements within + * the DOM as well as adding and removing classes. This service is the core service used by the ngAnimate $animator + * service which provides high-level animation hooks for CSS and JavaScript. * - * @param {String} name Name of the animation function to retrieve. Animation functions are registered and stored - * inside of the AngularJS DI so a call to $animate('custom') is the same as injecting `customAnimation` - * via dependency injection. - * @return {Object} the animation object which contains the `setup` and `start` functions that perform the animation. + * $animate is available in the AngularJS core, however, the ngAnimate module must be included to enable full out + * animation support. Otherwise, $animate will only perform simple DOM manipulation operations. + * + * To learn more about enabling animation support, click here to visit the {@link ngAnimate ngAnimate module page} + * as well as the {@link ngAnimate.$animate ngAnimate $animate service page}. */ - return function $animation(name) { - if (name) { - try { - return $injector.get(camelCase(name) + suffix); - } catch (e) { - //TODO(misko): this is a hack! we should have a better way to test if the injector has a given key. - // The issue is that the animations are optional, and if not present they should be silently ignored. - // The proper way to fix this is to add API onto the injector so that we can ask to see if a given - // animation is supported. - } - } - } + return { + + /** + * @ngdoc function + * @name ng.$animate#enter + * @methodOf ng.$animate + * @function + * + * @description + * Inserts the element into the DOM either after the `after` element or within the `parent` element. Once complete, + * the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will be inserted into the DOM + * @param {jQuery/jqLite element} parent the parent element which will append the element as a child (if the after element is not present) + * @param {jQuery/jqLite element} after the sibling element which will append the element after itself + * @param {function=} done callback function that will be called after the element has been inserted into the DOM + */ + enter : function(element, parent, after, done) { + var afterNode = after && after[after.length - 1]; + var parentNode = parent && parent[0] || afterNode && afterNode.parentNode; + // IE does not like undefined so we have to pass null. + var afterNextSibling = (afterNode && afterNode.nextSibling) || null; + forEach(element, function(node) { + parentNode.insertBefore(node, afterNextSibling); + }); + $timeout(done || noop, 0, false); + }, + + /** + * @ngdoc function + * @name ng.$animate#leave + * @methodOf ng.$animate + * @function + * + * @description + * Removes the element from the DOM. Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will be removed from the DOM + * @param {function=} done callback function that will be called after the element has been removed from the DOM + */ + leave : function(element, done) { + element.remove(); + $timeout(done || noop, 0, false); + }, + + /** + * @ngdoc function + * @name ng.$animate#move + * @methodOf ng.$animate + * @function + * + * @description + * Moves the position of the provided element within the DOM to be placed either after the `after` element or inside of the `parent` element. + * Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will be moved around within the DOM + * @param {jQuery/jqLite element} parent the parent element where the element will be inserted into (if the after element is not present) + * @param {jQuery/jqLite element} after the sibling element where the element will be positioned next to + * @param {function=} done the callback function (if provided) that will be fired after the element has been moved to it's new position + */ + move : function(element, parent, after, done) { + // Do not remove element before insert. Removing will cause data associated with the + // element to be dropped. Insert will implicitly do the remove. + this.enter(element, parent, after, done); + }, + + /** + * @ngdoc function + * @name ng.$animate#addClass + * @methodOf ng.$animate + * @function + * + * @description + * Adds the provided className CSS class value to the provided element. Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will have the className value added to it + * @param {string} className the CSS class which will be added to the element + * @param {function=} done the callback function (if provided) that will be fired after the className value has been added to the element + */ + addClass : function(element, className, done) { + className = isString(className) ? + className : + isArray(className) ? className.join(' ') : ''; + element.addClass(className); + $timeout(done || noop, 0, false); + }, + + /** + * @ngdoc function + * @name ng.$animate#removeClass + * @methodOf ng.$animate + * @function + * + * @description + * Removes the provided className CSS class value from the provided element. Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will have the className value removed from it + * @param {string} className the CSS class which will be removed from the element + * @param {function=} done the callback function (if provided) that will be fired after the className value has been removed from the element + */ + removeClass : function(element, className, done) { + className = isString(className) ? + className : + isArray(className) ? className.join(' ') : ''; + element.removeClass(className); + $timeout(done || noop, 0, false); + }, + + enabled : noop + }; }]; -}; - -// NOTE: this is a pseudo directive. - -/** - * @ngdoc directive - * @name ng.directive:ngAnimate - * - * @description - * The `ngAnimate` directive works as an attribute that is attached alongside pre-existing directives. - * It effects how the directive will perform DOM manipulation. This allows for complex animations to take place while - * without burduning the directive which uses the animation with animation details. The built dn directives - * `ngRepeat`, `ngInclude`, `ngSwitch`, `ngShow`, `ngHide` and `ngView` already accept `ngAnimate` directive. - * Custom directives can take advantage of animation through {@link ng.$animator $animator service}. - * - * Below is a more detailed breakdown of the supported callback events provided by pre-exisitng ng directives: - * - * * {@link ng.directive:ngRepeat#animations ngRepeat} — enter, leave and move - * * {@link ng.directive:ngView#animations ngView} — enter and leave - * * {@link ng.directive:ngInclude#animations ngInclude} — enter and leave - * * {@link ng.directive:ngSwitch#animations ngSwitch} — enter and leave - * * {@link ng.directive:ngShow#animations ngShow & ngHide} - show and hide respectively - * - * You can find out more information about animations upon visiting each directive page. - * - * Below is an example of a directive that makes use of the ngAnimate attribute: - * - *
- * 
- * 
- *
- * 
- * 
- * 
- * 
- *
- * 
- * 
- * 
- * - * The `event1` and `event2` attributes refer to the animation events specific to the directive that has been assigned. - * - *

CSS-defined Animations

- * By default, ngAnimate attaches two CSS3 classes per animation event to the DOM element to achieve the animation. - * This is up to you, the developer, to ensure that the animations take place using cross-browser CSS3 transitions. - * All that is required is the following CSS code: - * - *
- * 
- *
- * 
- *
- * - * Upon DOM mutation, the setup class is added first, then the browser is allowed to reflow the content and then, - * the start class is added to trigger the animation. The ngAnimate directive will automatically extract the duration - * of the animation to determine when the animation ends. Once the animation is over then both CSS classes will be - * removed from the DOM. If a browser does not support CSS transitions then the animation will start and end - * immediately resulting in a DOM element that is at it's final state. This final state is when the DOM element - * has no CSS animation classes surrounding it. - * - *

JavaScript-defined Animations

- * In the event that you do not want to use CSS3 animations or if you wish to offer animations to browsers that do not - * yet support them, then you can make use of JavaScript animations defined inside ngModule. - * - *
- * var ngModule = angular.module('YourApp', []);
- * ngModule.animation('animate-enter', function() {
- *   return {
- *     setup : function(element) {
- *       //prepare the element for animation
- *       element.css({ 'opacity': 0 });
- *       var memo = "..."; //this value is passed to the start function
- *       return memo;
- *     },
- *     start : function(element, done, memo) {
- *       //start the animation
- *       element.animate({
- *         'opacity' : 1
- *       }, function() {
- *         //call when the animation is complete
- *         done()
- *       });
- *     }
- *   }
- * });
- * 
- * - * As you can see, the JavaScript code follows a similar template to the CSS3 animations. Once defined, the animation - * can be used in the same way with the ngAnimate attribute. Keep in mind that, when using JavaScript-enabled - * animations, ngAnimate will also add in the same CSS classes that CSS-enabled animations do (even if you're using - * JavaScript animations) to animated the element, but it will not attempt to find any CSS3 transition duration value. - * It will instead close off the animation once the provided done function is executed. So it's important that you - * make sure your animations remember to fire off the done function once the animations are complete. - * - * @param {expression} ngAnimate Used to configure the DOM manipulation animations. - * - */ - -/** - * @ngdoc function - * @name ng.$animator - * - * @description - * The $animator service provides the DOM manipulation API which is decorated with animations. - * - * @param {Scope} scope the scope for the ng-animate. - * @param {Attributes} attr the attributes object which contains the ngAnimate key / value pair. (The attributes are - * passed into the linking function of the directive using the `$animator`.) - * @return {object} the animator object which contains the enter, leave, move, show, hide and animate methods. - */ -var $AnimatorProvider = function() { - this.$get = ['$animation', '$window', '$sniffer', function($animation, $window, $sniffer) { - return function(scope, attrs) { - var ngAnimateAttr = attrs.ngAnimate; - var animator = {}; - - /** - * @ngdoc function - * @name ng.animator#enter - * @methodOf ng.$animator - * @function - * - * @description - * Injects the element object into the DOM (inside of the parent element) and then runs the enter animation. - * - * @param {jQuery/jqLite element} element the element that will be the focus of the enter animation - * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the enter animation - * @param {jQuery/jqLite element} after the sibling element (which is the previous element) of the element that will be the focus of the enter animation - */ - animator.enter = animateActionFactory('enter', insert, noop); - - /** - * @ngdoc function - * @name ng.animator#leave - * @methodOf ng.$animator - * @function - * - * @description - * Runs the leave animation operation and, upon completion, removes the element from the DOM. - * - * @param {jQuery/jqLite element} element the element that will be the focus of the leave animation - * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the leave animation - */ - animator.leave = animateActionFactory('leave', noop, remove); - - /** - * @ngdoc function - * @name ng.animator#move - * @methodOf ng.$animator - * @function - * - * @description - * Fires the move DOM operation. Just before the animation starts, the animator will either append it into the parent container or - * add the element directly after the after element if present. Then the move animation will be run. - * - * @param {jQuery/jqLite element} element the element that will be the focus of the move animation - * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the move animation - * @param {jQuery/jqLite element} after the sibling element (which is the previous element) of the element that will be the focus of the move animation - */ - animator.move = animateActionFactory('move', move, noop); - - /** - * @ngdoc function - * @name ng.animator#show - * @methodOf ng.$animator - * @function - * - * @description - * Reveals the element by setting the CSS property `display` to `block` and then starts the show animation directly after. - * - * @param {jQuery/jqLite element} element the element that will be rendered visible or hidden - */ - animator.show = animateActionFactory('show', show, noop); - - /** - * @ngdoc function - * @name ng.animator#hide - * @methodOf ng.$animator - * - * @description - * Starts the hide animation first and sets the CSS `display` property to `none` upon completion. - * - * @param {jQuery/jqLite element} element the element that will be rendered visible or hidden - */ - animator.hide = animateActionFactory('hide', noop, hide); - return animator; - - function animateActionFactory(type, beforeFn, afterFn) { - var ngAnimateValue = ngAnimateAttr && scope.$eval(ngAnimateAttr); - var className = ngAnimateAttr - ? isObject(ngAnimateValue) ? ngAnimateValue[type] : ngAnimateValue + '-' + type - : ''; - var animationPolyfill = $animation(className); - - var polyfillSetup = animationPolyfill && animationPolyfill.setup; - var polyfillStart = animationPolyfill && animationPolyfill.start; - - if (!className) { - return function(element, parent, after) { - beforeFn(element, parent, after); - afterFn(element, parent, after); - } - } else { - var setupClass = className + '-setup'; - var startClass = className + '-start'; - - return function(element, parent, after) { - if (!$sniffer.supportsTransitions && !polyfillSetup && !polyfillStart) { - beforeFn(element, parent, after); - afterFn(element, parent, after); - return; - } - - element.addClass(setupClass); - beforeFn(element, parent, after); - if (element.length == 0) return done(); - - var memento = (polyfillSetup || noop)(element); - - // $window.setTimeout(beginAnimation, 0); this was causing the element not to animate - // keep at 1 for animation dom rerender - $window.setTimeout(beginAnimation, 1); - - function beginAnimation() { - element.addClass(startClass); - if (polyfillStart) { - polyfillStart(element, done, memento); - } else if (isFunction($window.getComputedStyle)) { - var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition'; - var w3cTransitionProp = 'transition'; //one day all browsers will have this - - var durationKey = 'Duration'; - var duration = 0; - //we want all the styles defined before and after - forEach(element, function(element) { - var globalStyles = $window.getComputedStyle(element) || {}; - duration = Math.max( - parseFloat(globalStyles[w3cTransitionProp + durationKey]) || - parseFloat(globalStyles[vendorTransitionProp + durationKey]) || - 0, - duration); - }); - - $window.setTimeout(done, duration * 1000); - } else { - done(); - } - } - - function done() { - afterFn(element, parent, after); - element.removeClass(setupClass); - element.removeClass(startClass); - } - } - } - } - } - - function show(element) { - element.css('display', ''); - } - - function hide(element) { - element.css('display', 'none'); - } - - function insert(element, parent, after) { - if (after) { - after.after(element); - } else { - parent.append(element); - } - } - - function remove(element) { - element.remove(); - } - - function move(element, parent, after) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - insert(element, parent, after); - } - }]; -}; +}]; /** * ! This is a private undocumented service ! @@ -12911,7 +13006,8 @@ function Browser(window, document, $log, $sniffer) { ////////////////////////////////////////////////////////////// var lastBrowserUrl = location.href, - baseElement = document.find('base'); + baseElement = document.find('base'), + replacedUrl = null; /** * @name ng.$browser#url @@ -12946,14 +13042,21 @@ function Browser(window, document, $log, $sniffer) { baseElement.attr('href', baseElement.attr('href')); } } else { - if (replace) location.replace(url); - else location.href = url; + if (replace) { + location.replace(url); + replacedUrl = url; + } else { + location.href = url; + replacedUrl = null; + } } return self; // getter } else { - // the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return location.href.replace(/%27/g,"'"); + // - the replacedUrl is a workaround for an IE8-9 issue with location.replace method that doesn't update + // location.href synchronously + // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 + return replacedUrl || location.href.replace(/%27/g,"'"); } }; @@ -12999,9 +13102,9 @@ function Browser(window, document, $log, $sniffer) { // changed by push/replaceState // html5 history api - popstate event - if ($sniffer.history) jqLite(window).bind('popstate', fireUrlChange); + if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); // hashchange event - if ($sniffer.hashchange) jqLite(window).bind('hashchange', fireUrlChange); + if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); // polling else self.addPollFn(fireUrlChange); @@ -13084,7 +13187,13 @@ function Browser(window, document, $log, $sniffer) { cookie = cookieArray[i]; index = cookie.indexOf('='); if (index > 0) { //ignore nameless cookies - lastCookies[unescape(cookie.substring(0, index))] = unescape(cookie.substring(index + 1)); + var name = unescape(cookie.substring(0, index)); + // the first value that is seen for a cookie is the most + // specific one. values for the same cookie name that + // follow are for less specific paths. + if (lastCookies[name] === undefined) { + lastCookies[name] = unescape(cookie.substring(index + 1)); + } } } } @@ -13096,7 +13205,7 @@ function Browser(window, document, $log, $sniffer) { /** * @name ng.$browser#defer * @methodOf ng.$browser - * @param {function()} fn A function, who's execution should be defered. + * @param {function()} fn A function, who's execution should be deferred. * @param {number=} [delay=0] of milliseconds to defer the function execution. * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. * @@ -13125,7 +13234,7 @@ function Browser(window, document, $log, $sniffer) { * @methodOf ng.$browser.defer * * @description - * Cancels a defered task identified with `deferId`. + * Cancels a deferred task identified with `deferId`. * * @param {*} deferId Token returned by the `$browser.defer` function. * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully canceled. @@ -13154,7 +13263,20 @@ function $BrowserProvider(){ * @name ng.$cacheFactory * * @description - * Factory that constructs cache objects. + * Factory that constructs cache objects and gives access to them. + * + *
+ * 
+ *  var cache = $cacheFactory('cacheId');
+ *  expect($cacheFactory.get('cacheId')).toBe(cache);
+ *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
+ *
+ *  cache.put("key", "value");
+ *  cache.put("another key", "another value");
+ * 
+ *  expect(cache.info()).toEqual({id: 'cacheId', size: 2}); // Since we've specified no options on creation
+ * 
+ * 
* * * @param {string} cacheId Name or id of the newly created cache. @@ -13179,7 +13301,7 @@ function $CacheFactoryProvider() { function cacheFactory(cacheId, options) { if (cacheId in caches) { - throw Error('cacheId ' + cacheId + ' taken'); + throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); } var size = 0, @@ -13288,6 +13410,16 @@ function $CacheFactoryProvider() { } + /** + * @ngdoc method + * @name ng.$cacheFactory#info + * @methodOf ng.$cacheFactory + * + * @description + * Get information about all the of the caches that have been created + * + * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` + */ cacheFactory.info = function() { var info = {}; forEach(caches, function(cache, cacheId) { @@ -13297,6 +13429,17 @@ function $CacheFactoryProvider() { }; + /** + * @ngdoc method + * @name ng.$cacheFactory#get + * @methodOf ng.$cacheFactory + * + * @description + * Get access to a cache object by the `cacheId` used when it was created. + * + * @param {string} cacheId Name or id of a cache to access. + * @returns {object} Cache object identified by the cacheId or undefined if no such cache. + */ cacheFactory.get = function(cacheId) { return caches[cacheId]; }; @@ -13311,8 +13454,44 @@ function $CacheFactoryProvider() { * @name ng.$templateCache * * @description - * Cache used for storing html templates. - * + * The first time a template is used, it is loaded in the template cache for quick retrieval. You can + * load templates directly into the cache in a `script` tag, or by consuming the `$templateCache` + * service directly. + * + * Adding via the `script` tag: + *
+ * 
+ * 
+ * 
+ * 
+ *   ...
+ * 
+ * 
+ * + * **Note:** the `script` tag containing the template does not need to be included in the `head` of the document, but + * it must be below the `ng-app` definition. + * + * Adding via the $templateCache service: + * + *
+ * var myApp = angular.module('myApp', []);
+ * myApp.run(function($templateCache) {
+ *   $templateCache.put('templateId.html', 'This is the content of the template');
+ * });
+ * 
+ * + * To retrieve the template later, simply use it in your HTML: + *
+ * 
+ *
+ * + * or get it via Javascript: + *
+ * $templateCache.get('templateId.html')
+ * 
+ * * See {@link ng.$cacheFactory $cacheFactory}. * */ @@ -13340,9 +13519,6 @@ function $TemplateCacheProvider() { */ -var NON_ASSIGNABLE_MODEL_EXPRESSION = 'Non-assignable model expression: '; - - /** * @ngdoc function * @name ng.$compile @@ -13463,6 +13639,7 @@ var NON_ASSIGNABLE_MODEL_EXPRESSION = 'Non-assignable model expression: '; * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. */ +var $compileMinErr = minErr('$compile'); /** * @ngdoc service @@ -13477,9 +13654,13 @@ function $CompileProvider($provide) { Suffix = 'Directive', COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/, - MULTI_ROOT_TEMPLATE_ERROR = 'Template must have exactly one root element. was: ', - urlSanitizationWhitelist = /^\s*(https?|ftp|mailto|file):/; + aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|file):/, + imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; + // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes + // The assumption is that future DOM event attribute names will begin with + // 'on' and be composed of only English letters. + var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]*|formaction)$/; /** * @ngdoc function @@ -13488,17 +13669,17 @@ function $CompileProvider($provide) { * @function * * @description - * Register a new directives with the compiler. + * Register a new directive with the compiler. * * @param {string} name Name of the directive in camel-case. (ie ngBind which will match as * ng-bind). - * @param {function} directiveFactory An injectable directive factory function. See {@link guide/directive} for more + * @param {function|Array} directiveFactory An injectable directive factory function. See {@link guide/directive} for more * info. * @returns {ng.$compileProvider} Self for chaining. */ this.directive = function registerDirective(name, directiveFactory) { if (isString(name)) { - assertArg(directiveFactory, 'directive'); + assertArg(directiveFactory, 'directiveFactory'); if (!hasDirectives.hasOwnProperty(name)) { hasDirectives[name] = []; $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', @@ -13534,7 +13715,7 @@ function $CompileProvider($provide) { /** * @ngdoc function - * @name ng.$compileProvider#urlSanitizationWhitelist + * @name ng.$compileProvider#aHrefSanitizationWhitelist * @methodOf ng.$compileProvider * @function * @@ -13544,29 +13725,59 @@ function $CompileProvider($provide) { * * The sanitization is a security measure aimed at prevent XSS attacks via html links. * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into an - * absolute url. Afterwards the url is matched against the `urlSanitizationWhitelist` regular - * expression. If a match is found the original url is written into the dom. Otherwise the - * absolute url is prefixed with `'unsafe:'` string and only then it is written into the DOM. + * Any url about to be assigned to a[href] via data-binding is first normalized and turned into + * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` + * regular expression. If a match is found, the original url is written into the dom. Otherwise, + * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. * * @param {RegExp=} regexp New regexp to whitelist urls with. * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for * chaining otherwise. */ - this.urlSanitizationWhitelist = function(regexp) { + this.aHrefSanitizationWhitelist = function(regexp) { if (isDefined(regexp)) { - urlSanitizationWhitelist = regexp; + aHrefSanitizationWhitelist = regexp; return this; } - return urlSanitizationWhitelist; + return aHrefSanitizationWhitelist; + }; + + + /** + * @ngdoc function + * @name ng.$compileProvider#imgSrcSanitizationWhitelist + * @methodOf ng.$compileProvider + * @function + * + * @description + * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * urls during img[src] sanitization. + * + * The sanitization is a security measure aimed at prevent XSS attacks via html links. + * + * Any url about to be assigned to img[src] via data-binding is first normalized and turned into an + * absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` regular + * expression. If a match is found, the original url is written into the dom. Otherwise, the + * absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. + * + * @param {RegExp=} regexp New regexp to whitelist urls with. + * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for + * chaining otherwise. + */ + this.imgSrcSanitizationWhitelist = function(regexp) { + if (isDefined(regexp)) { + imgSrcSanitizationWhitelist = regexp; + return this; + } + return imgSrcSanitizationWhitelist; }; this.$get = [ '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', + '$controller', '$rootScope', '$document', '$sce', '$$urlUtils', '$animate', function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document) { + $controller, $rootScope, $document, $sce, $$urlUtils, $animate) { var Attributes = function(element, attr) { this.$$element = element; @@ -13577,6 +13788,42 @@ function $CompileProvider($provide) { $normalize: directiveNormalize, + /** + * @ngdoc function + * @name ng.$compile.directive.Attributes#$addClass + * @methodOf ng.$compile.directive.Attributes + * @function + * + * @description + * Adds the CSS class value specified by the classVal parameter to the element. If animations + * are enabled then an animation will be triggered for the class addition. + * + * @param {string} classVal The className value that will be added to the element + */ + $addClass : function(classVal) { + if(classVal && classVal.length > 0) { + $animate.addClass(this.$$element, classVal); + } + }, + + /** + * @ngdoc function + * @name ng.$compile.directive.Attributes#$removeClass + * @methodOf ng.$compile.directive.Attributes + * @function + * + * @description + * Removes the CSS class value specified by the classVal parameter from the element. If animations + * are enabled then an animation will be triggered for the class removal. + * + * @param {string} classVal The className value that will be removed from the element + */ + $removeClass : function(classVal) { + if(classVal && classVal.length > 0) { + $animate.removeClass(this.$$element, classVal); + } + }, + /** * Set a normalized attribute on the element in a way such that all directives * can share the attribute. This function properly handles boolean attributes. @@ -13587,49 +13834,64 @@ function $CompileProvider($provide) { * @param {string=} attrName Optional none normalized name. Defaults to key. */ $set: function(key, value, writeAttr, attrName) { - var booleanKey = getBooleanAttrName(this.$$element[0], key), - $$observers = this.$$observers, - normalizedVal; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; + //special case for class attribute addition + removal + //so that class changes can tap into the animation + //hooks provided by the $animate service + if(key == 'class') { + value = value || ''; + var current = this.$$element.attr('class') || ''; + this.$removeClass(tokenDifference(current, value).join(' ')); + this.$addClass(tokenDifference(value, current).join(' ')); } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); + var booleanKey = getBooleanAttrName(this.$$element[0], key), + normalizedVal, + nodeName; + + if (booleanKey) { + this.$$element.prop(key, value); + attrName = booleanKey; } - } + this[key] = value; - // sanitize a[href] values - if (nodeName_(this.$$element[0]) === 'A' && key === 'href') { - urlSanitizationNode.setAttribute('href', value); - - // href property always returns normalized absolute url, so we can match against that - normalizedVal = urlSanitizationNode.href; - if (!normalizedVal.match(urlSanitizationWhitelist)) { - this[key] = value = 'unsafe:' + normalizedVal; - } - } - - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); + // translate normalized key to actual key + if (attrName) { + this.$attr[key] = attrName; } else { - this.$$element.attr(attrName, value); + attrName = this.$attr[key]; + if (!attrName) { + this.$attr[key] = attrName = snake_case(key, '-'); + } + } + + nodeName = nodeName_(this.$$element); + + // sanitize a[href] and img[src] values + if ((nodeName === 'A' && key === 'href') || + (nodeName === 'IMG' && key === 'src')) { + // NOTE: $$urlUtils.resolve() doesn't support IE < 8 so we don't sanitize for that case. + if (!msie || msie >= 8 ) { + normalizedVal = $$urlUtils.resolve(value); + if (normalizedVal !== '') { + if ((key === 'href' && !normalizedVal.match(aHrefSanitizationWhitelist)) || + (key === 'src' && !normalizedVal.match(imgSrcSanitizationWhitelist))) { + this[key] = value = 'unsafe:' + normalizedVal; + } + } + } + } + + if (writeAttr !== false) { + if (value === null || value === undefined) { + this.$$element.removeAttr(attrName); + } else { + this.$$element.attr(attrName, value); + } } } // fire observers + var $$observers = this.$$observers; $$observers && forEach($$observers[key], function(fn) { try { fn(value); @@ -13637,6 +13899,22 @@ function $CompileProvider($provide) { $exceptionHandler(e); } }); + + function tokenDifference(str1, str2) { + var values = [], + tokens1 = str1.split(/\s+/), + tokens2 = str2.split(/\s+/); + + outer: + for(var i=0;i forEach($compileNodes, function(node, index){ if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = jqLite(node).wrap('').parent()[0]; + $compileNodes[index] = node = jqLite(node).wrap('').parent()[0]; } }); - var compositeLinkFn = compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority); + var compositeLinkFn = compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority, ignoreDirective); return function publicLinkFn(scope, cloneConnectFn){ assertArg(scope, 'scope'); // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart @@ -13714,10 +13992,6 @@ function $CompileProvider($provide) { }; } - function wrongMode(localName, mode) { - throw Error("Unsupported '" + mode + "' for '" + localName + "'."); - } - function safeAddClass($element, className) { try { $element.addClass(className); @@ -13742,7 +14016,7 @@ function $CompileProvider($provide) { * @param {number=} max directive priority * @returns {?function} A composite linking function of all of the matched directives or null. */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority) { + function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective) { var linkFns = [], nodeLinkFn, childLinkFn, directives, attrs, linkFnFound; @@ -13750,7 +14024,7 @@ function $CompileProvider($provide) { attrs = new Attributes(); // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, maxPriority); + directives = collectDirectives(nodeList[i], [], attrs, i == 0 ? maxPriority : undefined, ignoreDirective); nodeLinkFn = (directives.length) ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement) @@ -13799,7 +14073,7 @@ function $CompileProvider($provide) { transcludeScope.$$transcluded = true; return transcludeFn(transcludeScope, cloneFn). - bind('$destroy', bind(transcludeScope, transcludeScope.$destroy)); + on('$destroy', bind(transcludeScope, transcludeScope.$destroy)); }; })(childTranscludeFn || transcludeFn) ); @@ -13824,7 +14098,7 @@ function $CompileProvider($provide) { * @param attrs The shared attrs object which is used to populate the normalized attributes. * @param {number=} maxPriority Max directive priority. */ - function collectDirectives(node, directives, attrs, maxPriority) { + function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { var nodeType = node.nodeType, attrsMap = attrs.$attr, match, @@ -13834,19 +14108,28 @@ function $CompileProvider($provide) { case 1: /* Element */ // use the node name: addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority); + directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); // iterate over the attributes for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { + var attrStartName; + var attrEndName; + var index; + attr = nAttrs[j]; - if (attr.specified) { + if (!msie || msie >= 8 || attr.specified) { name = attr.name; // support ngAttr attribute binding ngAttrName = directiveNormalize(name); if (NG_ATTR_BINDING.test(ngAttrName)) { name = ngAttrName.substr(6).toLowerCase(); } + if ((index = ngAttrName.lastIndexOf('Start')) != -1 && index == ngAttrName.length - 5) { + attrStartName = name; + attrEndName = name.substr(0, name.length - 5) + 'end'; + name = name.substr(0, name.length - 6); + } nName = directiveNormalize(name.toLowerCase()); attrsMap[nName] = name; attrs[nName] = value = trim((msie && name == 'href') @@ -13856,7 +14139,7 @@ function $CompileProvider($provide) { attrs[nName] = true; // presence means true } addAttrInterpolateDirective(node, directives, value, nName); - addDirective(directives, nName, 'A', maxPriority); + addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, attrEndName); } } @@ -13865,7 +14148,7 @@ function $CompileProvider($provide) { if (isString(className) && className !== '') { while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority)) { + if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { attrs[nName] = trim(match[3]); } className = className.substr(match.index + match[0].length); @@ -13880,7 +14163,7 @@ function $CompileProvider($provide) { match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); if (match) { nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority)) { + if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { attrs[nName] = trim(match[2]); } } @@ -13895,11 +14178,54 @@ function $CompileProvider($provide) { return directives; } + /** + * Given a node with an directive-start it collects all of the siblings until it find directive-end. + * @param node + * @param attrStart + * @param attrEnd + * @returns {*} + */ + function groupScan(node, attrStart, attrEnd) { + var nodes = []; + var depth = 0; + if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { + var startNode = node; + do { + if (!node) { + throw $compileMinErr('uterdir', "Unterminated attribute, found '{0}' but no matching '{1}' found.", attrStart, attrEnd); + } + if (node.nodeType == 1 /** Element **/) { + if (node.hasAttribute(attrStart)) depth++; + if (node.hasAttribute(attrEnd)) depth--; + } + nodes.push(node); + node = node.nextSibling; + } while (depth > 0); + } else { + nodes.push(node); + } + return jqLite(nodes); + } /** - * Once the directives have been collected their compile functions is executed. This method + * Wrapper for linking function which converts normal linking function into a grouped + * linking function. + * @param linkFn + * @param attrStart + * @param attrEnd + * @returns {Function} + */ + function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { + return function(scope, element, attrs, controllers) { + element = groupScan(element[0], attrStart, attrEnd); + return linkFn(scope, element, attrs, controllers); + } + } + + /** + * Once the directives have been collected, their compile functions are executed. This method * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached.. + * of the directives if the terminal directive has been reached. * * @param {Array} directives Array of collected directives to execute their compile function. * this needs to be pre-sorted by priority order. @@ -13907,11 +14233,11 @@ function $CompileProvider($provide) { * @param {Object} templateAttrs The shared attribute function * @param {function(angular.Scope[, cloneAttachFn]} transcludeFn A linking function, where the * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement} $rootElement If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace widgets on it. + * @param {JQLite} jqCollection If we are working on the root of the compile tree then this + * argument has the root jqLite array so that we can replace nodes on it. * @returns linkFn */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, $rootElement) { + function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, jqCollection, originalReplaceDirective) { var terminalPriority = -Number.MAX_VALUE, preLinkFns = [], postLinkFns = [], @@ -13923,6 +14249,7 @@ function $CompileProvider($provide) { directiveName, $template, transcludeDirective, + replaceDirective = originalReplaceDirective, childTranscludeFn = transcludeFn, controllerDirectives, linkFn, @@ -13931,6 +14258,13 @@ function $CompileProvider($provide) { // executes all directives on the current element for(var i = 0, ii = directives.length; i < ii; i++) { directive = directives[i]; + var attrStart = directive.$$start; + var attrEnd = directive.$$end; + + // collect multiblock sections + if (attrStart) { + $compileNode = groupScan(compileNode, attrStart, attrEnd) + } $template = undefined; if (terminalPriority > directive.priority) { @@ -13961,12 +14295,14 @@ function $CompileProvider($provide) { transcludeDirective = directive; terminalPriority = directive.priority; if (directiveValue == 'element') { - $template = jqLite(compileNode); + $template = groupScan(compileNode, attrStart, attrEnd) $compileNode = templateAttrs.$$element = jqLite(document.createComment(' ' + directiveName + ': ' + templateAttrs[directiveName] + ' ')); compileNode = $compileNode[0]; - replaceWith($rootElement, jqLite($template[0]), compileNode); - childTranscludeFn = compile($template, transcludeFn, terminalPriority); + replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); + + childTranscludeFn = compile($template, transcludeFn, terminalPriority, + replaceDirective && replaceDirective.name); } else { $template = jqLite(JQLiteClone(compileNode)).contents(); $compileNode.html(''); // clear contents @@ -13985,16 +14321,17 @@ function $CompileProvider($provide) { directiveValue = denormalizeTemplate(directiveValue); if (directive.replace) { + replaceDirective = directive; $template = jqLite('
' + trim(directiveValue) + '
').contents(); compileNode = $template[0]; if ($template.length != 1 || compileNode.nodeType !== 1) { - throw new Error(MULTI_ROOT_TEMPLATE_ERROR + directiveValue); + throw $compileMinErr('tplrt', "Template for directive '{0}' must have exactly one root element. {1}", directiveName, ''); } - replaceWith($rootElement, $compileNode, compileNode); + replaceWith(jqCollection, $compileNode, compileNode); var newTemplateAttrs = {$attr: {}}; @@ -14021,17 +14358,20 @@ function $CompileProvider($provide) { if (directive.templateUrl) { assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; + + if (directive.replace) { + replaceDirective = directive; + } nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), - nodeLinkFn, $compileNode, templateAttrs, $rootElement, directive.replace, - childTranscludeFn); + nodeLinkFn, $compileNode, templateAttrs, jqCollection, childTranscludeFn); ii = directives.length; } else if (directive.compile) { try { linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); if (isFunction(linkFn)) { - addLinkFns(null, linkFn); + addLinkFns(null, linkFn, attrStart, attrEnd); } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post); + addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); } } catch (e) { $exceptionHandler(e, startingTag($compileNode)); @@ -14053,12 +14393,14 @@ function $CompileProvider($provide) { //////////////////// - function addLinkFns(pre, post) { + function addLinkFns(pre, post, attrStart, attrEnd) { if (pre) { + if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); pre.require = directive.require; preLinkFns.push(pre); } if (post) { + if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); post.require = directive.require; postLinkFns.push(post); } @@ -14077,7 +14419,7 @@ function $CompileProvider($provide) { } value = $element[retrievalMethod]('$' + require + 'Controller'); if (!value && !optional) { - throw Error("No controller: " + require); + throw $compileMinErr('ctreq', "Controller '{0}', required by directive '{1}', can't be found!", require, directiveName); } return value; } else if (isArray(require)) { @@ -14105,8 +14447,8 @@ function $CompileProvider($provide) { var parentScope = scope.$parent || scope; - forEach(newIsolateScopeDirective.scope, function(definiton, scopeName) { - var match = definiton.match(LOCAL_REGEXP) || [], + forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { + var match = definition.match(LOCAL_REGEXP) || [], attrName = match[3] || scopeName, optional = (match[2] == '?'), mode = match[1], // @, =, or & @@ -14137,8 +14479,8 @@ function $CompileProvider($provide) { parentSet = parentGet.assign || function() { // reset the change, or we will throw this exception on every $digest lastValue = scope[scopeName] = parentGet(parentScope); - throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + attrs[attrName] + - ' (directive: ' + newIsolateScopeDirective.name + ')'); + throw $compileMinErr('nonassign', "Expression '{0}' used with directive '{1}' is non-assignable!", + attrs[attrName], newIsolateScopeDirective.name); }; lastValue = scope[scopeName] = parentGet(parentScope); scope.$watch(function parentValueWatch() { @@ -14163,13 +14505,13 @@ function $CompileProvider($provide) { parentGet = $parse(attrs[attrName]); scope[scopeName] = function(locals) { return parentGet(parentScope, locals); - } + }; break; } default: { - throw Error('Invalid isolate scope definition for directive ' + - newIsolateScopeDirective.name + ': ' + definiton); + throw $compileMinErr('iscp', "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", + newIsolateScopeDirective.name, scopeName, definition); } } }); @@ -14182,16 +14524,20 @@ function $CompileProvider($provide) { $element: $element, $attrs: attrs, $transclude: boundTranscludeFn - }; + }, controllerInstance; controller = directive.controller; if (controller == '@') { controller = attrs[directive.name]; } + controllerInstance = $controller(controller, locals); $element.data( '$' + directive.name + 'Controller', - $controller(controller, locals)); + controllerInstance); + if (directive.controllerAs) { + locals.$scope[directive.controllerAs] = controllerInstance; + } }); } @@ -14237,8 +14583,9 @@ function $CompileProvider($provide) { * * `M`: comment * @returns true if directive was added. */ - function addDirective(tDirectives, name, location, maxPriority) { - var match = false; + function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, endAttrName) { + if (name === ignoreDirective) return null; + var match = null; if (hasDirectives.hasOwnProperty(name)) { for(var directive, directives = $injector.get(name + Suffix), i = 0, ii = directives.length; i directive.priority) && directive.restrict.indexOf(location) != -1) { + if (startAttrName) { + directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); + } tDirectives.push(directive); - match = true; + match = directive; } } catch(e) { $exceptionHandler(e); } } @@ -14295,7 +14645,7 @@ function $CompileProvider($provide) { function compileTemplateUrl(directives, beforeTemplateNodeLinkFn, $compileNode, tAttrs, - $rootElement, replace, childTranscludeFn) { + $rootElement, childTranscludeFn) { var linkQueue = [], afterTemplateNodeLinkFn, afterTemplateChildLinkFn, @@ -14303,7 +14653,7 @@ function $CompileProvider($provide) { origAsyncDirective = directives.shift(), // The fact that we have to copy and patch the directive seems wrong! derivedSyncDirective = extend({}, origAsyncDirective, { - controller: null, templateUrl: null, transclude: null, scope: null + controller: null, templateUrl: null, transclude: null, scope: null, replace: null }), templateUrl = (isFunction(origAsyncDirective.templateUrl)) ? origAsyncDirective.templateUrl($compileNode, tAttrs) @@ -14311,18 +14661,19 @@ function $CompileProvider($provide) { $compileNode.html(''); - $http.get(templateUrl, {cache: $templateCache}). + $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). success(function(content) { var compileNode, tempTemplateAttrs, $template; content = denormalizeTemplate(content); - if (replace) { + if (origAsyncDirective.replace) { $template = jqLite('
' + trim(content) + '
').contents(); compileNode = $template[0]; if ($template.length != 1 || compileNode.nodeType !== 1) { - throw new Error(MULTI_ROOT_TEMPLATE_ERROR + content); + throw $compileMinErr('tplrt', "Template for directive '{0}' must have exactly one root element. {1}", + origAsyncDirective.name, templateUrl); } tempTemplateAttrs = {$attr: {}}; @@ -14335,7 +14686,13 @@ function $CompileProvider($provide) { } directives.unshift(derivedSyncDirective); - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn); + + afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn, $compileNode, origAsyncDirective); + forEach($rootElement, function(node, i) { + if (node == compileNode) { + $rootElement[i] = $compileNode[0]; + } + }); afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); @@ -14344,7 +14701,7 @@ function $CompileProvider($provide) { beforeTemplateLinkNode = linkQueue.shift(), linkRootElement = linkQueue.shift(), controller = linkQueue.shift(), - linkNode = compileNode; + linkNode = $compileNode[0]; if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { // it was cloned therefore we have to clone as well. @@ -14352,14 +14709,15 @@ function $CompileProvider($provide) { replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); } - afterTemplateNodeLinkFn(function() { - beforeTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, controller); - }, scope, linkNode, $rootElement, controller); + afterTemplateNodeLinkFn( + beforeTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, controller), + scope, linkNode, $rootElement, controller + ); } linkQueue = null; }). error(function(response, code, headers, config) { - throw Error('Failed to load template: ' + config.url); + throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); }); return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, controller) { @@ -14387,8 +14745,8 @@ function $CompileProvider($provide) { function assertNoDuplicate(what, previousDirective, directive, element) { if (previousDirective) { - throw Error('Multiple directives [' + previousDirective.name + ', ' + - directive.name + '] asking for ' + what + ' on: ' + startingTag(element)); + throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', + previousDirective.name, directive.name, what, startingTag(element)); } } @@ -14412,6 +14770,16 @@ function $CompileProvider($provide) { } + function getTrustedContext(node, attrNormalizedName) { + // maction[xlink:href] can source SVG. It's not limited to . + if (attrNormalizedName == "xlinkHref" || + (nodeName_(node) != "IMG" && (attrNormalizedName == "src" || + attrNormalizedName == "ngSrc"))) { + return $sce.RESOURCE_URL; + } + } + + function addAttrInterpolateDirective(node, directives, value, name) { var interpolateFn = $interpolate(value, true); @@ -14419,14 +14787,25 @@ function $CompileProvider($provide) { if (!interpolateFn) return; + if (name === "multiple" && nodeName_(node) === "SELECT") { + throw $compileMinErr("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", + startingTag(node)); + } + directives.push({ priority: 100, compile: valueFn(function attrInterpolateLinkFn(scope, element, attr) { var $$observers = (attr.$$observers || (attr.$$observers = {})); + if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { + throw $compileMinErr('nodomevents', + "Interpolations for HTML DOM event attributes are disallowed. Please use the ng- " + + "versions (such as ng-click instead of onclick) instead."); + } + // we need to interpolate again, in case the attribute value has been updated // (e.g. by another directive's compile function) - interpolateFn = $interpolate(attr[name], true); + interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); // if attribute was updated so that there is no interpolation going on we don't want to // register any observers @@ -14449,30 +14828,50 @@ function $CompileProvider($provide) { * * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes * in the root of the tree. - * @param {JqLite} $element The jqLite element which we are going to replace. We keep the shell, + * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep the shell, * but replace its DOM node reference. * @param {Node} newNode The new DOM node. */ - function replaceWith($rootElement, $element, newNode) { - var oldNode = $element[0], - parent = oldNode.parentNode, + function replaceWith($rootElement, elementsToRemove, newNode) { + var firstElementToRemove = elementsToRemove[0], + removeCount = elementsToRemove.length, + parent = firstElementToRemove.parentNode, i, ii; if ($rootElement) { for(i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == oldNode) { - $rootElement[i] = newNode; + if ($rootElement[i] == firstElementToRemove) { + $rootElement[i++] = newNode; + for (var j = i, j2 = j + removeCount - 1, + jj = $rootElement.length; + j < jj; j++, j2++) { + if (j2 < jj) { + $rootElement[j] = $rootElement[j2]; + } else { + delete $rootElement[j]; + } + } + $rootElement.length -= removeCount - 1; break; } } } if (parent) { - parent.replaceChild(newNode, oldNode); + parent.replaceChild(newNode, firstElementToRemove); + } + var fragment = document.createDocumentFragment(); + fragment.appendChild(firstElementToRemove); + newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; + for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { + var element = elementsToRemove[k]; + jqLite(element).remove(); // must do this way to clean up expando + fragment.appendChild(element); + delete elementsToRemove[k]; } - newNode[jqLite.expando] = oldNode[jqLite.expando]; - $element[0] = newNode; + elementsToRemove[0] = newNode; + elementsToRemove.length = 1 } }]; } @@ -14481,7 +14880,7 @@ var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; /** * Converts all accepted directives format into proper directive name. * All of these will become 'myDirective': - * my:DiRective + * my:Directive * my-directive * x-my-directive * data-my:directive @@ -14562,7 +14961,8 @@ function directiveLinkingFn( * {@link ng.$controllerProvider#register register} method. */ function $ControllerProvider() { - var controllers = {}; + var controllers = {}, + CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; /** @@ -14607,17 +15007,31 @@ function $ControllerProvider() { * a service, so that one can override this service with {@link https://gist.github.com/1649788 * BC version}. */ - return function(constructor, locals) { - if(isString(constructor)) { - var name = constructor; - constructor = controllers.hasOwnProperty(name) - ? controllers[name] - : getter(locals.$scope, name, true) || getter($window, name, true); + return function(expression, locals) { + var instance, match, constructor, identifier; - assertArgFn(constructor, name, true); + if(isString(expression)) { + match = expression.match(CNTRL_REG), + constructor = match[1], + identifier = match[3]; + expression = controllers.hasOwnProperty(constructor) + ? controllers[constructor] + : getter(locals.$scope, constructor, true) || getter($window, constructor, true); + + assertArgFn(expression, constructor, true); } - return $injector.instantiate(constructor, locals); + instance = $injector.instantiate(expression, locals); + + if (identifier) { + if (!(locals && typeof locals.$scope == 'object')) { + throw minErr('$controller')('noscp', "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", constructor || expression.name, identifier); + } + + locals.$scope[identifier] = instance; + } + + return instance; }; }]; } @@ -14656,13 +15070,1166 @@ function $DocumentProvider(){ * */ function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log){ + this.$get = ['$log', function($log) { return function(exception, cause) { $log.error.apply($log, arguments); }; }]; } +/** + * Parse headers into key value object + * + * @param {string} headers Raw headers as a string + * @returns {Object} Parsed headers as key value object + */ +function parseHeaders(headers) { + var parsed = {}, key, val, i; + + if (!headers) return parsed; + + forEach(headers.split('\n'), function(line) { + i = line.indexOf(':'); + key = lowercase(trim(line.substr(0, i))); + val = trim(line.substr(i + 1)); + + if (key) { + if (parsed[key]) { + parsed[key] += ', ' + val; + } else { + parsed[key] = val; + } + } + }); + + return parsed; +} + + +/** + * Returns a function that provides access to parsed headers. + * + * Headers are lazy parsed when first requested. + * @see parseHeaders + * + * @param {(string|Object)} headers Headers to provide access to. + * @returns {function(string=)} Returns a getter function which if called with: + * + * - if called with single an argument returns a single header value or null + * - if called with no arguments returns an object containing all headers. + */ +function headersGetter(headers) { + var headersObj = isObject(headers) ? headers : undefined; + + return function(name) { + if (!headersObj) headersObj = parseHeaders(headers); + + if (name) { + return headersObj[lowercase(name)] || null; + } + + return headersObj; + }; +} + + +/** + * Chain all given functions + * + * This function is used for both request and response transforming + * + * @param {*} data Data to transform. + * @param {function(string=)} headers Http headers getter fn. + * @param {(function|Array.)} fns Function or an array of functions. + * @returns {*} Transformed data. + */ +function transformData(data, headers, fns) { + if (isFunction(fns)) + return fns(data, headers); + + forEach(fns, function(fn) { + data = fn(data, headers); + }); + + return data; +} + + +function isSuccess(status) { + return 200 <= status && status < 300; +} + + +function $HttpProvider() { + var JSON_START = /^\s*(\[|\{[^\{])/, + JSON_END = /[\}\]]\s*$/, + PROTECTION_PREFIX = /^\)\]\}',?\n/, + CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; + + var defaults = this.defaults = { + // transform incoming response data + transformResponse: [function(data) { + if (isString(data)) { + // strip json vulnerability protection prefix + data = data.replace(PROTECTION_PREFIX, ''); + if (JSON_START.test(data) && JSON_END.test(data)) + data = fromJson(data, true); + } + return data; + }], + + // transform outgoing request data + transformRequest: [function(d) { + return isObject(d) && !isFile(d) ? toJson(d) : d; + }], + + // default headers + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + }, + post: CONTENT_TYPE_APPLICATION_JSON, + put: CONTENT_TYPE_APPLICATION_JSON, + patch: CONTENT_TYPE_APPLICATION_JSON + }, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN' + }; + + /** + * Are order by request. I.E. they are applied in the same order as + * array on request, but revers order on response. + */ + var interceptorFactories = this.interceptors = []; + /** + * For historical reasons, response interceptors ordered by the order in which + * they are applied to response. (This is in revers to interceptorFactories) + */ + var responseInterceptorFactories = this.responseInterceptors = []; + + this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', '$$urlUtils', + function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector, $$urlUtils) { + + var defaultCache = $cacheFactory('$http'); + + /** + * Interceptors stored in reverse order. Inner interceptors before outer interceptors. + * The reversal is needed so that we can build up the interception chain around the + * server request. + */ + var reversedInterceptors = []; + + forEach(interceptorFactories, function(interceptorFactory) { + reversedInterceptors.unshift(isString(interceptorFactory) + ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); + }); + + forEach(responseInterceptorFactories, function(interceptorFactory, index) { + var responseFn = isString(interceptorFactory) + ? $injector.get(interceptorFactory) + : $injector.invoke(interceptorFactory); + + /** + * Response interceptors go before "around" interceptors (no real reason, just + * had to pick one.) But they are already reversed, so we can't use unshift, hence + * the splice. + */ + reversedInterceptors.splice(index, 0, { + response: function(response) { + return responseFn($q.when(response)); + }, + responseError: function(response) { + return responseFn($q.reject(response)); + } + }); + }); + + + /** + * @ngdoc function + * @name ng.$http + * @requires $httpBackend + * @requires $browser + * @requires $cacheFactory + * @requires $rootScope + * @requires $q + * @requires $injector + * + * @description + * The `$http` service is a core Angular service that facilitates communication with the remote + * HTTP servers via the browser's {@link https://developer.mozilla.org/en/xmlhttprequest + * XMLHttpRequest} object or via {@link http://en.wikipedia.org/wiki/JSONP JSONP}. + * + * For unit testing applications that use `$http` service, see + * {@link ngMock.$httpBackend $httpBackend mock}. + * + * For a higher level of abstraction, please check out the {@link ngResource.$resource + * $resource} service. + * + * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by + * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage + * it is important to familiarize yourself with these APIs and the guarantees they provide. + * + * + * # General usage + * The `$http` service is a function which takes a single argument — a configuration object — + * that is used to generate an HTTP request and returns a {@link ng.$q promise} + * with two $http specific methods: `success` and `error`. + * + *
+     *   $http({method: 'GET', url: '/someUrl'}).
+     *     success(function(data, status, headers, config) {
+     *       // this callback will be called asynchronously
+     *       // when the response is available
+     *     }).
+     *     error(function(data, status, headers, config) {
+     *       // called asynchronously if an error occurs
+     *       // or server returns response with an error status.
+     *     });
+     * 
+ * + * Since the returned value of calling the $http function is a `promise`, you can also use + * the `then` method to register callbacks, and these callbacks will receive a single argument – + * an object representing the response. See the API signature and type info below for more + * details. + * + * A response status code between 200 and 299 is considered a success status and + * will result in the success callback being called. Note that if the response is a redirect, + * XMLHttpRequest will transparently follow it, meaning that the error callback will not be + * called for such responses. + * + * # Shortcut methods + * + * Since all invocations of the $http service require passing in an HTTP method and URL, and + * POST/PUT requests require request data to be provided as well, shortcut methods + * were created: + * + *
+     *   $http.get('/someUrl').success(successCallback);
+     *   $http.post('/someUrl', data).success(successCallback);
+     * 
+ * + * Complete list of shortcut methods: + * + * - {@link ng.$http#get $http.get} + * - {@link ng.$http#head $http.head} + * - {@link ng.$http#post $http.post} + * - {@link ng.$http#put $http.put} + * - {@link ng.$http#delete $http.delete} + * - {@link ng.$http#jsonp $http.jsonp} + * + * + * # Setting HTTP Headers + * + * The $http service will automatically add certain HTTP headers to all requests. These defaults + * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration + * object, which currently contains this default configuration: + * + * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): + * - `Accept: application/json, text/plain, * / *` + * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) + * - `Content-Type: application/json` + * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) + * - `Content-Type: application/json` + * + * To add or overwrite these defaults, simply add or remove a property from these configuration + * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object + * with the lowercased HTTP method name as the key, e.g. + * `$httpProvider.defaults.headers.get['My-Header']='value'`. + * + * Additionally, the defaults can be set at runtime via the `$http.defaults` object in the same + * fashion. + * + * + * # Transforming Requests and Responses + * + * Both requests and responses can be transformed using transform functions. By default, Angular + * applies these transformations: + * + * Request transformations: + * + * - If the `data` property of the request configuration object contains an object, serialize it into + * JSON format. + * + * Response transformations: + * + * - If XSRF prefix is detected, strip it (see Security Considerations section below). + * - If JSON response is detected, deserialize it using a JSON parser. + * + * To globally augment or override the default transforms, modify the `$httpProvider.defaults.transformRequest` and + * `$httpProvider.defaults.transformResponse` properties. These properties are by default an + * array of transform functions, which allows you to `push` or `unshift` a new transformation function into the + * transformation chain. You can also decide to completely override any default transformations by assigning your + * transformation functions to these properties directly without the array wrapper. + * + * Similarly, to locally override the request/response transforms, augment the `transformRequest` and/or + * `transformResponse` properties of the configuration object passed into `$http`. + * + * + * # Caching + * + * To enable caching, set the configuration property `cache` to `true`. When the cache is + * enabled, `$http` stores the response from the server in local cache. Next time the + * response is served from the cache without sending a request to the server. + * + * Note that even if the response is served from cache, delivery of the data is asynchronous in + * the same way that real requests are. + * + * If there are multiple GET requests for the same URL that should be cached using the same + * cache, but the cache is not populated yet, only one request to the server will be made and + * the remaining requests will be fulfilled using the response from the first request. + * + * A custom default cache built with $cacheFactory can be provided in $http.defaults.cache. + * To skip it, set configuration property `cache` to `false`. + * + * + * # Interceptors + * + * Before you start creating interceptors, be sure to understand the + * {@link ng.$q $q and deferred/promise APIs}. + * + * For purposes of global error handling, authentication, or any kind of synchronous or + * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be + * able to intercept requests before they are handed to the server and + * responses before they are handed over to the application code that + * initiated these requests. The interceptors leverage the {@link ng.$q + * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. + * + * The interceptors are service factories that are registered with the `$httpProvider` by + * adding them to the `$httpProvider.interceptors` array. The factory is called and + * injected with dependencies (if specified) and returns the interceptor. + * + * There are two kinds of interceptors (and two kinds of rejection interceptors): + * + * * `request`: interceptors get called with http `config` object. The function is free to modify + * the `config` or create a new one. The function needs to return the `config` directly or as a + * promise. + * * `requestError`: interceptor gets called when a previous interceptor threw an error or resolved + * with a rejection. + * * `response`: interceptors get called with http `response` object. The function is free to modify + * the `response` or create a new one. The function needs to return the `response` directly or as a + * promise. + * * `responseError`: interceptor gets called when a previous interceptor threw an error or resolved + * with a rejection. + * + * + *
+     *   // register the interceptor as a service
+     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+     *     return {
+     *       // optional method
+     *       'request': function(config) {
+     *         // do something on success
+     *         return config || $q.when(config);
+     *       },
+     *
+     *       // optional method
+     *      'requestError': function(rejection) {
+     *         // do something on error
+     *         if (canRecover(rejection)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(rejection);
+     *       },
+     *
+     *
+     *
+     *       // optional method
+     *       'response': function(response) {
+     *         // do something on success
+     *         return response || $q.when(response);
+     *       },
+     *
+     *       // optional method
+     *      'responseError': function(rejection) {
+     *         // do something on error
+     *         if (canRecover(rejection)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(rejection);
+     *       };
+     *     }
+     *   });
+     *
+     *   $httpProvider.interceptors.push('myHttpInterceptor');
+     *
+     *
+     *   // register the interceptor via an anonymous factory
+     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
+     *     return {
+     *      'request': function(config) {
+     *          // same as above
+     *       },
+     *       'response': function(response) {
+     *          // same as above
+     *       }
+     *   });
+     * 
+ * + * # Response interceptors (DEPRECATED) + * + * Before you start creating interceptors, be sure to understand the + * {@link ng.$q $q and deferred/promise APIs}. + * + * For purposes of global error handling, authentication or any kind of synchronous or + * asynchronous preprocessing of received responses, it is desirable to be able to intercept + * responses for http requests before they are handed over to the application code that + * initiated these requests. The response interceptors leverage the {@link ng.$q + * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. + * + * The interceptors are service factories that are registered with the $httpProvider by + * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and + * injected with dependencies (if specified) and returns the interceptor — a function that + * takes a {@link ng.$q promise} and returns the original or a new promise. + * + *
+     *   // register the interceptor as a service
+     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+     *     return function(promise) {
+     *       return promise.then(function(response) {
+     *         // do something on success
+     *       }, function(response) {
+     *         // do something on error
+     *         if (canRecover(response)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(response);
+     *       });
+     *     }
+     *   });
+     *
+     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');
+     *
+     *
+     *   // register the interceptor via an anonymous factory
+     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {
+     *     return function(promise) {
+     *       // same as above
+     *     }
+     *   });
+     * 
+ * + * + * # Security Considerations + * + * When designing web applications, consider security threats from: + * + * - {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx + * JSON vulnerability} + * - {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} + * + * Both server and the client must cooperate in order to eliminate these threats. Angular comes + * pre-configured with strategies that address these issues, but for this to work backend server + * cooperation is required. + * + * ## JSON Vulnerability Protection + * + * A {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx + * JSON vulnerability} allows third party website to turn your JSON resource URL into + * {@link http://en.wikipedia.org/wiki/JSONP JSONP} request under some conditions. To + * counter this your server can prefix all JSON requests with following string `")]}',\n"`. + * Angular will automatically strip the prefix before processing it as JSON. + * + * For example if your server needs to return: + *
+     * ['one','two']
+     * 
+ * + * which is vulnerable to attack, your server can return: + *
+     * )]}',
+     * ['one','two']
+     * 
+ * + * Angular will strip the prefix, before processing the JSON. + * + * + * ## Cross Site Request Forgery (XSRF) Protection + * + * {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} is a technique by which + * an unauthorized site can gain your user's private data. Angular provides a mechanism + * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie + * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only + * JavaScript that runs on your domain could read the cookie, your server can be assured that + * the XHR came from JavaScript running on your domain. The header will not be set for + * cross-domain requests. + * + * To take advantage of this, your server needs to set a token in a JavaScript readable session + * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the + * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure + * that only JavaScript running on your domain could have sent the request. The token must be + * unique for each user and must be verifiable by the server (to prevent the JavaScript from making + * up its own tokens). We recommend that the token is a digest of your site's authentication + * cookie with a {@link https://en.wikipedia.org/wiki/Salt_(cryptography) salt} for added security. + * + * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName + * properties of either $httpProvider.defaults, or the per-request config object. + * + * + * @param {object} config Object describing the request to be made and how it should be + * processed. The object has following properties: + * + * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) + * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. + * - **params** – `{Object.}` – Map of strings or objects which will be turned to + * `?key1=value1&key2=value2` after the url. If the value is not a string, it will be JSONified. + * - **data** – `{string|Object}` – Data to be sent as the request message data. + * - **headers** – `{Object}` – Map of strings or functions which return strings representing + * HTTP headers to send to the server. If the return value of a function is null, the header will + * not be sent. + * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. + * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. + * - **transformRequest** – `{function(data, headersGetter)|Array.}` – + * transform function or an array of such functions. The transform function takes the http + * request body and headers and returns its transformed (typically serialized) version. + * - **transformResponse** – `{function(data, headersGetter)|Array.}` – + * transform function or an array of such functions. The transform function takes the http + * response body and headers and returns its transformed (typically deserialized) version. + * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the + * GET request, otherwise if a cache instance built with + * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for + * caching. + * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} + * that should abort the request when resolved. + * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the + * XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5 + * requests with credentials} for more information. + * - **responseType** - `{string}` - see {@link + * https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}. + * + * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the + * standard `then` method and two http specific methods: `success` and `error`. The `then` + * method takes two arguments a success and an error callback which will be called with a + * response object. The `success` and `error` methods take a single argument - a function that + * will be called when the request succeeds or fails respectively. The arguments passed into + * these functions are destructured representation of the response object passed into the + * `then` method. The response object has these properties: + * + * - **data** – `{string|Object}` – The response body transformed with the transform functions. + * - **status** – `{number}` – HTTP status code of the response. + * - **headers** – `{function([headerName])}` – Header getter function. + * - **config** – `{Object}` – The configuration object that was used to generate the request. + * + * @property {Array.} pendingRequests Array of config objects for currently pending + * requests. This is primarily meant to be used for debugging purposes. + * + * + * @example + + +
+ + +
+ + + +
http status code: {{status}}
+
http response data: {{data}}
+
+
+ + function FetchCtrl($scope, $http, $templateCache) { + $scope.method = 'GET'; + $scope.url = 'http-hello.html'; + + $scope.fetch = function() { + $scope.code = null; + $scope.response = null; + + $http({method: $scope.method, url: $scope.url, cache: $templateCache}). + success(function(data, status) { + $scope.status = status; + $scope.data = data; + }). + error(function(data, status) { + $scope.data = data || "Request failed"; + $scope.status = status; + }); + }; + + $scope.updateModel = function(method, url) { + $scope.method = method; + $scope.url = url; + }; + } + + + Hello, $http! + + + it('should make an xhr GET request', function() { + element(':button:contains("Sample GET")').click(); + element(':button:contains("fetch")').click(); + expect(binding('status')).toBe('200'); + expect(binding('data')).toMatch(/Hello, \$http!/); + }); + + it('should make a JSONP request to angularjs.org', function() { + element(':button:contains("Sample JSONP")').click(); + element(':button:contains("fetch")').click(); + expect(binding('status')).toBe('200'); + expect(binding('data')).toMatch(/Super Hero!/); + }); + + it('should make JSONP request to invalid URL and invoke the error handler', + function() { + element(':button:contains("Invalid JSONP")').click(); + element(':button:contains("fetch")').click(); + expect(binding('status')).toBe('0'); + expect(binding('data')).toBe('Request failed'); + }); + +
+ */ + function $http(requestConfig) { + var config = { + transformRequest: defaults.transformRequest, + transformResponse: defaults.transformResponse + }; + var headers = mergeHeaders(requestConfig); + + extend(config, requestConfig); + config.headers = headers; + config.method = uppercase(config.method); + + var xsrfValue = $$urlUtils.isSameOrigin(config.url) + ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] + : undefined; + if (xsrfValue) { + headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; + } + + + var serverRequest = function(config) { + headers = config.headers; + var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); + + // strip content-type if data is undefined + if (isUndefined(config.data)) { + forEach(headers, function(value, header) { + if (lowercase(header) === 'content-type') { + delete headers[header]; + } + }); + } + + if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { + config.withCredentials = defaults.withCredentials; + } + + // send request + return sendReq(config, reqData, headers).then(transformResponse, transformResponse); + }; + + var chain = [serverRequest, undefined]; + var promise = $q.when(config); + + // apply interceptors + forEach(reversedInterceptors, function(interceptor) { + if (interceptor.request || interceptor.requestError) { + chain.unshift(interceptor.request, interceptor.requestError); + } + if (interceptor.response || interceptor.responseError) { + chain.push(interceptor.response, interceptor.responseError); + } + }); + + while(chain.length) { + var thenFn = chain.shift(); + var rejectFn = chain.shift(); + + promise = promise.then(thenFn, rejectFn); + } + + promise.success = function(fn) { + promise.then(function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + + promise.error = function(fn) { + promise.then(null, function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + + return promise; + + function transformResponse(response) { + // make a copy since the response must be cacheable + var resp = extend({}, response, { + data: transformData(response.data, response.headers, config.transformResponse) + }); + return (isSuccess(response.status)) + ? resp + : $q.reject(resp); + } + + function mergeHeaders(config) { + var defHeaders = defaults.headers, + reqHeaders = extend({}, config.headers), + defHeaderName, lowercaseDefHeaderName, reqHeaderName; + + defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); + + // execute if header value is function + execHeaders(defHeaders); + execHeaders(reqHeaders); + + // using for-in instead of forEach to avoid unecessary iteration after header has been found + defaultHeadersIteration: + for (defHeaderName in defHeaders) { + lowercaseDefHeaderName = lowercase(defHeaderName); + + for (reqHeaderName in reqHeaders) { + if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { + continue defaultHeadersIteration; + } + } + + reqHeaders[defHeaderName] = defHeaders[defHeaderName]; + } + + return reqHeaders; + + function execHeaders(headers) { + var headerContent; + + forEach(headers, function(headerFn, header) { + if (isFunction(headerFn)) { + headerContent = headerFn(); + if (headerContent != null) { + headers[header] = headerContent; + } else { + delete headers[header]; + } + } + }); + } + } + } + + $http.pendingRequests = []; + + /** + * @ngdoc method + * @name ng.$http#get + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `GET` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#delete + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `DELETE` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#head + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `HEAD` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#jsonp + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `JSONP` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request. + * Should contain `JSON_CALLBACK` string. + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + createShortMethods('get', 'delete', 'head', 'jsonp'); + + /** + * @ngdoc method + * @name ng.$http#post + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `POST` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#put + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `PUT` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + createShortMethodsWithData('post', 'put'); + + /** + * @ngdoc property + * @name ng.$http#defaults + * @propertyOf ng.$http + * + * @description + * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of + * default headers, withCredentials as well as request and response transformations. + * + * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. + */ + $http.defaults = defaults; + + + return $http; + + + function createShortMethods(names) { + forEach(arguments, function(name) { + $http[name] = function(url, config) { + return $http(extend(config || {}, { + method: name, + url: url + })); + }; + }); + } + + + function createShortMethodsWithData(name) { + forEach(arguments, function(name) { + $http[name] = function(url, data, config) { + return $http(extend(config || {}, { + method: name, + url: url, + data: data + })); + }; + }); + } + + + /** + * Makes the request. + * + * !!! ACCESSES CLOSURE VARS: + * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests + */ + function sendReq(config, reqData, reqHeaders) { + var deferred = $q.defer(), + promise = deferred.promise, + cache, + cachedResp, + url = buildUrl(config.url, config.params); + + $http.pendingRequests.push(config); + promise.then(removePendingReq, removePendingReq); + + + if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') { + cache = isObject(config.cache) ? config.cache + : isObject(defaults.cache) ? defaults.cache + : defaultCache; + } + + if (cache) { + cachedResp = cache.get(url); + if (cachedResp) { + if (cachedResp.then) { + // cached request has already been sent, but there is no response yet + cachedResp.then(removePendingReq, removePendingReq); + return cachedResp; + } else { + // serving from cache + if (isArray(cachedResp)) { + resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2])); + } else { + resolvePromise(cachedResp, 200, {}); + } + } + } else { + // put the promise for the non-transformed response into cache as a placeholder + cache.put(url, promise); + } + } + + // if we won't have the response in cache, send the request to the backend + if (!cachedResp) { + $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, + config.withCredentials, config.responseType); + } + + return promise; + + + /** + * Callback registered to $httpBackend(): + * - caches the response if desired + * - resolves the raw $http promise + * - calls $apply + */ + function done(status, response, headersString) { + if (cache) { + if (isSuccess(status)) { + cache.put(url, [status, response, parseHeaders(headersString)]); + } else { + // remove promise from the cache + cache.remove(url); + } + } + + resolvePromise(response, status, headersString); + if (!$rootScope.$$phase) $rootScope.$apply(); + } + + + /** + * Resolves the raw $http promise. + */ + function resolvePromise(response, status, headers) { + // normalize internal statuses to 0 + status = Math.max(status, 0); + + (isSuccess(status) ? deferred.resolve : deferred.reject)({ + data: response, + status: status, + headers: headersGetter(headers), + config: config + }); + } + + + function removePendingReq() { + var idx = indexOf($http.pendingRequests, config); + if (idx !== -1) $http.pendingRequests.splice(idx, 1); + } + } + + + function buildUrl(url, params) { + if (!params) return url; + var parts = []; + forEachSorted(params, function(value, key) { + if (value == null || value == undefined) return; + if (!isArray(value)) value = [value]; + + forEach(value, function(v) { + if (isObject(v)) { + v = toJson(v); + } + parts.push(encodeUriQuery(key) + '=' + + encodeUriQuery(v)); + }); + }); + return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); + } + + + }]; +} + +var XHR = window.XMLHttpRequest || function() { + try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} + try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} + try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} + throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); +}; + + +/** + * @ngdoc object + * @name ng.$httpBackend + * @requires $browser + * @requires $window + * @requires $document + * + * @description + * HTTP backend used by the {@link ng.$http service} that delegates to + * XMLHttpRequest object or JSONP and deals with browser incompatibilities. + * + * You should never need to use this service directly, instead use the higher-level abstractions: + * {@link ng.$http $http} or {@link ngResource.$resource $resource}. + * + * During testing this implementation is swapped with {@link ngMock.$httpBackend mock + * $httpBackend} which can be trained with responses. + */ +function $HttpBackendProvider() { + this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { + return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, + $document[0], $window.location.protocol.replace(':', '')); + }]; +} + +function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) { + // TODO(vojta): fix the signature + return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { + var status; + $browser.$$incOutstandingRequestCount(); + url = url || $browser.url(); + + if (lowercase(method) == 'jsonp') { + var callbackId = '_' + (callbacks.counter++).toString(36); + callbacks[callbackId] = function(data) { + callbacks[callbackId].data = data; + }; + + var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), + function() { + if (callbacks[callbackId].data) { + completeRequest(callback, 200, callbacks[callbackId].data); + } else { + completeRequest(callback, status || -2); + } + delete callbacks[callbackId]; + }); + } else { + var xhr = new XHR(); + xhr.open(method, url, true); + forEach(headers, function(value, key) { + if (value) xhr.setRequestHeader(key, value); + }); + + // In IE6 and 7, this might be called synchronously when xhr.send below is called and the + // response is in the cache. the promise api will ensure that to the app code the api is + // always async + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + var responseHeaders = xhr.getAllResponseHeaders(); + + // TODO(vojta): remove once Firefox 21 gets released. + // begin: workaround to overcome Firefox CORS http response headers bug + // https://bugzilla.mozilla.org/show_bug.cgi?id=608735 + // Firefox already patched in nightly. Should land in Firefox 21. + + // CORS "simple response headers" http://www.w3.org/TR/cors/ + var value, + simpleHeaders = ["Cache-Control", "Content-Language", "Content-Type", + "Expires", "Last-Modified", "Pragma"]; + if (!responseHeaders) { + responseHeaders = ""; + forEach(simpleHeaders, function (header) { + var value = xhr.getResponseHeader(header); + if (value) { + responseHeaders += header + ": " + value + "\n"; + } + }); + } + // end of the workaround. + + // responseText is the old-school way of retrieving response (supported by IE8 & 9) + // response and responseType properties were introduced in XHR Level2 spec (supported by IE10) + completeRequest(callback, + status || xhr.status, + (xhr.responseType ? xhr.response : xhr.responseText), + responseHeaders); + } + }; + + if (withCredentials) { + xhr.withCredentials = true; + } + + if (responseType) { + xhr.responseType = responseType; + } + + xhr.send(post || ''); + } + + if (timeout > 0) { + var timeoutId = $browserDefer(timeoutRequest, timeout); + } else if (timeout && timeout.then) { + timeout.then(timeoutRequest); + } + + + function timeoutRequest() { + status = -1; + jsonpDone && jsonpDone(); + xhr && xhr.abort(); + } + + function completeRequest(callback, status, response, headersString) { + // URL_MATCH is defined in src/service/location.js + var protocol = (url.match(SERVER_MATCH) || ['', locationProtocol])[1]; + + // cancel timeout and subsequent timeout promise resolution + timeoutId && $browserDefer.cancel(timeoutId); + jsonpDone = xhr = null; + + // fix status code for file protocol (it's always 0) + status = (protocol == 'file') ? (response ? 200 : 404) : status; + + // normalize IE bug (http://bugs.jquery.com/ticket/1450) + status = status == 1223 ? 204 : status; + + callback(status, response, headersString); + $browser.$$completeOutstandingRequest(noop); + } + }; + + function jsonpReq(url, done) { + // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: + // - fetches local scripts via XHR and evals them + // - adds and immediately removes script elements from the document + var script = rawDocument.createElement('script'), + doneWrapper = function() { + rawDocument.body.removeChild(script); + if (done) done(); + }; + + script.type = 'text/javascript'; + script.src = url; + + if (msie) { + script.onreadystatechange = function() { + if (/loaded|complete/.test(script.readyState)) doneWrapper(); + }; + } else { + script.onload = script.onerror = doneWrapper; + } + + rawDocument.body.appendChild(script); + return doneWrapper; + } +} + +var $interpolateMinErr = minErr('$interpolate'); + /** * @ngdoc object * @name ng.$interpolateProvider @@ -14671,6 +16238,24 @@ function $ExceptionHandlerProvider() { * @description * * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. + * + * @example + + + +
+ //label// +
+
+
*/ function $InterpolateProvider() { var startSymbol = '{{'; @@ -14715,7 +16300,7 @@ function $InterpolateProvider() { }; - this.$get = ['$parse', '$exceptionHandler', function($parse, $exceptionHandler) { + this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { var startSymbolLength = startSymbol.length, endSymbolLength = endSymbol.length; @@ -14725,6 +16310,7 @@ function $InterpolateProvider() { * @function * * @requires $parse + * @requires $sce * * @description * @@ -14745,6 +16331,10 @@ function $InterpolateProvider() { * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have * embedded expression in order to return an interpolation function. Strings with no * embedded expression will return null for the interpolation function. + * @param {string=} trustedContext when provided, the returned function passes the interpolated + * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, + * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that + * provides Strict Contextual Escaping for details. * @returns {function(context)} an interpolation function which is used to compute the interpolated * string. The function has these parameters: * @@ -14752,7 +16342,7 @@ function $InterpolateProvider() { * against. * */ - function $interpolate(text, mustHaveExpression) { + function $interpolate(text, mustHaveExpression, trustedContext) { var startIndex, endIndex, index = 0, @@ -14784,6 +16374,19 @@ function $InterpolateProvider() { length = 1; } + // Concatenating expressions makes it hard to reason about whether some combination of concatenated + // values are unsafe to use and could easily lead to XSS. By requiring that a single + // expression be used for iframe[src], object[src], etc., we ensure that the value that's used + // is assigned or constructed by some JS code somewhere that is more testable or make it + // obvious that you bound the value to some user controlled value. This helps reduce the load + // when auditing for XSS issues. + if (trustedContext && parts.length > 1) { + throw $interpolateMinErr('noconcat', + "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + + "interpolations that concatenate multiple expressions when a trusted value is " + + "required. See http://docs.angularjs.org/api/ng.$sce", text); + } + if (!mustHaveExpression || hasInterpolation) { concat.length = length; fn = function(context) { @@ -14791,6 +16394,11 @@ function $InterpolateProvider() { for(var i = 0, ii = length, part; i html5 url - } else { - return composeProtocolHostPort(match.protocol, match.host, match.port) + - pathPrefixFromBase(basePath) + match.hash.substr(hashPrefix.length); - } +function stripHash(url) { + var index = url.indexOf('#'); + return index == -1 ? url : url.substr(0, index); } -function convertToHashbangUrl(url, basePath, hashPrefix) { - var match = matchUrl(url); +function stripFile(url) { + return url.substr(0, stripHash(url).lastIndexOf('/') + 1); +} - // already hashbang url - if (decodeURIComponent(match.path) == basePath && !isUndefined(match.hash) && - match.hash.indexOf(hashPrefix) === 0) { - return url; - // convert html5 url -> hashbang url - } else { - var search = match.search && '?' + match.search || '', - hash = match.hash && '#' + match.hash || '', - pathPrefix = pathPrefixFromBase(basePath), - path = match.path.substr(pathPrefix.length); - - if (match.path.indexOf(pathPrefix) !== 0) { - throw Error('Invalid url "' + url + '", missing path prefix "' + pathPrefix + '" !'); - } - - return composeProtocolHostPort(match.protocol, match.host, match.port) + basePath + - '#' + hashPrefix + path + search + hash; - } +/* return the server only (scheme://host:port) */ +function serverBase(url) { + return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); } /** - * LocationUrl represents an url + * LocationHtml5Url represents an url * This object is exposed as $location service when HTML5 mode is enabled and supported * * @constructor - * @param {string} url HTML5 url - * @param {string} pathPrefix + * @param {string} appBase application base URL + * @param {string} basePrefix url path prefix */ -function LocationUrl(url, pathPrefix, appBaseUrl) { - pathPrefix = pathPrefix || ''; - +function LocationHtml5Url(appBase, basePrefix) { + this.$$html5 = true; + basePrefix = basePrefix || ''; + var appBaseNoFile = stripFile(appBase); /** * Parse given html5 (regular) url string into properties * @param {string} newAbsoluteUrl HTML5 url * @private */ - this.$$parse = function(newAbsoluteUrl) { - var match = matchUrl(newAbsoluteUrl, this); - - if (match.path.indexOf(pathPrefix) !== 0) { - throw Error('Invalid url "' + newAbsoluteUrl + '", missing path prefix "' + pathPrefix + '" !'); + this.$$parse = function(url) { + var parsed = {} + matchUrl(url, parsed); + var pathUrl = beginsWith(appBaseNoFile, url); + if (!isString(pathUrl)) { + throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, appBaseNoFile); + } + matchAppUrl(pathUrl, parsed); + extend(this, parsed); + if (!this.$$path) { + this.$$path = '/'; } - - this.$$path = decodeURIComponent(match.path.substr(pathPrefix.length)); - this.$$search = parseKeyValue(match.search); - this.$$hash = match.hash && decodeURIComponent(match.hash) || ''; this.$$compose(); }; @@ -14988,32 +16646,42 @@ function LocationUrl(url, pathPrefix, appBaseUrl) { hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = composeProtocolHostPort(this.$$protocol, this.$$host, this.$$port) + - pathPrefix + this.$$url; + this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' }; + this.$$rewrite = function(url) { + var appUrl, prevAppUrl; - this.$$rewriteAppUrl = function(absoluteLinkUrl) { - if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) { - return absoluteLinkUrl; + if ( (appUrl = beginsWith(appBase, url)) !== undefined ) { + prevAppUrl = appUrl; + if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) { + return appBaseNoFile + (beginsWith('/', appUrl) || appUrl); + } else { + return appBase + prevAppUrl; + } + } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) { + return appBaseNoFile + appUrl; + } else if (appBaseNoFile == url + '/') { + return appBaseNoFile; } } - - - this.$$parse(url); } /** * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is disabled or not supported + * This object is exposed as $location service when developer doesn't opt into html5 mode. + * It also serves as the base class for html5 mode fallback on legacy browsers. * * @constructor - * @param {string} url Legacy url - * @param {string} hashPrefix Prefix for hash part (containing path and search) + * @param {string} appBase application base URL + * @param {string} hashPrefix hashbang prefix */ -function LocationHashbangUrl(url, hashPrefix, appBaseUrl) { - var basePath; +function LocationHashbangUrl(appBase, hashPrefix) { + var appBaseNoFile = stripFile(appBase); + + matchUrl(appBase, this); + /** * Parse given hashbang url into properties @@ -15021,24 +16689,17 @@ function LocationHashbangUrl(url, hashPrefix, appBaseUrl) { * @private */ this.$$parse = function(url) { - var match = matchUrl(url, this); + var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); + var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' + ? beginsWith(hashPrefix, withoutBaseUrl) + : (this.$$html5) + ? withoutBaseUrl + : ''; - - if (match.hash && match.hash.indexOf(hashPrefix) !== 0) { - throw Error('Invalid url "' + url + '", missing hash prefix "' + hashPrefix + '" !'); + if (!isString(withoutHashUrl)) { + throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url, hashPrefix); } - - basePath = match.path + (match.search ? '?' + match.search : ''); - match = HASH_MATCH.exec((match.hash || '').substr(hashPrefix.length)); - if (match[1]) { - this.$$path = (match[1].charAt(0) == '/' ? '' : '/') + decodeURIComponent(match[1]); - } else { - this.$$path = ''; - } - - this.$$search = parseKeyValue(match[3]); - this.$$hash = match[5] && decodeURIComponent(match[5]) || ''; - + matchAppUrl(withoutHashUrl, this); this.$$compose(); }; @@ -15051,22 +16712,55 @@ function LocationHashbangUrl(url, hashPrefix, appBaseUrl) { hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = composeProtocolHostPort(this.$$protocol, this.$$host, this.$$port) + - basePath + (this.$$url ? '#' + hashPrefix + this.$$url : ''); + this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); }; - this.$$rewriteAppUrl = function(absoluteLinkUrl) { - if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) { - return absoluteLinkUrl; + this.$$rewrite = function(url) { + if(stripHash(appBase) == stripHash(url)) { + return url; } } - - - this.$$parse(url); } -LocationUrl.prototype = { +/** + * LocationHashbangUrl represents url + * This object is exposed as $location service when html5 history api is enabled but the browser + * does not support it. + * + * @constructor + * @param {string} appBase application base URL + * @param {string} hashPrefix hashbang prefix + */ +function LocationHashbangInHtml5Url(appBase, hashPrefix) { + this.$$html5 = true; + LocationHashbangUrl.apply(this, arguments); + + var appBaseNoFile = stripFile(appBase); + + this.$$rewrite = function(url) { + var appUrl; + + if ( appBase == stripHash(url) ) { + return url; + } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) { + return appBase + hashPrefix + appUrl; + } else if ( appBaseNoFile === url + '/') { + return appBaseNoFile; + } + } +} + + +LocationHashbangInHtml5Url.prototype = + LocationHashbangUrl.prototype = + LocationHtml5Url.prototype = { + + /** + * Are we in html5 mode? + * @private + */ + $$html5: false, /** * Has any change been replacing ? @@ -15102,6 +16796,7 @@ LocationUrl.prototype = { * Change path, search and hash, when called with parameter and return `$location`. * * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) + * @param {string=} replace The path that will be changed * @return {string} url */ url: function(url, replace) { @@ -15192,24 +16887,32 @@ LocationUrl.prototype = { * * Change search part when called with parameter and return `$location`. * - * @param {string|object=} search New search params - string or hash object + * @param {string|Object.|Object.>} search New search params - string or hash object. Hash object + * may contain an array of values, which will be decoded as duplicates in the url. * @param {string=} paramValue If `search` is a string, then `paramValue` will override only a * single search parameter. If the value is `null`, the parameter will be deleted. * * @return {string} search */ search: function(search, paramValue) { - if (isUndefined(search)) - return this.$$search; - - if (isDefined(paramValue)) { - if (paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } else { - this.$$search = isString(search) ? parseKeyValue(search) : search; + switch (arguments.length) { + case 0: + return this.$$search; + case 1: + if (isString(search)) { + this.$$search = parseKeyValue(search); + } else if (isObject(search)) { + this.$$search = search; + } else { + throw $locationMinErr('isrcharg', 'The first argument of the `$location#search()` call must be a string or an object.'); + } + break; + default: + if (paramValue == undefined || paramValue == null) { + delete this.$$search[search]; + } else { + this.$$search[search] = paramValue; + } } this.$$compose(); @@ -15248,21 +16951,6 @@ LocationUrl.prototype = { } }; -LocationHashbangUrl.prototype = inherit(LocationUrl.prototype); - -function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExtra) { - LocationHashbangUrl.apply(this, arguments); - - - this.$$rewriteAppUrl = function(absoluteLinkUrl) { - if (absoluteLinkUrl.indexOf(appBaseUrl) == 0) { - return appBaseUrl + baseExtra + '#' + hashPrefix + absoluteLinkUrl.substr(appBaseUrl.length); - } - } -} - -LocationHashbangInHtml5Url.prototype = inherit(LocationHashbangUrl.prototype); - function locationGetter(property) { return function() { return this[property]; @@ -15359,39 +17047,22 @@ function $LocationProvider(){ this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', function( $rootScope, $browser, $sniffer, $rootElement) { var $location, - basePath, - pathPrefix, - initUrl = $browser.url(), - initUrlParts = matchUrl(initUrl), - appBaseUrl; + LocationMode, + baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' + initialUrl = $browser.url(), + appBase; if (html5Mode) { - basePath = $browser.baseHref() || '/'; - pathPrefix = pathPrefixFromBase(basePath); - appBaseUrl = - composeProtocolHostPort(initUrlParts.protocol, initUrlParts.host, initUrlParts.port) + - pathPrefix + '/'; - - if ($sniffer.history) { - $location = new LocationUrl( - convertToHtml5Url(initUrl, basePath, hashPrefix), - pathPrefix, appBaseUrl); - } else { - $location = new LocationHashbangInHtml5Url( - convertToHashbangUrl(initUrl, basePath, hashPrefix), - hashPrefix, appBaseUrl, basePath.substr(pathPrefix.length + 1)); - } + appBase = serverBase(initialUrl) + (baseHref || '/'); + LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; } else { - appBaseUrl = - composeProtocolHostPort(initUrlParts.protocol, initUrlParts.host, initUrlParts.port) + - (initUrlParts.path || '') + - (initUrlParts.search ? ('?' + initUrlParts.search) : '') + - '#' + hashPrefix + '/'; - - $location = new LocationHashbangUrl(initUrl, hashPrefix, appBaseUrl); + appBase = stripHash(initialUrl); + LocationMode = LocationHashbangUrl; } + $location = new LocationMode(appBase, '#' + hashPrefix); + $location.$$parse($location.$$rewrite(initialUrl)); - $rootElement.bind('click', function(event) { + $rootElement.on('click', function(event) { // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) // currently we open nice url link and redirect then @@ -15405,28 +17076,34 @@ function $LocationProvider(){ if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; } - var absHref = elm.prop('href'), - rewrittenUrl = $location.$$rewriteAppUrl(absHref); + var absHref = elm.prop('href'); + var rewrittenUrl = $location.$$rewrite(absHref); - if (absHref && !elm.attr('target') && rewrittenUrl) { - // update location manually - $location.$$parse(rewrittenUrl); - $rootScope.$apply(); + if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) { event.preventDefault(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - window.angular['ff-684208-preventDefault'] = true; + if (rewrittenUrl != $browser.url()) { + // update location manually + $location.$$parse(rewrittenUrl); + $rootScope.$apply(); + // hack to work around FF6 bug 684208 when scenario runner clicks on links + window.angular['ff-684208-preventDefault'] = true; + } } }); // rewrite hashbang url <> html5 url - if ($location.absUrl() != initUrl) { + if ($location.absUrl() != initialUrl) { $browser.url($location.absUrl(), true); } // update $location when $browser url changes $browser.onUrlChange(function(newUrl) { if ($location.absUrl() != newUrl) { + if ($rootScope.$broadcast('$locationChangeStart', newUrl, $location.absUrl()).defaultPrevented) { + $browser.url($location.absUrl()); + return; + } $rootScope.$evalAsync(function() { var oldUrl = $location.absUrl(); @@ -15540,16 +17217,6 @@ function $LogProvider(){ */ log: consoleLog('log'), - /** - * @ngdoc method - * @name ng.$log#warn - * @methodOf ng.$log - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - /** * @ngdoc method * @name ng.$log#info @@ -15560,6 +17227,16 @@ function $LogProvider(){ */ info: consoleLog('info'), + /** + * @ngdoc method + * @name ng.$log#warn + * @methodOf ng.$log + * + * @description + * Write a warning message + */ + warn: consoleLog('warn'), + /** * @ngdoc method * @name ng.$log#error @@ -15625,6 +17302,55 @@ function $LogProvider(){ }]; } +var $parseMinErr = minErr('$parse'); + +// Sandboxing Angular Expressions +// ------------------------------ +// Angular expressions are generally considered safe because these expressions only have direct access to $scope and +// locals. However, one can obtain the ability to execute arbitrary JS code by obtaining a reference to native JS +// functions such as the Function constructor. +// +// As an example, consider the following Angular expression: +// +// {}.toString.constructor(alert("evil JS code")) +// +// We want to prevent this type of access. For the sake of performance, during the lexing phase we disallow any "dotted" +// access to any member named "constructor". +// +// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor while evaluating +// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor while evaluating +// the expression, which is a stronger but more expensive test. Since reflective calls are expensive anyway, this is not +// such a big deal compared to static dereferencing. +// +// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits against the +// expression language, but not to prevent exploits that were enabled by exposing sensitive JavaScript or browser apis +// on Scope. Exposing such objects on a Scope is never a good practice and therefore we are not even trying to protect +// against interaction with an object explicitly exposed in this way. +// +// A developer could foil the name check by aliasing the Function constructor under a different name on the scope. +// +// In general, it is not possible to access a Window object from an angular expression unless a window or some DOM +// object that has a reference to window is published onto a Scope. + +function ensureSafeMemberName(name, fullExpression) { + if (name === "constructor") { + throw $parseMinErr('isecfld', + 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', fullExpression); + } + return name; +}; + +function ensureSafeObject(obj, fullExpression) { + // nifty check if obj is Function that is fast and works across iframes and other contexts + if (obj && obj.constructor === obj) { + throw $parseMinErr('isecfn', + 'Referencing Function in Angular expressions is disallowed! Expression: {0}', fullExpression); + } else { + return obj; + } +} + + var OPERATORS = { 'null':function(){return null;}, 'true':function(){return true;}, @@ -15683,7 +17409,7 @@ function lex(text, csp){ (token=tokens[tokens.length-1])) { token.json = token.text.indexOf('.') == -1; } - } else if (is('(){}[].,;:')) { + } else if (is('(){}[].,;:?')) { tokens.push({ index:index, text:ch, @@ -15748,11 +17474,11 @@ function lex(text, csp){ function throwError(error, start, end) { end = end || index; - throw Error("Lexer Error: " + error + " at column" + - (isDefined(start) - ? "s " + start + "-" + index + " [" + text.substring(start, end) + "]" - : " " + end) + - " in expression [" + text + "]."); + var colStr = (isDefined(start) ? + "s " + start + "-" + index + " [" + text.substring(start, end) + "]" + : " " + end); + throw $parseMinErr('lexerr', "Lexer Error: {0} at column{1} in expression [{2}].", + error, colStr, text); } function readNumber() { @@ -15787,10 +17513,10 @@ function lex(text, csp){ function readIdent() { var ident = "", start = index, - lastDot, peekIndex, methodName; + lastDot, peekIndex, methodName, ch; while (index < text.length) { - var ch = text.charAt(index); + ch = text.charAt(index); if (ch == '.' || isIdent(ch) || isNumber(ch)) { if (ch == '.') lastDot = index; ident += ch; @@ -15804,7 +17530,7 @@ function lex(text, csp){ if (lastDot) { peekIndex = index; while(peekIndex < text.length) { - var ch = text.charAt(peekIndex); + ch = text.charAt(peekIndex); if (ch == '(') { methodName = ident.substr(lastDot - start + 1); ident = ident.substr(0, lastDot - start); @@ -15828,12 +17554,12 @@ function lex(text, csp){ if (OPERATORS.hasOwnProperty(ident)) { token.fn = token.json = OPERATORS[ident]; } else { - var getter = getterFn(ident, csp); + var getter = getterFn(ident, csp, text); token.fn = extend(function(self, locals) { return (getter(self, locals)); }, { assign: function(self, value) { - return setter(self, ident, value); + return setter(self, ident, value, text); } }); } @@ -15934,15 +17660,14 @@ function parser(text, json, $filter, csp){ /////////////////////////////////// function throwError(msg, token) { - throw Error("Syntax Error: Token '" + token.text + - "' " + msg + " at column " + - (token.index + 1) + " of the expression [" + - text + "] starting at [" + text.substring(token.index) + "]."); + throw $parseMinErr('syntax', + "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", + token.text, msg, (token.index + 1), text, text.substring(token.index)); } function peekToken() { if (tokens.length === 0) - throw Error("Unexpected end of expression: " + text); + throw $parseMinErr('ueoe', "Unexpected end of expression: {0}", text); return tokens[0]; } @@ -15984,6 +17709,14 @@ function parser(text, json, $filter, csp){ }); } + function ternaryFn(left, middle, right){ + return extend(function(self, locals){ + return left(self, locals) ? middle(self, locals) : right(self, locals); + }, { + constant: left.constant && middle.constant && right.constant + }); + } + function binaryFn(left, fn, right) { return extend(function(self, locals) { return fn(self, locals, left, right); @@ -16054,7 +17787,7 @@ function parser(text, json, $filter, csp){ } function _assignment() { - var left = logicalOR(); + var left = ternary(); var right; var token; if ((token = expect('='))) { @@ -16062,15 +17795,33 @@ function parser(text, json, $filter, csp){ throwError("implies assignment but [" + text.substring(0, token.index) + "] can not be assigned to", token); } - right = logicalOR(); - return function(self, locals){ - return left.assign(self, right(self, locals), locals); + right = ternary(); + return function(scope, locals){ + return left.assign(scope, right(scope, locals), locals); }; } else { return left; } } + function ternary() { + var left = logicalOR(); + var middle; + var token; + if((token = expect('?'))){ + middle = ternary(); + if((token = expect(':'))){ + return ternaryFn(left, middle, ternary()); + } + else { + throwError('expected :', token); + } + } + else { + return left; + } + } + function logicalOR() { var left = logicalAND(); var token; @@ -16182,14 +17933,14 @@ function parser(text, json, $filter, csp){ function _fieldAccess(object) { var field = expect().text; - var getter = getterFn(field, csp); + var getter = getterFn(field, csp, text); return extend( - function(self, locals) { - return getter(object(self, locals), locals); + function(scope, locals, self) { + return getter(self || object(scope, locals), locals); }, { - assign:function(self, value, locals) { - return setter(object(self, locals), field, value); + assign:function(scope, value, locals) { + return setter(object(scope, locals), field, value, text); } } ); @@ -16205,7 +17956,7 @@ function parser(text, json, $filter, csp){ v, p; if (!o) return undefined; - v = o[i]; + v = ensureSafeObject(o[i], text); if (v && v.then) { p = v; if (!('$$v' in v)) { @@ -16217,7 +17968,9 @@ function parser(text, json, $filter, csp){ return v; }, { assign:function(self, value, locals){ - return obj(self, locals)[indexFn(self, locals)] = value; + var key = indexFn(self, locals); + // prevent overwriting of Function.constructor which would break ensureSafeObject check + return ensureSafeObject(obj(self, locals), text)[key] = value; } }); } @@ -16230,14 +17983,14 @@ function parser(text, json, $filter, csp){ } while (expect(',')); } consume(')'); - return function(self, locals){ + return function(scope, locals){ var args = [], - context = contextGetter ? contextGetter(self, locals) : self; + context = contextGetter ? contextGetter(scope, locals) : scope; for ( var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](self, locals)); + args.push(argsFn[i](scope, locals)); } - var fnPtr = fn(self, locals) || noop; + var fnPtr = fn(scope, locals, context) || noop; // IE stupidity! return fnPtr.apply ? fnPtr.apply(context, args) @@ -16291,8 +18044,7 @@ function parser(text, json, $filter, csp){ var object = {}; for ( var i = 0; i < keyValues.length; i++) { var keyValue = keyValues[i]; - var value = keyValue.value(self, locals); - object[keyValue.key] = value; + object[keyValue.key] = keyValue.value(self, locals); } return object; }, { @@ -16306,46 +18058,31 @@ function parser(text, json, $filter, csp){ // Parser helper functions ////////////////////////////////////////////////// -function setter(obj, path, setValue) { - var element = path.split('.'); +function setter(obj, path, setValue, fullExp) { + var element = path.split('.'), key; for (var i = 0; element.length > 1; i++) { - var key = element.shift(); + key = ensureSafeMemberName(element.shift(), fullExp); var propertyObj = obj[key]; if (!propertyObj) { propertyObj = {}; obj[key] = propertyObj; } obj = propertyObj; - } - obj[element.shift()] = setValue; - return setValue; -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {string} path path to traverse - * @param {boolean=true} bindFnToScope - * @returns value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; + if (obj.then) { + if (!("$$v" in obj)) { + (function(promise) { + promise.then(function(val) { promise.$$v = val; }); } + )(obj); + } + if (obj.$$v === undefined) { + obj.$$v = {}; + } + obj = obj.$$v; } } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; + key = ensureSafeMemberName(element.shift(), fullExp); + obj[key] = setValue; + return setValue; } var getterFnCache = {}; @@ -16355,7 +18092,12 @@ var getterFnCache = {}; * - http://jsperf.com/angularjs-parse-getter/4 * - http://jsperf.com/path-evaluation-simplified/7 */ -function cspSafeGetterFn(key0, key1, key2, key3, key4) { +function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp) { + ensureSafeMemberName(key0, fullExp); + ensureSafeMemberName(key1, fullExp); + ensureSafeMemberName(key2, fullExp); + ensureSafeMemberName(key3, fullExp); + ensureSafeMemberName(key4, fullExp); return function(scope, locals) { var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, promise; @@ -16417,9 +18159,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4) { } return pathVal; }; -}; +} -function getterFn(path, csp) { +function getterFn(path, csp, fullExp) { if (getterFnCache.hasOwnProperty(path)) { return getterFnCache[path]; } @@ -16430,12 +18172,12 @@ function getterFn(path, csp) { if (csp) { fn = (pathKeysLength < 6) - ? cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4]) + ? cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp) : function(scope, locals) { - var i = 0, val + var i = 0, val; do { val = cspSafeGetterFn( - pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++] + pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], fullExp )(scope, locals); locals = undefined; // clear after first iteration @@ -16446,6 +18188,7 @@ function getterFn(path, csp) { } else { var code = 'var l, fn, p;\n'; forEach(pathKeys, function(key, index) { + ensureSafeMemberName(key, fullExp); code += 'if(s === null || s === undefined) return s;\n' + 'l=s;\n' + 's='+ (index @@ -16614,16 +18357,27 @@ function $ParseProvider() { * **Methods** * * - `then(successCallback, errorCallback)` – regardless of when the promise was or will be resolved - * or rejected calls one of the success or error callbacks asynchronously as soon as the result - * is available. The callbacks are called with a single argument the result or rejection reason. + * or rejected, `then` calls one of the success or error callbacks asynchronously as soon as the result + * is available. The callbacks are called with a single argument: the result or rejection reason. * * This method *returns a new promise* which is resolved or rejected via the return value of the * `successCallback` or `errorCallback`. * + * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` + * + * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise, + * but to do so without modifying the final value. This is useful to release resources or do some + * clean-up that needs to be done whether the promise was rejected or resolved. See the [full + * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for + * more information. + * + * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as + * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to + * make your code IE8 compatible. * * # Chaining promises * - * Because calling `then` api of a promise returns a new derived promise, it is easily possible + * Because calling the `then` method of a promise returns a new derived promise, it is easily possible * to create a chain of promises: * *
@@ -16631,13 +18385,13 @@ function $ParseProvider() {
  *     return result + 1;
  *   });
  *
- *   // promiseB will be resolved immediately after promiseA is resolved and its value will be
- *   // the result of promiseA incremented by 1
+ *   // promiseB will be resolved immediately after promiseA is resolved and its value
+ *   // will be the result of promiseA incremented by 1
  * 
* * It is possible to create chains of any length and since a promise can be resolved with another * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful apis like + * the promises at any point in the chain. This makes it possible to implement powerful APIs like * $http's response interceptors. * * @@ -16650,27 +18404,27 @@ function $ParseProvider() { * models and avoiding unnecessary browser repaints, which would result in flickering UI. * - $q promises are recognized by the templating engine in angular, which means that in templates * you can treat promises attached to a scope as if they were the resulting values. - * - Q has many more features that $q, but that comes at a cost of bytes. $q is tiny, but contains + * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains * all the important functionality needed for common async tasks. - * + * * # Testing - * + * *
  *    it('should simulate promise', inject(function($q, $rootScope) {
  *      var deferred = $q.defer();
  *      var promise = deferred.promise;
  *      var resolvedValue;
- * 
+ *
  *      promise.then(function(value) { resolvedValue = value; });
  *      expect(resolvedValue).toBeUndefined();
- * 
+ *
  *      // Simulate resolving of promise
  *      deferred.resolve(123);
  *      // Note that the 'then' function does not get called synchronously.
  *      // This is because we want the promise API to always be async, whether or not
  *      // it got called synchronously or asynchronously.
  *      expect(resolvedValue).toBeUndefined();
- * 
+ *
  *      // Propagate promise resolution to 'then' functions using $apply().
  *      $rootScope.$apply();
  *      expect(resolvedValue).toEqual(123);
@@ -16723,7 +18477,7 @@ function qFactory(nextTick, exceptionHandler) {
               var callback;
               for (var i = 0, ii = callbacks.length; i < ii; i++) {
                 callback = callbacks[i];
-                value.then(callback[0], callback[1]);
+                value.then(callback[0], callback[1], callback[2]);
               }
             });
           }
@@ -16736,16 +18490,33 @@ function qFactory(nextTick, exceptionHandler) {
       },
 
 
+      notify: function(progress) {
+        if (pending) {
+          var callbacks = pending;
+
+          if (pending.length) {
+            nextTick(function() {
+              var callback;
+              for (var i = 0, ii = callbacks.length; i < ii; i++) {
+                callback = callbacks[i];
+                callback[2](progress);
+              }
+            });
+          }
+        }
+      },
+
+
       promise: {
-        then: function(callback, errback) {
+        then: function(callback, errback, progressback) {
           var result = defer();
 
           var wrappedCallback = function(value) {
             try {
               result.resolve((callback || defaultCallback)(value));
             } catch(e) {
-              exceptionHandler(e);
               result.reject(e);
+              exceptionHandler(e);
             }
           };
 
@@ -16753,18 +18524,67 @@ function qFactory(nextTick, exceptionHandler) {
             try {
               result.resolve((errback || defaultErrback)(reason));
             } catch(e) {
-              exceptionHandler(e);
               result.reject(e);
+              exceptionHandler(e);
+            }
+          };
+
+          var wrappedProgressback = function(progress) {
+            try {
+              result.notify((progressback || defaultCallback)(progress));
+            } catch(e) {
+              exceptionHandler(e);
             }
           };
 
           if (pending) {
-            pending.push([wrappedCallback, wrappedErrback]);
+            pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);
           } else {
-            value.then(wrappedCallback, wrappedErrback);
+            value.then(wrappedCallback, wrappedErrback, wrappedProgressback);
           }
 
           return result.promise;
+        },
+
+        "catch": function(callback) {
+          return this.then(null, callback);
+        },
+
+        "finally": function(callback) {
+
+          function makePromise(value, resolved) {
+            var result = defer();
+            if (resolved) {
+              result.resolve(value);
+            } else {
+              result.reject(value);
+            }
+            return result.promise;
+          }
+
+          function handleCallback(value, isResolved) {
+            var callbackOutput = null;
+            try {
+              callbackOutput = (callback ||defaultCallback)();
+            } catch(e) {
+              return makePromise(e, false);
+            }
+            if (callbackOutput && callbackOutput.then) {
+              return callbackOutput.then(function() {
+                return makePromise(value, isResolved);
+              }, function(error) {
+                return makePromise(error, false);
+              });
+            } else {
+              return makePromise(value, isResolved);
+            }
+          }
+
+          return this.then(function(value) {
+            return handleCallback(value, true);
+          }, function(error) {
+            return handleCallback(error, false);
+          });
         }
       }
     };
@@ -16845,12 +18665,9 @@ function qFactory(nextTick, exceptionHandler) {
    * the promise comes from a source that can't be trusted.
    *
    * @param {*} value Value or a promise
-   * @returns {Promise} Returns a single promise that will be resolved with an array of values,
-   *   each value corresponding to the promise at the same index in the `promises` array. If any of
-   *   the promises is resolved with a rejection, this resulting promise will be resolved with the
-   *   same rejection.
+   * @returns {Promise} Returns a promise of the passed value or promise
    */
-  var when = function(value, callback, errback) {
+  var when = function(value, callback, errback, progressback) {
     var result = defer(),
         done;
 
@@ -16872,15 +18689,26 @@ function qFactory(nextTick, exceptionHandler) {
       }
     };
 
+    var wrappedProgressback = function(progress) {
+      try {
+        return (progressback || defaultCallback)(progress);
+      } catch (e) {
+        exceptionHandler(e);
+      }
+    };
+
     nextTick(function() {
       ref(value).then(function(value) {
         if (done) return;
         done = true;
-        result.resolve(ref(value).then(wrappedCallback, wrappedErrback));
+        result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback));
       }, function(reason) {
         if (done) return;
         done = true;
         result.resolve(wrappedErrback(reason));
+      }, function(progress) {
+        if (done) return;
+        result.notify(wrappedProgressback(progress));
       });
     });
 
@@ -16944,559 +18772,25 @@ function qFactory(nextTick, exceptionHandler) {
   };
 }
 
-/**
- * @ngdoc object
- * @name ng.$routeProvider
- * @function
- *
- * @description
- *
- * Used for configuring routes. See {@link ng.$route $route} for an example.
- */
-function $RouteProvider(){
-  var routes = {};
-
-  /**
-   * @ngdoc method
-   * @name ng.$routeProvider#when
-   * @methodOf ng.$routeProvider
-   *
-   * @param {string} path Route path (matched against `$location.path`). If `$location.path`
-   *    contains redundant trailing slash or is missing one, the route will still match and the
-   *    `$location.path` will be updated to add or drop the trailing slash to exactly match the
-   *    route definition.
-   *
-   *      * `path` can contain named groups starting with a colon (`:name`). All characters up
-   *        to the next slash are matched and stored in `$routeParams` under the given `name`
-   *        when the route matches.
-   *      * `path` can contain named groups starting with a star (`*name`). All characters are
-   *        eagerly stored in `$routeParams` under the given `name` when the route matches.
-   *
-   *    For example, routes like `/color/:color/largecode/*largecode/edit` will match
-   *    `/color/brown/largecode/code/with/slashs/edit` and extract:
-   *
-   *      * `color: brown`
-   *      * `largecode: code/with/slashs`.
-   *
-   *
-   * @param {Object} route Mapping information to be assigned to `$route.current` on route
-   *    match.
-   *
-   *    Object properties:
-   *
-   *    - `controller` – `{(string|function()=}` – Controller fn that should be associated with newly
-   *      created scope or the name of a {@link angular.Module#controller registered controller}
-   *      if passed as a string.
-   *    - `template` – `{string=|function()=}` – html template as a string or function that returns
-   *      an html template as a string which should be used by {@link ng.directive:ngView ngView} or
-   *      {@link ng.directive:ngInclude ngInclude} directives.
-   *      This property takes precedence over `templateUrl`.
-   *
-   *      If `template` is a function, it will be called with the following parameters:
-   *
-   *      - `{Array.}` - route parameters extracted from the current
-   *        `$location.path()` by applying the current route
-   *
-   *    - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html
-   *      template that should be used by {@link ng.directive:ngView ngView}.
-   *
-   *      If `templateUrl` is a function, it will be called with the following parameters:
-   *
-   *      - `{Array.}` - route parameters extracted from the current
-   *        `$location.path()` by applying the current route
-   *
-   *    - `resolve` - `{Object.=}` - An optional map of dependencies which should
-   *      be injected into the controller. If any of these dependencies are promises, they will be
-   *      resolved and converted to a value before the controller is instantiated and the
-   *      `$routeChangeSuccess` event is fired. The map object is:
-   *
-   *      - `key` – `{string}`: a name of a dependency to be injected into the controller.
-   *      - `factory` - `{string|function}`: If `string` then it is an alias for a service.
-   *        Otherwise if function, then it is {@link api/AUTO.$injector#invoke injected}
-   *        and the return value is treated as the dependency. If the result is a promise, it is resolved
-   *        before its value is injected into the controller.
-   *
-   *    - `redirectTo` – {(string|function())=} – value to update
-   *      {@link ng.$location $location} path with and trigger route redirection.
-   *
-   *      If `redirectTo` is a function, it will be called with the following parameters:
-   *
-   *      - `{Object.}` - route parameters extracted from the current
-   *        `$location.path()` by applying the current route templateUrl.
-   *      - `{string}` - current `$location.path()`
-   *      - `{Object}` - current `$location.search()`
-   *
-   *      The custom `redirectTo` function is expected to return a string which will be used
-   *      to update `$location.path()` and `$location.search()`.
-   *
-   *    - `[reloadOnSearch=true]` - {boolean=} - reload route when only $location.search()
-   *    changes.
-   *
-   *      If the option is set to `false` and url in the browser changes, then
-   *      `$routeUpdate` event is broadcasted on the root scope.
-   *
-   *    - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive
-   *
-   *      If the option is set to `true`, then the particular route can be matched without being
-   *      case sensitive
-   *
-   * @returns {Object} self
-   *
-   * @description
-   * Adds a new route definition to the `$route` service.
-   */
-  this.when = function(path, route) {
-    routes[path] = extend({reloadOnSearch: true, caseInsensitiveMatch: false}, route);
-
-    // create redirection for trailing slashes
-    if (path) {
-      var redirectPath = (path[path.length-1] == '/')
-          ? path.substr(0, path.length-1)
-          : path +'/';
-
-      routes[redirectPath] = {redirectTo: path};
-    }
-
-    return this;
-  };
-
-  /**
-   * @ngdoc method
-   * @name ng.$routeProvider#otherwise
-   * @methodOf ng.$routeProvider
-   *
-   * @description
-   * Sets route definition that will be used on route change when no other route definition
-   * is matched.
-   *
-   * @param {Object} params Mapping information to be assigned to `$route.current`.
-   * @returns {Object} self
-   */
-  this.otherwise = function(params) {
-    this.when(null, params);
-    return this;
-  };
-
-
-  this.$get = ['$rootScope', '$location', '$routeParams', '$q', '$injector', '$http', '$templateCache',
-      function( $rootScope,   $location,   $routeParams,   $q,   $injector,   $http,   $templateCache) {
-
-    /**
-     * @ngdoc object
-     * @name ng.$route
-     * @requires $location
-     * @requires $routeParams
-     *
-     * @property {Object} current Reference to the current route definition.
-     * The route definition contains:
-     *
-     *   - `controller`: The controller constructor as define in route definition.
-     *   - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for
-     *     controller instantiation. The `locals` contain
-     *     the resolved values of the `resolve` map. Additionally the `locals` also contain:
-     *
-     *     - `$scope` - The current route scope.
-     *     - `$template` - The current route template HTML.
-     *
-     * @property {Array.} routes Array of all configured routes.
-     *
-     * @description
-     * Is used for deep-linking URLs to controllers and views (HTML partials).
-     * It watches `$location.url()` and tries to map the path to an existing route definition.
-     *
-     * You can define routes through {@link ng.$routeProvider $routeProvider}'s API.
-     *
-     * The `$route` service is typically used in conjunction with {@link ng.directive:ngView ngView}
-     * directive and the {@link ng.$routeParams $routeParams} service.
-     *
-     * @example
-       This example shows how changing the URL hash causes the `$route` to match a route against the
-       URL, and the `ngView` pulls in the partial.
-
-       Note that this example is using {@link ng.directive:script inlined templates}
-       to get it working on jsfiddle as well.
-
-     
-       
-         
- Choose: - Moby | - Moby: Ch1 | - Gatsby | - Gatsby: Ch4 | - Scarlet Letter
- -
-
- -
$location.path() = {{$location.path()}}
-
$route.current.templateUrl = {{$route.current.templateUrl}}
-
$route.current.params = {{$route.current.params}}
-
$route.current.scope.name = {{$route.current.scope.name}}
-
$routeParams = {{$routeParams}}
-
-
- - - controller: {{name}}
- Book Id: {{params.bookId}}
-
- - - controller: {{name}}
- Book Id: {{params.bookId}}
- Chapter Id: {{params.chapterId}} -
- - - angular.module('ngView', [], function($routeProvider, $locationProvider) { - $routeProvider.when('/Book/:bookId', { - templateUrl: 'book.html', - controller: BookCntl, - resolve: { - // I will cause a 1 second delay - delay: function($q, $timeout) { - var delay = $q.defer(); - $timeout(delay.resolve, 1000); - return delay.promise; - } - } - }); - $routeProvider.when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: ChapterCntl - }); - - // configure html5 to get links working on jsfiddle - $locationProvider.html5Mode(true); - }); - - function MainCntl($scope, $route, $routeParams, $location) { - $scope.$route = $route; - $scope.$location = $location; - $scope.$routeParams = $routeParams; - } - - function BookCntl($scope, $routeParams) { - $scope.name = "BookCntl"; - $scope.params = $routeParams; - } - - function ChapterCntl($scope, $routeParams) { - $scope.name = "ChapterCntl"; - $scope.params = $routeParams; - } - - - - it('should load and compile correct template', function() { - element('a:contains("Moby: Ch1")').click(); - var content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: ChapterCntl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element('a:contains("Scarlet")').click(); - sleep(2); // promises are not part of scenario waiting - content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: BookCntl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - -
- */ - - /** - * @ngdoc event - * @name ng.$route#$routeChangeStart - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * Broadcasted before a route change. At this point the route services starts - * resolving all of the dependencies needed for the route change to occurs. - * Typically this involves fetching the view template as well as any dependencies - * defined in `resolve` route property. Once all of the dependencies are resolved - * `$routeChangeSuccess` is fired. - * - * @param {Route} next Future route information. - * @param {Route} current Current route information. - */ - - /** - * @ngdoc event - * @name ng.$route#$routeChangeSuccess - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * Broadcasted after a route dependencies are resolved. - * {@link ng.directive:ngView ngView} listens for the directive - * to instantiate the controller and render the view. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} current Current route information. - * @param {Route|Undefined} previous Previous route information, or undefined if current is first route entered. - */ - - /** - * @ngdoc event - * @name ng.$route#$routeChangeError - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * Broadcasted if any of the resolve promises are rejected. - * - * @param {Route} current Current route information. - * @param {Route} previous Previous route information. - * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. - */ - - /** - * @ngdoc event - * @name ng.$route#$routeUpdate - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * - * The `reloadOnSearch` property has been set to false, and we are reusing the same - * instance of the Controller. - */ - - var forceReload = false, - $route = { - routes: routes, - - /** - * @ngdoc method - * @name ng.$route#reload - * @methodOf ng.$route - * - * @description - * Causes `$route` service to reload the current route even if - * {@link ng.$location $location} hasn't changed. - * - * As a result of that, {@link ng.directive:ngView ngView} - * creates new scope, reinstantiates the controller. - */ - reload: function() { - forceReload = true; - $rootScope.$evalAsync(updateRoute); - } - }; - - $rootScope.$on('$locationChangeSuccess', updateRoute); - - return $route; - - ///////////////////////////////////////////////////// - - /** - * @param on {string} current url - * @param when {string} route when template to match the url against - * @param whenProperties {Object} properties to define when's matching behavior - * @return {?Object} - */ - function switchRouteMatcher(on, when, whenProperties) { - // TODO(i): this code is convoluted and inefficient, we should construct the route matching - // regex only once and then reuse it - - // Escape regexp special characters. - when = '^' + when.replace(/[-\/\\^$:*+?.()|[\]{}]/g, "\\$&") + '$'; - - var regex = '', - params = [], - dst = {}; - - var re = /\\([:*])(\w+)/g, - paramMatch, - lastMatchedIndex = 0; - - while ((paramMatch = re.exec(when)) !== null) { - // Find each :param in `when` and replace it with a capturing group. - // Append all other sections of when unchanged. - regex += when.slice(lastMatchedIndex, paramMatch.index); - switch(paramMatch[1]) { - case ':': - regex += '([^\\/]*)'; - break; - case '*': - regex += '(.*)'; - break; - } - params.push(paramMatch[2]); - lastMatchedIndex = re.lastIndex; - } - // Append trailing path part. - regex += when.substr(lastMatchedIndex); - - var match = on.match(new RegExp(regex, whenProperties.caseInsensitiveMatch ? 'i' : '')); - if (match) { - forEach(params, function(name, index) { - dst[name] = match[index + 1]; - }); - } - return match ? dst : null; - } - - function updateRoute() { - var next = parseRoute(), - last = $route.current; - - if (next && last && next.$$route === last.$$route - && equals(next.pathParams, last.pathParams) && !next.reloadOnSearch && !forceReload) { - last.params = next.params; - copy(last.params, $routeParams); - $rootScope.$broadcast('$routeUpdate', last); - } else if (next || last) { - forceReload = false; - $rootScope.$broadcast('$routeChangeStart', next, last); - $route.current = next; - if (next) { - if (next.redirectTo) { - if (isString(next.redirectTo)) { - $location.path(interpolate(next.redirectTo, next.params)).search(next.params) - .replace(); - } else { - $location.url(next.redirectTo(next.pathParams, $location.path(), $location.search())) - .replace(); - } - } - } - - $q.when(next). - then(function() { - if (next) { - var locals = extend({}, next.resolve), - template; - - forEach(locals, function(value, key) { - locals[key] = isString(value) ? $injector.get(value) : $injector.invoke(value); - }); - - if (isDefined(template = next.template)) { - if (isFunction(template)) { - template = template(next.params); - } - } else if (isDefined(template = next.templateUrl)) { - if (isFunction(template)) { - template = template(next.params); - } - if (isDefined(template)) { - next.loadedTemplateUrl = template; - template = $http.get(template, {cache: $templateCache}). - then(function(response) { return response.data; }); - } - } - if (isDefined(template)) { - locals['$template'] = template; - } - return $q.all(locals); - } - }). - // after route change - then(function(locals) { - if (next == $route.current) { - if (next) { - next.locals = locals; - copy(next.params, $routeParams); - } - $rootScope.$broadcast('$routeChangeSuccess', next, last); - } - }, function(error) { - if (next == $route.current) { - $rootScope.$broadcast('$routeChangeError', next, last, error); - } - }); - } - } - - - /** - * @returns the current active route, by matching it against the URL - */ - function parseRoute() { - // Match a route - var params, match; - forEach(routes, function(route, path) { - if (!match && (params = switchRouteMatcher($location.path(), path, route))) { - match = inherit(route, { - params: extend({}, $location.search(), params), - pathParams: params}); - match.$$route = route; - } - }); - // No route matched; fallback to "otherwise" route - return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); - } - - /** - * @returns interpolation of the redirect path with the parameters - */ - function interpolate(string, params) { - var result = []; - forEach((string||'').split(':'), function(segment, i) { - if (i == 0) { - result.push(segment); - } else { - var segmentMatch = segment.match(/(\w+)(.*)/); - var key = segmentMatch[1]; - result.push(params[key]); - result.push(segmentMatch[2] || ''); - delete params[key]; - } - }); - return result.join(''); - } - }]; -} - -/** - * @ngdoc object - * @name ng.$routeParams - * @requires $route - * - * @description - * Current set of route parameters. The route parameters are a combination of the - * {@link ng.$location $location} `search()`, and `path()`. The `path` parameters - * are extracted when the {@link ng.$route $route} path is matched. - * - * In case of parameter name collision, `path` params take precedence over `search` params. - * - * The service guarantees that the identity of the `$routeParams` object will remain unchanged - * (but its properties will likely change) even when a route change occurs. - * - * @example - *
- *  // Given:
- *  // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
- *  // Route: /Chapter/:chapterId/Section/:sectionId
- *  //
- *  // Then
- *  $routeParams ==> {chapterId:1, sectionId:2, search:'moby'}
- * 
- */ -function $RouteParamsProvider() { - this.$get = valueFn({}); -} - /** * DESIGN NOTES * - * The design decisions behind the scope ware heavily favored for speed and memory consumption. + * The design decisions behind the scope are heavily favored for speed and memory consumption. * * The typical use of scope is to watch the expressions, which most of the time return the same * value as last time so we optimize the operation. * - * Closures construction is expensive from speed as well as memory: - * - no closures, instead ups prototypical inheritance for API + * Closures construction is expensive in terms of speed as well as memory: + * - No closures, instead use prototypical inheritance for API * - Internal state needs to be stored on scope directly, which means that private state is * exposed as $$____ properties * * Loop operations are optimized by using while(count--) { ... } * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the begging (shift) instead of at the end (push) + * items to the array at the beginning (shift) instead of at the end (push) * * Child scopes are created and removed often - * - Using array would be slow since inserts in meddle are expensive so we use linked list + * - Using an array would be slow since inserts in middle are expensive so we use linked list * * There are few watches then a lot of observers. This is why you don't want the observer to be * implemented in the same way as watch. Watch requires return of initialization function which @@ -17518,7 +18812,7 @@ function $RouteParamsProvider() { * @methodOf ng.$rootScopeProvider * @description * - * Sets the number of digest iteration the scope should attempt to execute before giving up and + * Sets the number of digest iterations the scope should attempt to execute before giving up and * assuming that the model is unstable. * * The current default is 10 iterations. @@ -17538,6 +18832,7 @@ function $RouteParamsProvider() { */ function $RootScopeProvider(){ var TTL = 10; + var $rootScopeMinErr = minErr('$rootScope'); this.digestTtl = function(value) { if (arguments.length) { @@ -17639,13 +18934,11 @@ function $RootScopeProvider(){ var Child, child; - if (isFunction(isolate)) { - // TODO: remove at some point - throw Error('API-CHANGE: Use $controller to instantiate controllers.'); - } if (isolate) { child = new Scope(); child.$root = this.$root; + // ensure that there is just one async queue per $rootScope and it's children + child.$$asyncQueue = this.$$asyncQueue; } else { Child = function() {}; // should be anonymous; This is so that when the minifier munges // the name it does not become random set of chars. These will then show up as class @@ -17854,7 +19147,7 @@ function $RootScopeProvider(){ oldValue = newValue; changeDetected++; } - } else if (isArray(newValue)) { + } else if (isArrayLike(newValue)) { if (oldValue !== internalArray) { // we are transitioning from something which was not an array into array. oldValue = internalArray; @@ -17928,7 +19221,7 @@ function $RootScopeProvider(){ * @function * * @description - * Process all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and its children. + * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and its children. * Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change the model, the * `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} until no more listeners are * firing. This means that it is possible to get into an infinite loop. This function will throw @@ -18002,7 +19295,7 @@ function $RootScopeProvider(){ watch = watchers[length]; // Most common watches are on primitives, in which case we can short // circuit it with === operator, only when === fails do we use .equals - if ((value = watch.get(current)) !== (last = watch.last) && + if (watch && (value = watch.get(current)) !== (last = watch.last) && !(watch.eq ? equals(value, last) : (typeof value == 'number' && typeof last == 'number' @@ -18038,8 +19331,9 @@ function $RootScopeProvider(){ if(dirty && !(ttl--)) { clearPhase(); - throw Error(TTL + ' $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: ' + toJson(watchLog)); + throw $rootScopeMinErr('infdig', + '{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}', + TTL, toJson(watchLog)); } } while (dirty || asyncQueue.length); @@ -18055,6 +19349,9 @@ function $RootScopeProvider(){ * * @description * Broadcasted when a scope and its children are being destroyed. + * + * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to + * clean up DOM bindings before an element is removed from the DOM. */ /** @@ -18076,6 +19373,9 @@ function $RootScopeProvider(){ * Just before a scope is destroyed a `$destroy` event is broadcasted on this scope. * Application code can register a `$destroy` event handler that will give it chance to * perform any necessary cleanup. + * + * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to + * clean up DOM bindings before an element is removed from the DOM. */ $destroy: function() { // we can't destroy the root scope or a scope that has been already destroyed @@ -18271,7 +19571,7 @@ function $RootScopeProvider(){ * Afterwards, the event traverses upwards toward the root scope and calls all registered * listeners along the way. The event will stop propagating if one of the listeners cancels it. * - * Any exception emmited from the {@link ng.$rootScope.Scope#$on listeners} will be passed + * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed * onto the {@link ng.$exceptionHandler $exceptionHandler} service. * * @param {string} name Event name to emit. @@ -18340,7 +19640,7 @@ function $RootScopeProvider(){ * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed * onto the {@link ng.$exceptionHandler $exceptionHandler} service. * - * @param {string} name Event name to emit. + * @param {string} name Event name to broadcast. * @param {...*} args Optional set of arguments which will be passed onto the event listeners. * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} */ @@ -18401,7 +19701,7 @@ function $RootScopeProvider(){ function beginPhase(phase) { if ($rootScope.$$phase) { - throw Error($rootScope.$$phase + ' already in progress'); + throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); } $rootScope.$$phase = phase; @@ -18425,6 +19725,954 @@ function $RootScopeProvider(){ }]; } +var $sceMinErr = minErr('$sce'); + +var SCE_CONTEXTS = { + HTML: 'html', + CSS: 'css', + URL: 'url', + // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a + // url. (e.g. ng-include, script src, templateUrl) + RESOURCE_URL: 'resourceUrl', + JS: 'js' +}; + + +/** + * @ngdoc service + * @name ng.$sceDelegate + * @function + * + * @description + * + * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict + * Contextual Escaping (SCE)} services to AngularJS. + * + * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of + * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is + * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to + * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things + * work because `$sce` delegates to `$sceDelegate` for these operations. + * + * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. + * + * The default instance of `$sceDelegate` should work out of the box with little pain. While you + * can override it completely to change the behavior of `$sce`, the common case would + * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting + * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as + * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist + * $sceDelegateProvider.resourceUrlWhitelist} and {@link + * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} + */ + +/** + * @ngdoc object + * @name ng.$sceDelegateProvider + * @description + * + * The $sceDelegateProvider provider allows developers to configure the {@link ng.$sceDelegate + * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure + * that URLs used for sourcing Angular templates are safe. Refer {@link + * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and + * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} + * + * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. + */ + +function $SceDelegateProvider() { + this.SCE_CONTEXTS = SCE_CONTEXTS; + + // Resource URLs can also be trusted by policy. + var resourceUrlWhitelist = ['self'], + resourceUrlBlacklist = []; + + /** + * @ngdoc function + * @name ng.sceDelegateProvider#resourceUrlWhitelist + * @methodOf ng.$sceDelegateProvider + * @function + * + * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value + * provided. This must be an array. + * + * Each element of this array must either be a regex or the special string `'self'`. + * + * When a regex is used, it is matched against the normalized / absolute URL of the resource + * being tested. + * + * The **special string** `'self'` can be used to match against all URLs of the same domain as the + * application document with the same protocol (allows sourcing https resources from http documents.) + * + * Please note that **an empty whitelist array will block all URLs**! + * + * @return {Array} the currently set whitelist array. + * + * The **default value** when no whitelist has been explicitly set is `['self']`. + * + * @description + * Sets/Gets the whitelist of trusted resource URLs. + */ + this.resourceUrlWhitelist = function (value) { + if (arguments.length) { + resourceUrlWhitelist = value; + } + return resourceUrlWhitelist; + }; + + /** + * @ngdoc function + * @name ng.sceDelegateProvider#resourceUrlBlacklist + * @methodOf ng.$sceDelegateProvider + * @function + * + * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value + * provided. This must be an array. + * + * Each element of this array must either be a regex or the special string `'self'` (see + * `resourceUrlWhitelist` for meaning - it's only really useful there.) + * + * When a regex is used, it is matched against the normalized / absolute URL of the resource + * being tested. + * + * The typical usage for the blacklist is to **block [open redirects](http://cwe.mitre.org/data/definitions/601.html)** + * served by your domain as these would otherwise be trusted but actually return content from the redirected + * domain. + * + * Finally, **the blacklist overrides the whitelist** and has the final say. + * + * @return {Array} the currently set blacklist array. + * + * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there is + * no blacklist.) + * + * @description + * Sets/Gets the blacklist of trusted resource URLs. + */ + + this.resourceUrlBlacklist = function (value) { + if (arguments.length) { + resourceUrlBlacklist = value; + } + return resourceUrlBlacklist; + }; + + // Helper functions for matching resource urls by policy. + function isCompatibleProtocol(documentProtocol, resourceProtocol) { + return ((documentProtocol === resourceProtocol) || + (documentProtocol === "http:" && resourceProtocol === "https:")); + } + + this.$get = ['$log', '$document', '$injector', '$$urlUtils', function( + $log, $document, $injector, $$urlUtils) { + + var htmlSanitizer = function htmlSanitizer(html) { + throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); + }; + + if ($injector.has('$sanitize')) { + htmlSanitizer = $injector.get('$sanitize'); + } + + + function matchUrl(matcher, parsedUrl) { + if (matcher === 'self') { + return $$urlUtils.isSameOrigin(parsedUrl); + } else { + return !!parsedUrl.href.match(matcher); + } + } + + function isResourceUrlAllowedByPolicy(url) { + var parsedUrl = $$urlUtils.resolve(url.toString(), true); + var i, n, allowed = false; + // Ensure that at least one item from the whitelist allows this url. + for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { + if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { + allowed = true; + break; + } + } + if (allowed) { + // Ensure that no item from the blacklist blocked this url. + for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { + if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { + allowed = false; + break; + } + } + } + return allowed; + } + + function generateHolderType(base) { + var holderType = function TrustedValueHolderType(trustedValue) { + this.$$unwrapTrustedValue = function() { + return trustedValue; + }; + }; + if (base) { + holderType.prototype = new base(); + } + holderType.prototype.valueOf = function sceValueOf() { + return this.$$unwrapTrustedValue(); + } + holderType.prototype.toString = function sceToString() { + return this.$$unwrapTrustedValue().toString(); + } + return holderType; + } + + var trustedValueHolderBase = generateHolderType(), + byType = {}; + + byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); + + /** + * @ngdoc method + * @name ng.$sceDelegate#trustAs + * @methodOf ng.$sceDelegate + * + * @description + * Returns an object that is trusted by angular for use in specified strict + * contextual escaping contexts (such as ng-html-bind-unsafe, ng-include, any src + * attribute interpolation, any dom event binding attribute interpolation + * such as for onclick, etc.) that uses the provided value. + * See {@link ng.$sce $sce} for enabling strict contextual escaping. + * + * @param {string} type The kind of context in which this value is safe for use. e.g. url, + * resourceUrl, html, js and css. + * @param {*} value The value that that should be considered trusted/safe. + * @returns {*} A value that can be used to stand in for the provided `value` in places + * where Angular expects a $sce.trustAs() return value. + */ + function trustAs(type, trustedValue) { + var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); + if (!constructor) { + throw $sceMinErr('icontext', 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', + type, trustedValue); + } + if (trustedValue === null || trustedValue === undefined || trustedValue === '') { + return trustedValue; + } + // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting + // mutable objects, we ensure here that the value passed in is actually a string. + if (typeof trustedValue !== 'string') { + throw $sceMinErr('itype', + 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', + type); + } + return new constructor(trustedValue); + } + + /** + * @ngdoc method + * @name ng.$sceDelegate#valueOf + * @methodOf ng.$sceDelegate + * + * @description + * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link + * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. + * + * If the passed parameter is not a value that had been returned by {@link + * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. + * + * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} + * call or anything else. + * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns `value` + * unchanged. + */ + function valueOf(maybeTrusted) { + if (maybeTrusted instanceof trustedValueHolderBase) { + return maybeTrusted.$$unwrapTrustedValue(); + } else { + return maybeTrusted; + } + } + + /** + * @ngdoc method + * @name ng.$sceDelegate#getTrusted + * @methodOf ng.$sceDelegate + * + * @description + * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and returns the + * originally supplied value if the queried context type is a supertype of the created type. If + * this condition isn't satisfied, throws an exception. + * + * @param {string} type The kind of context in which this value is to be used. + * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} call. + * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. + */ + function getTrusted(type, maybeTrusted) { + if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { + return maybeTrusted; + } + var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); + if (constructor && maybeTrusted instanceof constructor) { + return maybeTrusted.$$unwrapTrustedValue(); + } + // If we get here, then we may only take one of two actions. + // 1. sanitize the value for the requested type, or + // 2. throw an exception. + if (type === SCE_CONTEXTS.RESOURCE_URL) { + if (isResourceUrlAllowedByPolicy(maybeTrusted)) { + return maybeTrusted; + } else { + throw $sceMinErr('insecurl', + 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', maybeTrusted.toString()); + } + } else if (type === SCE_CONTEXTS.HTML) { + return htmlSanitizer(maybeTrusted); + } + throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); + } + + return { trustAs: trustAs, + getTrusted: getTrusted, + valueOf: valueOf }; + }]; +} + + +/** + * @ngdoc object + * @name ng.$sceProvider + * @description + * + * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. + * - enable/disable Strict Contextual Escaping (SCE) in a module + * - override the default implementation with a custom delegate + * + * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. + */ + +/** + * @ngdoc service + * @name ng.$sce + * @function + * + * @description + * + * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. + * + * # Strict Contextual Escaping + * + * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain + * contexts to result in a value that is marked as safe to use for that context One example of such + * a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer to these + * contexts as privileged or SCE contexts. + * + * As of version 1.2, Angular ships with SCE enabled by default. + * + * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows + * one to execute arbitrary javascript by the use of the expression() syntax. Refer + * to learn more about them. + * You can ensure your document is in standards mode and not quirks mode by adding `` + * to the top of your HTML document. + * + * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for + * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. + * + * Here's an example of a binding in a privileged context: + * + *
+ *     
+ *     
+ *
+ * + * Notice that `ng-bind-html` is bound to `{{userHtml}}` controlled by the user. With SCE + * disabled, this application allows the user to render arbitrary HTML into the DIV. + * In a more realistic example, one may be rendering user comments, blog articles, etc. via + * bindings. (HTML is just one example of a context where rendering user controlled input creates + * security vulnerabilities.) + * + * For the case of HTML, you might use a library, either on the client side, or on the server side, + * to sanitize unsafe HTML before binding to the value and rendering it in the document. + * + * How would you ensure that every place that used these types of bindings was bound to a value that + * was sanitized by your library (or returned as safe for rendering by your server?) How can you + * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some + * properties/fields and forgot to update the binding to the sanitized value? + * + * To be secure by default, you want to ensure that any such bindings are disallowed unless you can + * determine that something explicitly says it's safe to use a value for binding in that + * context. You can then audit your code (a simple grep would do) to ensure that this is only done + * for those values that you can easily tell are safe - because they were received from your server, + * sanitized by your library, etc. You can organize your codebase to help with this - perhaps + * allowing only the files in a specific directory to do this. Ensuring that the internal API + * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. + * + * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} (and shorthand + * methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to obtain values that will be + * accepted by SCE / privileged contexts. + * + * + * ## How does it work? + * + * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted + * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link + * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the + * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. + * + * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link + * ng.$sce#parseHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly + * simplified): + * + *
+ *   var ngBindHtmlDirective = ['$sce', function($sce) {
+ *     return function(scope, element, attr) {
+ *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
+ *         element.html(value || '');
+ *       });
+ *     };
+ *   }];
+ * 
+ * + * ## Impact on loading templates + * + * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as + * `templateUrl`'s specified by {@link guide/directive directives}. + * + * By default, Angular only loads templates from the same domain and protocol as the application + * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or + * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist + * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. + * + * *Please note*: + * The browser's + * {@link https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest + * Same Origin Policy} and {@link http://www.w3.org/TR/cors/ Cross-Origin Resource Sharing (CORS)} + * policy apply in addition to this and may further restrict whether the template is successfully + * loaded. This means that without the right CORS policy, loading templates from a different domain + * won't work on all browsers. Also, loading templates from `file://` URL does not work on some + * browsers. + * + * ## This feels like too much overhead for the developer? + * + * It's important to remember that SCE only applies to interpolation expressions. + * + * If your expressions are constant literals, they're automatically trusted and you don't need to + * call `$sce.trustAs` on them. (e.g. + * `
`) just works. + * + * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them + * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. + * + * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load + * templates in `ng-include` from your application's domain without having to even know about SCE. + * It blocks loading templates from other domains or loading templates over http from an https + * served document. You can change these by setting your own custom {@link + * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link + * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. + * + * This significantly reduces the overhead. It is far easier to pay the small overhead and have an + * application that's secure and can be audited to verify that with much more ease than bolting + * security onto an application later. + * + * ## What trusted context types are supported? + * + * | Context | Notes | + * |=====================|================| + * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | + * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | + * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | + * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | + * + * ## Show me an example. + * + * + * + * @example + + +
+

+ User comments
+ By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when $sanitize is available. If $sanitize isn't available, this results in an error instead of an exploit. +
+
+ {{userComment.name}}: + +
+
+
+
+
+ + + var mySceApp = angular.module('mySceApp', ['ngSanitize']); + + mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { + var self = this; + $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { + self.userComments = userComments; + }); + self.explicitlyTrustedHtml = $sce.trustAsHtml( + 'Hover over this text.'); + }); + + + + [ + { "name": "Alice", + "htmlComment": "Is anyone reading this?" + }, + { "name": "Bob", + "htmlComment": "Yes! Am I the only other one?" + } + ] + + + + describe('SCE doc demo', function() { + it('should sanitize untrusted values', function() { + expect(element('.htmlComment').html()).toBe('Is anyone reading this?'); + }); + it('should NOT sanitize explicitly trusted values', function() { + expect(element('#explicitlyTrustedHtml').html()).toBe( + 'Hover over this text.'); + }); + }); + +
+ * + * + * + * ## Can I disable SCE completely? + * + * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits + * for little coding overhead. It will be much harder to take an SCE disabled application and + * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE + * for cases where you have a lot of existing code that was written before SCE was introduced and + * you're migrating them a module at a time. + * + * That said, here's how you can completely disable SCE: + * + *
+ *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
+ *     // Completely disable SCE.  For demonstration purposes only!
+ *     // Do not use in new projects.
+ *     $sceProvider.enabled(false);
+ *   });
+ * 
+ * + */ + +function $SceProvider() { + var enabled = true; + + /** + * @ngdoc function + * @name ng.sceProvider#enabled + * @methodOf ng.$sceProvider + * @function + * + * @param {boolean=} value If provided, then enables/disables SCE. + * @return {boolean} true if SCE is enabled, false otherwise. + * + * @description + * Enables/disables SCE and returns the current value. + */ + this.enabled = function (value) { + if (arguments.length) { + enabled = !!value; + } + return enabled; + }; + + + /* Design notes on the default implementation for SCE. + * + * The API contract for the SCE delegate + * ------------------------------------- + * The SCE delegate object must provide the following 3 methods: + * + * - trustAs(contextEnum, value) + * This method is used to tell the SCE service that the provided value is OK to use in the + * contexts specified by contextEnum. It must return an object that will be accepted by + * getTrusted() for a compatible contextEnum and return this value. + * + * - valueOf(value) + * For values that were not produced by trustAs(), return them as is. For values that were + * produced by trustAs(), return the corresponding input value to trustAs. Basically, if + * trustAs is wrapping the given values into some type, this operation unwraps it when given + * such a value. + * + * - getTrusted(contextEnum, value) + * This function should return the a value that is safe to use in the context specified by + * contextEnum or throw and exception otherwise. + * + * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be opaque + * or wrapped in some holder object. That happens to be an implementation detail. For instance, + * an implementation could maintain a registry of all trusted objects by context. In such a case, + * trustAs() would return the same object that was passed in. getTrusted() would return the same + * object passed in if it was found in the registry under a compatible context or throw an + * exception otherwise. An implementation might only wrap values some of the time based on + * some criteria. getTrusted() might return a value and not throw an exception for special + * constants or objects even if not wrapped. All such implementations fulfill this contract. + * + * + * A note on the inheritance model for SCE contexts + * ------------------------------------------------ + * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This + * is purely an implementation details. + * + * The contract is simply this: + * + * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) + * will also succeed. + * + * Inheritance happens to capture this in a natural way. In some future, we + * may not use inheritance anymore. That is OK because no code outside of + * sce.js and sceSpecs.js would need to be aware of this detail. + */ + + this.$get = ['$parse', '$document', '$sceDelegate', function( + $parse, $document, $sceDelegate) { + // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows + // the "expression(javascript expression)" syntax which is insecure. + if (enabled && msie) { + var documentMode = $document[0].documentMode; + if (documentMode !== undefined && documentMode < 8) { + throw $sceMinErr('iequirks', + 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + + 'mode. You can fix this by adding the text to the top of your HTML ' + + 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); + } + } + + var sce = copy(SCE_CONTEXTS); + + /** + * @ngdoc function + * @name ng.sce#isEnabled + * @methodOf ng.$sce + * @function + * + * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you + * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. + * + * @description + * Returns a boolean indicating if SCE is enabled. + */ + sce.isEnabled = function () { + return enabled; + }; + sce.trustAs = $sceDelegate.trustAs; + sce.getTrusted = $sceDelegate.getTrusted; + sce.valueOf = $sceDelegate.valueOf; + + if (!enabled) { + sce.trustAs = sce.getTrusted = function(type, value) { return value; }, + sce.valueOf = identity + } + + /** + * @ngdoc method + * @name ng.$sce#parse + * @methodOf ng.$sce + * + * @description + * Converts Angular {@link guide/expression expression} into a function. This is like {@link + * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it + * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, + * *result*)} + * + * @param {string} type The kind of SCE context in which this result will be used. + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + sce.parseAs = function sceParseAs(type, expr) { + var parsed = $parse(expr); + if (parsed.literal && parsed.constant) { + return parsed; + } else { + return function sceParseAsTrusted(self, locals) { + return sce.getTrusted(type, parsed(self, locals)); + } + } + }; + + /** + * @ngdoc method + * @name ng.$sce#trustAs + * @methodOf ng.$sce + * + * @description + * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, returns an object + * that is trusted by angular for use in specified strict contextual escaping contexts (such as + * ng-html-bind-unsafe, ng-include, any src attribute interpolation, any dom event binding + * attribute interpolation such as for onclick, etc.) that uses the provided value. See * + * {@link ng.$sce $sce} for enabling strict contextual escaping. + * + * @param {string} type The kind of context in which this value is safe for use. e.g. url, + * resource_url, html, js and css. + * @param {*} value The value that that should be considered trusted/safe. + * @returns {*} A value that can be used to stand in for the provided `value` in places + * where Angular expects a $sce.trustAs() return value. + */ + + /** + * @ngdoc method + * @name ng.$sce#trustAsHtml + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.trustAsHtml(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml + * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name ng.$sce#trustAsUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.trustAsUrl(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl + * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name ng.$sce#trustAsResourceUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.trustAsResourceUrl(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the return + * value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name ng.$sce#trustAsJs + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.trustAsJs(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs + * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name ng.$sce#getTrusted + * @methodOf ng.$sce + * + * @description + * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, takes + * the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the originally supplied + * value if the queried context type is a supertype of the created type. If this condition + * isn't satisfied, throws an exception. + * + * @param {string} type The kind of context in which this value is to be used. + * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} call. + * @returns {*} The value the was originally provided to {@link ng.$sce#trustAs `$sce.trustAs`} if + * valid in this context. Otherwise, throws an exception. + */ + + /** + * @ngdoc method + * @name ng.$sce#getTrustedHtml + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedHtml(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` + */ + + /** + * @ngdoc method + * @name ng.$sce#getTrustedCss + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedCss(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` + */ + + /** + * @ngdoc method + * @name ng.$sce#getTrustedUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedUrl(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` + */ + + /** + * @ngdoc method + * @name ng.$sce#getTrustedResourceUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedResourceUrl(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} + * + * @param {*} value The value to pass to `$sceDelegate.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` + */ + + /** + * @ngdoc method + * @name ng.$sce#getTrustedJs + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedJs(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` + */ + + /** + * @ngdoc method + * @name ng.$sce#parseAsHtml + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsHtml(expression string)` → {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name ng.$sce#parseAsCss + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsCss(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name ng.$sce#parseAsUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsUrl(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name ng.$sce#parseAsResourceUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsResourceUrl(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name ng.$sce#parseAsJs + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsJs(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + // Shorthand delegations. + var parse = sce.parseAs, + getTrusted = sce.getTrusted, + trustAs = sce.trustAs; + + angular.forEach(SCE_CONTEXTS, function (enumValue, name) { + var lName = lowercase(name); + sce[camelCase("parse_as_" + lName)] = function (expr) { + return parse(enumValue, expr); + } + sce[camelCase("get_trusted_" + lName)] = function (value) { + return getTrusted(enumValue, value); + } + sce[camelCase("trust_as_" + lName)] = function (value) { + return trustAs(enumValue, value); + } + }); + + return sce; + }]; +} + /** * !!! This is an undocumented "private" service !!! * @@ -18434,7 +20682,8 @@ function $RootScopeProvider(){ * * @property {boolean} history Does the browser support html5 history api ? * @property {boolean} hashchange Does the browser support hashchange event ? - * @property {boolean} supportsTransitions Does the browser support CSS transition events ? + * @property {boolean} transitions Does the browser support CSS transition events ? + * @property {boolean} animations Does the browser support CSS animation events ? * * @description * This is very simple implementation of testing browser's features. @@ -18448,6 +20697,7 @@ function $SnifferProvider() { vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, bodyStyle = document.body && document.body.style, transitions = false, + animations = false, match; if (bodyStyle) { @@ -18458,7 +20708,13 @@ function $SnifferProvider() { break; } } - transitions = !!(vendorPrefix + 'Transition' in bodyStyle); + transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); + animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); + + if (android && (!transitions||!animations)) { + transitions = isString(document.body.style.webkitTransition); + animations = isString(document.body.style.webkitAnimation); + } } @@ -18486,1240 +20742,12 @@ function $SnifferProvider() { }, csp: document.securityPolicy ? document.securityPolicy.isActive : false, vendorPrefix: vendorPrefix, - supportsTransitions : transitions + transitions : transitions, + animations : animations }; }]; } -/** - * @ngdoc object - * @name ng.$window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * All expressions are evaluated with respect to current scope so they don't - * suffer from window globality. - * - * @example - - - - - - - - - */ -function $WindowProvider(){ - this.$get = valueFn(window); -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = {}, key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } - } - }); - - return parsed; -} - - -var IS_SAME_DOMAIN_URL_MATCH = /^(([^:]+):)?\/\/(\w+:{0,1}\w*@)?([\w\.-]*)?(:([0-9]+))?(.*)$/; - - -/** - * Parse a request and location URL and determine whether this is a same-domain request. - * - * @param {string} requestUrl The url of the request. - * @param {string} locationUrl The current browser location url. - * @returns {boolean} Whether the request is for the same domain. - */ -function isSameDomain(requestUrl, locationUrl) { - var match = IS_SAME_DOMAIN_URL_MATCH.exec(requestUrl); - // if requestUrl is relative, the regex does not match. - if (match == null) return true; - - var domain1 = { - protocol: match[2], - host: match[4], - port: int(match[6]) || DEFAULT_PORTS[match[2]] || null, - // IE8 sets unmatched groups to '' instead of undefined. - relativeProtocol: match[2] === undefined || match[2] === '' - }; - - match = URL_MATCH.exec(locationUrl); - var domain2 = { - protocol: match[1], - host: match[3], - port: int(match[5]) || DEFAULT_PORTS[match[1]] || null - }; - - return (domain1.protocol == domain2.protocol || domain1.relativeProtocol) && - domain1.host == domain2.host && - (domain1.port == domain2.port || (domain1.relativeProtocol && - domain2.port == DEFAULT_PORTS[domain2.protocol])); -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - return headersObj[lowercase(name)] || null; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers Http headers getter fn. - * @param {(function|Array.)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, fns) { - if (isFunction(fns)) - return fns(data, headers); - - forEach(fns, function(fn) { - data = fn(data, headers); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -function $HttpProvider() { - var JSON_START = /^\s*(\[|\{[^\{])/, - JSON_END = /[\}\]]\s*$/, - PROTECTION_PREFIX = /^\)\]\}',?\n/; - - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [function(data) { - if (isString(data)) { - // strip json vulnerability protection prefix - data = data.replace(PROTECTION_PREFIX, ''); - if (JSON_START.test(data) && JSON_END.test(data)) - data = fromJson(data, true); - } - return data; - }], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: {'Content-Type': 'application/json;charset=utf-8'}, - put: {'Content-Type': 'application/json;charset=utf-8'} - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - /** - * Are order by request. I.E. they are applied in the same order as - * array on request, but revers order on response. - */ - var interceptorFactories = this.interceptors = []; - /** - * For historical reasons, response interceptors ordered by the order in which - * they are applied to response. (This is in revers to interceptorFactories) - */ - var responseInterceptorFactories = this.responseInterceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - forEach(responseInterceptorFactories, function(interceptorFactory, index) { - var responseFn = isString(interceptorFactory) - ? $injector.get(interceptorFactory) - : $injector.invoke(interceptorFactory); - - /** - * Response interceptors go before "around" interceptors (no real reason, just - * had to pick one.) But they are already revesed, so we can't use unshift, hence - * the splice. - */ - reversedInterceptors.splice(index, 0, { - response: function(response) { - return responseFn($q.when(response)); - }, - responseError: function(response) { - return responseFn($q.reject(response)); - } - }); - }); - - - /** - * @ngdoc function - * @name ng.$http - * @requires $httpBackend - * @requires $browser - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via browser's {@link https://developer.mozilla.org/en/xmlhttprequest - * XMLHttpRequest} object or via {@link http://en.wikipedia.org/wiki/JSONP JSONP}. - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patters this doesn't matter much, for advanced usage, - * it is important to familiarize yourself with these apis and guarantees they provide. - * - * - * # General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an http request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - *
-     *   $http({method: 'GET', url: '/someUrl'}).
-     *     success(function(data, status, headers, config) {
-     *       // this callback will be called asynchronously
-     *       // when the response is available
-     *     }).
-     *     error(function(data, status, headers, config) {
-     *       // called asynchronously if an error occurs
-     *       // or server returns response with an error status.
-     *     });
-     * 
- * - * Since the returned value of calling the $http function is a Promise object, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the api signature and type info below for more - * details. - * - * A response status code that falls in the [200, 300) range is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * # Shortcut methods - * - * Since all invocation of the $http service require definition of the http method and url and - * POST and PUT requests require response body/data to be provided as well, shortcut methods - * were created to simplify using the api: - * - *
-     *   $http.get('/someUrl').success(successCallback);
-     *   $http.post('/someUrl', data).success(successCallback);
-     * 
- * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - * - * # Setting HTTP Headers - * - * The $http service will automatically add certain http headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for HTTP POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for HTTP PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from this configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with name equal to the lower-cased http method name, e.g. - * `$httpProvider.defaults.headers.get['My-Header']='value'`. - * - * Additionally, the defaults can be set at runtime via the `$http.defaults` object in a similar - * fashion as described above. - * - * - * # Transforming Requests and Responses - * - * Both requests and responses can be transformed using transform functions. By default, Angular - * applies these transformations: - * - * Request transformations: - * - * - if the `data` property of the request config object contains an object, serialize it into - * JSON format. - * - * Response transformations: - * - * - if XSRF prefix is detected, strip it (see Security Considerations section below) - * - if json response is detected, deserialize it using a JSON parser - * - * To globally augment or override the default transforms, modify the `$httpProvider.defaults.transformRequest` and - * `$httpProvider.defaults.transformResponse` properties of the `$httpProvider`. These properties are by default an - * array of transform functions, which allows you to `push` or `unshift` a new transformation function into the - * transformation chain. You can also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. - * - * Similarly, to locally override the request/response transforms, augment the `transformRequest` and/or - * `transformResponse` properties of the config object passed into `$http`. - * - * - * # Caching - * - * To enable caching set the configuration property `cache` to `true`. When the cache is - * enabled, `$http` stores the response from the server in local cache. Next time the - * response is served from the cache without sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same url that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response for the first request. - * - * A custom default cache built with $cacheFactory can be provided in $http.defaults.cache. - * To skip it, set configuration property `cache` to `false`. - * - * - * # Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfil this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with http `config` object. The function is free to modify - * the `config` or create a new one. The function needs to return the `config` directly or as a - * promise. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or resolved - * with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to modify - * the `response` or create a new one. The function needs to return the `response` directly or as a - * promise. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or resolved - * with a rejection. - * - * - *
-     *   // register the interceptor as a service
-     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
-     *     return {
-     *       // optional method
-     *       'request': function(config) {
-     *         // do something on success
-     *         return config || $q.when(config);
-     *       },
-     *
-     *       // optional method
-     *      'requestError': function(rejection) {
-     *         // do something on error
-     *         if (canRecover(rejection)) {
-     *           return responseOrNewPromise
-     *         }
-     *         return $q.reject(rejection);
-     *       },
-     *
-     *
-     *
-     *       // optional method
-     *       'response': function(response) {
-     *         // do something on success
-     *         return response || $q.when(response);
-     *       },
-     *
-     *       // optional method
-     *      'responseError': function(rejection) {
-     *         // do something on error
-     *         if (canRecover(rejection)) {
-     *           return responseOrNewPromise
-     *         }
-     *         return $q.reject(rejection);
-     *       };
-     *     }
-     *   });
-     *
-     *   $httpProvider.interceptors.push('myHttpInterceptor');
-     *
-     *
-     *   // register the interceptor via an anonymous factory
-     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
-     *     return {
-     *      'request': function(config) {
-     *          // same as above
-     *       },
-     *       'response': function(response) {
-     *          // same as above
-     *       }
-     *   });
-     * 
- * - * # Response interceptors (DEPRECATED) - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication or any kind of synchronous or - * asynchronous preprocessing of received responses, it is desirable to be able to intercept - * responses for http requests before they are handed over to the application code that - * initiated these requests. The response interceptors leverage the {@link ng.$q - * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor — a function that - * takes a {@link ng.$q promise} and returns the original or a new promise. - * - *
-     *   // register the interceptor as a service
-     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
-     *     return function(promise) {
-     *       return promise.then(function(response) {
-     *         // do something on success
-     *       }, function(response) {
-     *         // do something on error
-     *         if (canRecover(response)) {
-     *           return responseOrNewPromise
-     *         }
-     *         return $q.reject(response);
-     *       });
-     *     }
-     *   });
-     *
-     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');
-     *
-     *
-     *   // register the interceptor via an anonymous factory
-     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {
-     *     return function(promise) {
-     *       // same as above
-     *     }
-     *   });
-     * 
- * - * - * # Security Considerations - * - * When designing web applications, consider security threats from: - * - * - {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx - * JSON Vulnerability} - * - {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ## JSON Vulnerability Protection - * - * A {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx - * JSON Vulnerability} allows third party web-site to turn your JSON resource URL into - * {@link http://en.wikipedia.org/wiki/JSON#JSONP JSONP} request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - *
-     * ['one','two']
-     * 
- * - * which is vulnerable to attack, your server can return: - *
-     * )]}',
-     * ['one','two']
-     * 
- * - * Angular will strip the prefix, before processing the JSON. - * - * - * ## Cross Site Request Forgery (XSRF) Protection - * - * {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} is a technique by which - * an unauthorized site can gain your user's private data. Angular provides following mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on first HTTP GET request. On subsequent non-GET requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have read the token. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript making - * up its own tokens). We recommend that the token is a digest of your site's authentication - * cookie with {@link http://en.wikipedia.org/wiki/Rainbow_table salt for added security}. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults, or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.}` – Map of strings or objects which will be turned to - * `?key1=value1&key2=value2` after the url. If the value is not a string, it will be JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings representing HTTP headers to send to the server. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – `{function(data, headersGetter)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **transformResponse** – `{function(data, headersGetter)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number}` – timeout in milliseconds. - * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the - * XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5 - * requests with credentials} for more information. - * - **responseType** - `{string}` - see {@link - * https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}. - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - * @property {Array.} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example - - -
- - -
- - - -
http status code: {{status}}
-
http response data: {{data}}
-
-
- - function FetchCtrl($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - } - - - Hello, $http! - - - it('should make an xhr GET request', function() { - element(':button:contains("Sample GET")').click(); - element(':button:contains("fetch")').click(); - expect(binding('status')).toBe('200'); - expect(binding('data')).toMatch(/Hello, \$http!/); - }); - - it('should make a JSONP request to angularjs.org', function() { - element(':button:contains("Sample JSONP")').click(); - element(':button:contains("fetch")').click(); - expect(binding('status')).toBe('200'); - expect(binding('data')).toMatch(/Super Hero!/); - }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - element(':button:contains("Invalid JSONP")').click(); - element(':button:contains("fetch")').click(); - expect(binding('status')).toBe('0'); - expect(binding('data')).toBe('Request failed'); - }); - -
- */ - function $http(requestConfig) { - var config = { - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }; - var headers = {}; - - extend(config, requestConfig); - config.headers = headers; - config.method = uppercase(config.method); - - extend(headers, - defaults.headers.common, - defaults.headers[lowercase(config.method)], - requestConfig.headers); - - var xsrfValue = isSameDomain(config.url, $browser.url()) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - - var serverRequest = function(config) { - var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(config.data)) { - delete headers['Content-Type']; - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData, headers).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while(chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - }; - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response, { - data: transformData(response.data, response.headers, config.transformResponse) - }); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name ng.$http#get - * @methodOf ng.$http - * - * @description - * Shortcut method to perform `GET` request - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name ng.$http#delete - * @methodOf ng.$http - * - * @description - * Shortcut method to perform `DELETE` request - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name ng.$http#head - * @methodOf ng.$http - * - * @description - * Shortcut method to perform `HEAD` request - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name ng.$http#jsonp - * @methodOf ng.$http - * - * @description - * Shortcut method to perform `JSONP` request - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * Should contain `JSON_CALLBACK` string. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name ng.$http#post - * @methodOf ng.$http - * - * @description - * Shortcut method to perform `POST` request - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name ng.$http#put - * @methodOf ng.$http - * - * @description - * Shortcut method to perform `PUT` request - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put'); - - /** - * @ngdoc property - * @name ng.$http#defaults - * @propertyOf ng.$http - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData, reqHeaders) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (cachedResp) { - if (cachedResp.then) { - // cached request has already been sent, but there is no response yet - cachedResp.then(removePendingReq, removePendingReq); - return cachedResp; - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2])); - } else { - resolvePromise(cachedResp, 200, {}); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - // if we won't have the response in cache, send the request to the backend - if (!cachedResp) { - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString)]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - resolvePromise(response, status, headersString); - $rootScope.$apply(); - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config - }); - } - - - function removePendingReq() { - var idx = indexOf($http.pendingRequests, config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value == null || value == undefined) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - v = toJson(v); - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - - - }]; -} - -var XHR = window.XMLHttpRequest || function() { - try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} - try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} - try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} - throw new Error("This browser does not support XMLHttpRequest."); -}; - - -/** - * @ngdoc object - * @name ng.$httpBackend - * @requires $browser - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, - $document[0], $window.location.protocol.replace(':', '')); - }]; -} - -function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) { - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - }; - - jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - function() { - if (callbacks[callbackId].data) { - completeRequest(callback, 200, callbacks[callbackId].data); - } else { - completeRequest(callback, -2); - } - delete callbacks[callbackId]; - }); - } else { - var xhr = new XHR(); - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (value) xhr.setRequestHeader(key, value); - }); - - var status; - - // In IE6 and 7, this might be called synchronously when xhr.send below is called and the - // response is in the cache. the promise api will ensure that to the app code the api is - // always async - xhr.onreadystatechange = function() { - if (xhr.readyState == 4) { - var responseHeaders = xhr.getAllResponseHeaders(); - - // TODO(vojta): remove once Firefox 21 gets released. - // begin: workaround to overcome Firefox CORS http response headers bug - // https://bugzilla.mozilla.org/show_bug.cgi?id=608735 - // Firefox already patched in nightly. Should land in Firefox 21. - - // CORS "simple response headers" http://www.w3.org/TR/cors/ - var value, - simpleHeaders = ["Cache-Control", "Content-Language", "Content-Type", - "Expires", "Last-Modified", "Pragma"]; - if (!responseHeaders) { - responseHeaders = ""; - forEach(simpleHeaders, function (header) { - var value = xhr.getResponseHeader(header); - if (value) { - responseHeaders += header + ": " + value + "\n"; - } - }); - } - // end of the workaround. - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response and responseType properties were introduced in XHR Level2 spec (supported by IE10) - completeRequest(callback, - status || xhr.status, - (xhr.responseType ? xhr.response : xhr.responseText), - responseHeaders); - } - }; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - xhr.responseType = responseType; - } - - xhr.send(post || ''); - - if (timeout > 0) { - $browserDefer(function() { - status = -1; - xhr.abort(); - }, timeout); - } - } - - - function completeRequest(callback, status, response, headersString) { - // URL_MATCH is defined in src/service/location.js - var protocol = (url.match(URL_MATCH) || ['', locationProtocol])[1]; - - // fix status code for file protocol (it's always 0) - status = (protocol == 'file') ? (response ? 200 : 404) : status; - - // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status == 1223 ? 204 : status; - - callback(status, response, headersString); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), - doneWrapper = function() { - rawDocument.body.removeChild(script); - if (done) done(); - }; - - script.type = 'text/javascript'; - script.src = url; - - if (msie) { - script.onreadystatechange = function() { - if (/loaded|complete/.test(script.readyState)) doneWrapper(); - }; - } else { - script.onload = script.onerror = doneWrapper; - } - - rawDocument.body.appendChild(script); - } -} - -/** - * @ngdoc object - * @name ng.$locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider(){ - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - short: 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - function $TimeoutProvider() { this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler', function($rootScope, $browser, $q, $exceptionHandler) { @@ -19736,17 +20764,17 @@ function $TimeoutProvider() { * block and delegates any exceptions to * {@link ng.$exceptionHandler $exceptionHandler} service. * - * The return value of registering a timeout function is a promise which will be resolved when + * The return value of registering a timeout function is a promise, which will be resolved when * the timeout is reached and the timeout function is executed. * - * To cancel a the timeout request, call `$timeout.cancel(promise)`. + * To cancel a timeout request, call `$timeout.cancel(promise)`. * * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to * synchronously flush the queue of deferred functions. * - * @param {function()} fn A function, who's execution should be delayed. + * @param {function()} fn A function, whose execution should be delayed. * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to false skips model dirty checking, otherwise + * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this * promise will be resolved with is the return value of the `fn` function. @@ -19786,7 +20814,7 @@ function $TimeoutProvider() { * @methodOf ng.$timeout * * @description - * Cancels a task associated with the `promise`. As a result of this the promise will be + * Cancels a task associated with the `promise`. As a result of this, the promise will be * resolved with a rejection. * * @param {Promise=} promise Promise returned by the `$timeout` function. @@ -19805,6 +20833,166 @@ function $TimeoutProvider() { }]; } +function $$UrlUtilsProvider() { + this.$get = [function() { + var urlParsingNode = document.createElement("a"), + // NOTE: The usage of window and document instead of $window and $document here is + // deliberate. This service depends on the specific behavior of anchor nodes created by the + // browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and + // cause us to break tests. In addition, when the browser resolves a URL for XHR, it + // doesn't know about mocked locations and resolves URLs to the real document - which is + // exactly the behavior needed here. There is little value is mocking these our for this + // service. + originUrl = resolve(window.location.href, true); + + /** + * @description + * Normalizes and optionally parses a URL. + * + * NOTE: This is a private service. The API is subject to change unpredictably in any commit. + * + * Implementation Notes for non-IE browsers + * ---------------------------------------- + * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, + * results both in the normalizing and parsing of the URL. Normalizing means that a relative + * URL will be resolved into an absolute URL in the context of the application document. + * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related + * properties are all populated to reflect the normalized URL. This approach has wide + * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See + * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html + * + * Implementation Notes for IE + * --------------------------- + * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other + * browsers. However, the parsed components will not be set if the URL assigned did not specify + * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We + * work around that by performing the parsing in a 2nd step by taking a previously normalized + * URL (e.g. by assining to a.href) and assigning it a.href again. This correctly populates the + * properties such as protocol, hostname, port, etc. + * + * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one + * uses the inner HTML approach to assign the URL as part of an HTML snippet - + * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. + * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. + * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that + * method and IE < 8 is unsupported. + * + * References: + * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement + * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html + * http://url.spec.whatwg.org/#urlutils + * https://github.com/angular/angular.js/pull/2902 + * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ + * + * @param {string} url The URL to be parsed. + * @param {boolean=} parse When true, returns an object for the parsed URL. Otherwise, returns + * a single string that is the normalized URL. + * @returns {object|string} When parse is true, returns the normalized URL as a string. + * Otherwise, returns an object with the following members. + * + * | member name | Description | + * |===============|================| + * | href | A normalized version of the provided URL if it was not an absolute URL | + * | protocol | The protocol including the trailing colon | + * | host | The host and port (if the port is non-default) of the normalizedUrl | + * + * These fields from the UrlUtils interface are currently not needed and hence not returned. + * + * | member name | Description | + * |===============|================| + * | hostname | The host without the port of the normalizedUrl | + * | pathname | The path following the host in the normalizedUrl | + * | hash | The URL hash if present | + * | search | The query string | + * + */ + function resolve(url, parse) { + var href = url; + if (msie) { + // Normalize before parse. Refer Implementation Notes on why this is + // done in two steps on IE. + urlParsingNode.setAttribute("href", href); + href = urlParsingNode.href; + } + urlParsingNode.setAttribute('href', href); + + if (!parse) { + return urlParsingNode.href; + } + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol, + host: urlParsingNode.host + // Currently unused and hence commented out. + // hostname: urlParsingNode.hostname, + // port: urlParsingNode.port, + // pathname: urlParsingNode.pathname, + // hash: urlParsingNode.hash, + // search: urlParsingNode.search + }; + } + + return { + resolve: resolve, + /** + * Parse a request URL and determine whether this is a same-origin request as the application document. + * + * @param {string|object} requestUrl The url of the request as a string that will be resolved + * or a parsed URL object. + * @returns {boolean} Whether the request is for the same origin as the application document. + */ + isSameOrigin: function isSameOrigin(requestUrl) { + var parsed = (typeof requestUrl === 'string') ? resolve(requestUrl, true) : requestUrl; + return (parsed.protocol === originUrl.protocol && + parsed.host === originUrl.host); + } + }; + }]; +} + +/** + * @ngdoc object + * @name ng.$window + * + * @description + * A reference to the browser's `window` object. While `window` + * is globally available in JavaScript, it causes testability problems, because + * it is a global variable. In angular we always refer to it through the + * `$window` service, so it may be overridden, removed or mocked for testing. + * + * Expressions, like the one defined for the `ngClick` directive in the example + * below, are evaluated with respect to the current scope. Therefore, there is + * no risk of inadvertently coding in a dependency on a global value in such an + * expression. + * + * @example + + + +
+ + +
+
+ + it('should display the greeting in the input box', function() { + input('greeting').enter('Hello, E2E Tests'); + // If we click the button it will block the test runner + // element(':button').click(); + }); + +
+ */ +function $WindowProvider(){ + this.$get = valueFn(window); +} + /** * @ngdoc object * @name ng.$filterProvider @@ -19835,7 +21023,7 @@ function $TimeoutProvider() { * } * * - * The filter function is registered with the `$injector` under the filter name suffixe with `Filter`. + * The filter function is registered with the `$injector` under the filter name suffix with `Filter`. *
  *   it('should be the same instance', inject(
  *     function($filterProvider) {
@@ -19874,7 +21062,7 @@ function $TimeoutProvider() {
  *
  * The general syntax in templates is as follows:
  *
- *         {{ expression | [ filter_name ] }}
+ *         {{ expression [| filter_name[:parameter_value] ... ] }}
  *
  * @param {String} name Name of the filter function to retrieve
  * @return {Function} the filter function
@@ -19976,7 +21164,7 @@ function $FilterProvider($provide) {
        
Any:
Name only
- Phone only
+ Phone only
Equality
@@ -20178,7 +21366,9 @@ function currencyFilter($locale) { * If the input is not a number an empty string is returned. * * @param {number|string} number Number to format. - * @param {(number|string)=} [fractionSize=2] Number of decimal places to round the number to. + * @param {(number|string)=} fractionSize Number of decimal places to round the number to. + * If this is not provided then the fraction size is computed from the current locale's number + * formatting pattern. In the case of the default locale, it will be 3. * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. * * @example @@ -20285,6 +21475,11 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { } if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); + } else { + + if (fractionSize > 0 && number > -1 && number < 1) { + formatedText = number.toFixed(fractionSize); + } } parts.push(isNegative ? pattern.negPre : pattern.posPre); @@ -20308,6 +21503,7 @@ function padNumber(num, digits, trim) { function dateGetter(name, size, offset, trim) { + offset = offset || 0; return function(date) { var value = date['get' + name](); if (offset > 0 || value > -offset) @@ -20358,7 +21554,7 @@ var DATE_FORMATS = { m: dateGetter('Minutes', 1), ss: dateGetter('Seconds', 2), s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` + // while ISO 8601 requires fractions to be prefixed with `.` or `,` // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions sss: dateGetter('Milliseconds', 3), EEEE: dateStrGetter('Day'), @@ -20411,7 +21607,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010 + * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) @@ -20419,10 +21615,10 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ * * `format` string can contain literal values. These need to be quoted with single quotes (e.g. * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence - * (e.g. `"h o''clock"`). + * (e.g. `"h 'o''clock'"`). * * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and it's + * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is * specified in the string input, the time is considered to be in the local timezone. * @param {string=} format Formatting rules (see Description). If not specified, @@ -20471,7 +21667,11 @@ function dateFilter($locale) { tzMin = int(match[9] + match[11]); } dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - timeSetter.call(date, int(match[4]||0) - tzHour, int(match[5]||0) - tzMin, int(match[6]||0), int(match[7]||0)); + var h = int(match[4]||0) - tzHour; + var m = int(match[5]||0) - tzMin + var s = int(match[6]||0); + var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000); + timeSetter.call(date, h, m, s, ms); return date; } return string; @@ -20861,7 +22061,7 @@ var htmlAnchorDirective = valueFn({ } return function(scope, element) { - element.bind('click', function(event){ + element.on('click', function(event){ // if we have no href url, then don't navigate anywhere. if (!element.attr('href')) { event.preventDefault(); @@ -20976,6 +22176,31 @@ var htmlAnchorDirective = valueFn({ * @param {template} ngSrc any string which can contain `{{}}` markup. */ +/** + * @ngdoc directive + * @name ng.directive:ngSrcset + * @restrict A + * + * @description + * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't + * work right: The browser will fetch from the URL with the literal + * text `{{hash}}` until Angular replaces the expression inside + * `{{hash}}`. The `ngSrcset` directive solves this problem. + * + * The buggy way to write it: + *
+ * 
+ * 
+ * + * The correct way to write it: + *
+ * 
+ * 
+ * + * @element IMG + * @param {template} ngSrcset any string which can contain `{{}}` markup. + */ + /** * @ngdoc directive * @name ng.directive:ngDisabled @@ -21045,42 +22270,6 @@ var htmlAnchorDirective = valueFn({ */ -/** - * @ngdoc directive - * @name ng.directive:ngMultiple - * @restrict A - * - * @description - * The HTML specs do not require browsers to preserve the special attributes such as multiple. - * (The presence of them means true and absence means false) - * This prevents the angular compiler from correctly retrieving the binding expression. - * To solve this problem, we introduce the `ngMultiple` directive. - * - * @example - - - Check me check multiple:
- -
- - it('should toggle multiple', function() { - expect(element('.doc-example-live #select').prop('multiple')).toBeFalsy(); - input('checked').check(); - expect(element('.doc-example-live #select').prop('multiple')).toBeTruthy(); - }); - -
- * - * @element SELECT - * @param {expression} ngMultiple Angular expression that will be evaluated. - */ - - /** * @ngdoc directive * @name ng.directive:ngReadonly @@ -21180,6 +22369,9 @@ var ngAttributeAliasDirectives = {}; // boolean attrs are evaluated forEach(BOOLEAN_ATTR, function(propName, attrName) { + // binding to multiple is not supported + if (propName == "multiple") return; + var normalized = directiveNormalize('ng-' + attrName); ngAttributeAliasDirectives[normalized] = function() { return { @@ -21196,8 +22388,8 @@ forEach(BOOLEAN_ATTR, function(propName, attrName) { }); -// ng-src, ng-href are interpolated -forEach(['src', 'href'], function(attrName) { +// ng-src, ng-srcset, ng-href are interpolated +forEach(['src', 'srcset', 'href'], function(attrName) { var normalized = directiveNormalize('ng-' + attrName); ngAttributeAliasDirectives[normalized] = function() { return { @@ -21261,7 +22453,7 @@ function FormController(element, attrs) { controls = []; // init state - form.$name = attrs.name; + form.$name = attrs.name || attrs.ngForm; form.$dirty = false; form.$pristine = true; form.$valid = true; @@ -21281,6 +22473,16 @@ function FormController(element, attrs) { addClass((isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); } + /** + * @ngdoc function + * @name ng.directive:form.FormController#$addControl + * @methodOf ng.directive:form.FormController + * + * @description + * Register a control with the form. + * + * Input elements using ngModelController do this automatically when they are linked. + */ form.$addControl = function(control) { controls.push(control); @@ -21289,6 +22491,16 @@ function FormController(element, attrs) { } }; + /** + * @ngdoc function + * @name ng.directive:form.FormController#$removeControl + * @methodOf ng.directive:form.FormController + * + * @description + * Deregister a control from the form. + * + * Input elements using ngModelController do this automatically when they are destroyed. + */ form.$removeControl = function(control) { if (control.$name && form[control.$name] === control) { delete form[control.$name]; @@ -21300,6 +22512,16 @@ function FormController(element, attrs) { arrayRemove(controls, control); }; + /** + * @ngdoc function + * @name ng.directive:form.FormController#$setValidity + * @methodOf ng.directive:form.FormController + * + * @description + * Sets the validity of a form control. + * + * This method will also propagate to parent forms. + */ form.$setValidity = function(validationToken, isValid, control) { var queue = errors[validationToken]; @@ -21338,6 +22560,17 @@ function FormController(element, attrs) { } }; + /** + * @ngdoc function + * @name ng.directive:form.FormController#$setDirty + * @methodOf ng.directive:form.FormController + * + * @description + * Sets the form to a dirty state. + * + * This method can be called to add the 'ng-dirty' class and set the form to a dirty + * state (ng-dirty class). This method will also propagate to parent forms. + */ form.$setDirty = function() { element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS); form.$dirty = true; @@ -21502,7 +22735,7 @@ var formDirectiveFactory = function(isNgForm) { // unregister the preventDefault listener so that we don't not leak memory but in a // way that will achieve the prevention of the default action. - formElement.bind('$destroy', function() { + formElement.on('$destroy', function() { $timeout(function() { removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); }, 0, false); @@ -21513,13 +22746,13 @@ var formDirectiveFactory = function(isNgForm) { alias = attr.name || attr.ngForm; if (alias) { - scope[alias] = controller; + setter(scope, alias, controller, alias); } if (parentFormCtrl) { - formElement.bind('$destroy', function() { + formElement.on('$destroy', function() { parentFormCtrl.$removeControl(controller); if (alias) { - scope[alias] = undefined; + setter(scope, alias, undefined, alias); } extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards }); @@ -21537,7 +22770,7 @@ var formDirective = formDirectiveFactory(); var ngFormDirective = formDirectiveFactory(true); var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/; +var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/; var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; var inputType = { @@ -21629,8 +22862,8 @@ var inputType = { * * @param {string} ngModel Assignable angular expression to data-bind to. * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less then `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater then `min`. + * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. + * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. * @param {string=} required Sets `required` validation error key if the value is not entered. * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of @@ -21656,9 +22889,9 @@ var inputType = { Number: - + Required! - + Not valid number! value = {{value}}
myForm.input.$valid = {{myForm.input.$valid}}
@@ -21779,6 +23012,8 @@ var inputType = { * @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. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. * * @example @@ -21945,27 +23180,36 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the // input event on backspace, delete or cut if ($sniffer.hasEvent('input')) { - element.bind('input', listener); + element.on('input', listener); } else { var timeout; - element.bind('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - + var deferListener = function() { if (!timeout) { timeout = $browser.defer(function() { listener(); timeout = null; }); } + }; + + element.on('keydown', function(event) { + var key = event.keyCode; + + // ignore + // command modifiers arrows + if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; + + deferListener(); }); // if user paste into input using mouse, we need "change" event to catch it - element.bind('change', listener); + element.on('change', listener); + + // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it + if ($sniffer.hasEvent('paste')) { + element.on('paste cut', deferListener); + } } @@ -21975,7 +23219,8 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // pattern validator var pattern = attr.ngPattern, - patternValidator; + patternValidator, + match; var validate = function(regexp, value) { if (isEmpty(value) || regexp.test(value)) { @@ -21988,8 +23233,9 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { }; if (pattern) { - if (pattern.match(/^\/(.*)\/$/)) { - pattern = new RegExp(pattern.substr(1, pattern.length - 2)); + match = pattern.match(/^\/(.*)\/([gim]*)$/); + if (match) { + pattern = new RegExp(match[1], match[2]); patternValidator = function(value) { return validate(pattern, value) }; @@ -21998,7 +23244,9 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { var patternObj = scope.$eval(pattern); if (!patternObj || !patternObj.test) { - throw new Error('Expected ' + pattern + ' to be a RegExp but was ' + patternObj); + throw minErr('ngPattern')('noregexp', + 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, + patternObj, startingTag(element)); } return validate(patternObj, value); }; @@ -22145,7 +23393,7 @@ function radioInputType(scope, element, attr, ctrl) { element.attr('name', nextUid()); } - element.bind('click', function() { + element.on('click', function() { if (element[0].checked) { scope.$apply(function() { ctrl.$setViewValue(attr.value); @@ -22168,7 +23416,7 @@ function checkboxInputType(scope, element, attr, ctrl) { if (!isString(trueValue)) trueValue = true; if (!isString(falseValue)) falseValue = false; - element.bind('click', function() { + element.on('click', function() { scope.$apply(function() { ctrl.$setViewValue(element[0].checked); }); @@ -22264,7 +23512,7 @@ function checkboxInputType(scope, element, attr, ctrl) { myForm.userName.$valid = {{myForm.userName.$valid}}
myForm.userName.$error = {{myForm.userName.$error}}
myForm.lastName.$valid = {{myForm.lastName.$valid}}
- myForm.userName.$error = {{myForm.lastName.$error}}
+ myForm.lastName.$error = {{myForm.lastName.$error}}
myForm.$valid = {{myForm.$valid}}
myForm.$error.required = {{!!myForm.$error.required}}
myForm.$error.minlength = {{!!myForm.$error.minlength}}
@@ -22335,12 +23583,25 @@ var VALID_CLASS = 'ng-valid', * * @property {string} $viewValue Actual string value in the view. * @property {*} $modelValue The value in the model, that the control is bound to. - * @property {Array.} $parsers Whenever the control reads value from the DOM, it executes - * all of these functions to sanitize / convert the value as well as validate. - * - * @property {Array.} $formatters Whenever the model value changes, it executes all of - * these functions to convert the value as well as validate. + * @property {Array.} $parsers Array of functions to execute, as a pipeline, whenever + the control reads value from the DOM. Each function is called, in turn, passing the value + through to the next. Used to sanitize / convert the value as well as validation. + For validation, the parsers should update the validity state using + {@link ng.directive:ngModel.NgModelController#$setValidity $setValidity()}, + and return `undefined` for invalid values. + * + * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever + the model value changes. Each function is called, in turn, passing the value through to the + next. Used to format / convert values for display in the control and validation. + *
+ *      function formatter(value) {
+ *        if (value) {
+ *          return value.toUpperCase();
+ *        }
+ *      }
+ *      ngModel.$formatters.push(formatter);
+ *      
* @property {Object} $error An object hash with all errors as keys. * * @property {boolean} $pristine True if user has not interacted with the control yet. @@ -22355,6 +23616,10 @@ var VALID_CLASS = 'ng-valid', * specifically does not contain any logic which deals with DOM rendering or listening to * DOM events. The `NgModelController` is meant to be extended by other directives where, the * directive provides DOM manipulation and the `NgModelController` provides the data-binding. + * Note that you cannot use `NgModelController` in a directive with an isolated scope, + * as, in that case, the `ng-model` value gets put into the isolated scope and does not get + * propogated to the parent scope. + * * * This example shows how to use `NgModelController` with a custom control to achieve * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) @@ -22388,14 +23653,20 @@ var VALID_CLASS = 'ng-valid', }; // Listen for change events to enable binding - element.bind('blur keyup change', function() { + element.on('blur keyup change', function() { scope.$apply(read); }); read(); // initialize // Write data to the model function read() { - ngModel.$setViewValue(element.html()); + var html = element.html(); + // When we clear the content editable the browser leaves a
behind + // If strip-br attribute is provided then we strip this out + if( attrs.stripBr && html == '
' ) { + html = ''; + } + ngModel.$setViewValue(html); } } }; @@ -22405,6 +23676,7 @@ var VALID_CLASS = 'ng-valid',
Change me!
Required!
@@ -22441,8 +23713,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ ngModelSet = ngModelGet.assign; if (!ngModelSet) { - throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + $attr.ngModel + - ' (' + startingTag($element) + ')'); + throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", + $attr.ngModel, startingTag($element)); } /** @@ -22543,8 +23815,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * For example {@link ng.directive:input input} or * {@link ng.directive:select select} directives call it. * - * It internally calls all `formatters` and if resulted value is valid, updates the model and - * calls all registered change listeners. + * It internally calls all `$parsers` (including validators) and updates the `$modelValue` and the actual model path. + * Lastly it calls all registered change listeners. * * @param {string} value Value from the view. */ @@ -22609,8 +23881,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * @element input * * @description - * Is directive that tells Angular to do two-way data binding. It works together with `input`, - * `select`, `textarea`. You can easily write your own directives to use `ngModel` as well. + * Is a directive that tells Angular to do two-way data binding. It works together with `input`, + * `select`, `textarea` and even custom form controls that use {@link ng.directive:ngModel.NgModelController + * NgModelController} exposed by this directive. * * `ngModel` is responsible for: * @@ -22621,6 +23894,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * - setting related css class onto the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`), * - register the control with parent {@link ng.directive:form form}. * + * Note: `ngModel` will try to bind to the property given by evaluating the expression on the + * current scope. If the property doesn't already exist on this scope, it will be created + * implicitly and added to the scope. + * * For basic examples, how to use `ngModel`, see: * * - {@link ng.directive:input input} @@ -22646,7 +23923,7 @@ var ngModelDirective = function() { formCtrl.$addControl(modelCtrl); - element.bind('$destroy', function() { + element.on('$destroy', function() { formCtrl.$removeControl(modelCtrl); }); } @@ -22761,8 +24038,9 @@ var requiredDirective = function() { List: - + Required! +
names = {{names}}
myForm.namesInput.$valid = {{myForm.namesInput.$valid}}
myForm.namesInput.$error = {{myForm.namesInput.$error}}
@@ -22774,12 +24052,14 @@ var requiredDirective = function() { it('should initialize to model', function() { expect(binding('names')).toEqual('["igor","misko","vojta"]'); expect(binding('myForm.namesInput.$valid')).toEqual('true'); + expect(element('span.error').css('display')).toBe('none'); }); it('should be invalid if empty', function() { input('names').enter(''); expect(binding('names')).toEqual('[]'); expect(binding('myForm.namesInput.$valid')).toEqual('false'); + expect(element('span.error').css('display')).not().toBe('none'); });
@@ -22829,7 +24109,7 @@ var ngValueDirective = function() { } else { return function(scope, elm, attr) { scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value, false); + attr.$set('value', value); }); }; } @@ -22849,10 +24129,9 @@ var ngValueDirective = function() { * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like * `{{ expression }}` which is similar but less verbose. * - * Once scenario in which the use of `ngBind` is preferred over `{{ expression }}` binding is when - * it's desirable to put bindings into template that is momentarily displayed by the browser in its - * raw state before Angular compiles it. Since `ngBind` is an element attribute, it makes the - * bindings invisible to the user while the page is loading. + * It is preferrable to use `ngBind` instead of `{{ expression }}` when a template is momentarily + * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an + * element attribute, it makes the bindings invisible to the user while the page is loading. * * An alternative solution to this problem would be using the * {@link ng.directive:ngCloak ngCloak} directive. @@ -22898,10 +24177,11 @@ var ngBindDirective = ngDirective(function(scope, element, attr) { * * @description * The `ngBindTemplate` directive specifies that the element - * text should be replaced with the template in ngBindTemplate. - * Unlike ngBind the ngBindTemplate can contain multiple `{{` `}}` - * expressions. (This is required since some HTML elements - * can not have SPAN elements such as TITLE, or OPTION to name a few.) + * text content should be replaced with the interpolation of the template + * in the `ngBindTemplate` attribute. + * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` + * expressions. This directive is needed since some HTML elements + * (such as TITLE and OPTION) cannot contain SPAN elements. * * @element ANY * @param {string} ngBindTemplate template of form @@ -22953,23 +24233,27 @@ var ngBindTemplateDirective = ['$interpolate', function($interpolate) { /** * @ngdoc directive - * @name ng.directive:ngBindHtmlUnsafe + * @name ng.directive:ngBindHtml * * @description * Creates a binding that will innerHTML the result of evaluating the `expression` into the current - * element. *The innerHTML-ed content will not be sanitized!* You should use this directive only if - * {@link ngSanitize.directive:ngBindHtml ngBindHtml} directive is too - * restrictive and when you absolutely trust the source of the content you are binding to. + * 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.) 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 + * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. * - * See {@link ngSanitize.$sanitize $sanitize} docs for examples. + * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you + * will have an exception (instead of an exploit.) * * @element ANY - * @param {expression} ngBindHtmlUnsafe {@link guide/expression Expression} to evaluate. + * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. */ -var ngBindHtmlUnsafeDirective = [function() { +var ngBindHtmlDirective = ['$sce', function($sce) { return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtmlUnsafe); - scope.$watch(attr.ngBindHtmlUnsafe, function ngBindHtmlUnsafeWatchAction(value) { + element.addClass('ng-binding').data('$binding', attr.ngBindHtml); + scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function ngBindHtmlWatchAction(value) { element.html(value || ''); }); }; @@ -22977,59 +24261,71 @@ var ngBindHtmlUnsafeDirective = [function() { function classDirective(name, selector) { name = 'ngClass' + name; - return ngDirective(function(scope, element, attr) { - var oldVal = undefined; + return function() { + return { + restrict: 'AC', + link: function(scope, element, attr) { + var oldVal = undefined; - scope.$watch(attr[name], ngClassWatchAction, true); + scope.$watch(attr[name], ngClassWatchAction, true); - attr.$observe('class', function(value) { - var ngClass = scope.$eval(attr[name]); - ngClassWatchAction(ngClass, ngClass); - }); + attr.$observe('class', function(value) { + ngClassWatchAction(scope.$eval(attr[name])); + }); - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - var mod = $index % 2; - if (mod !== old$index % 2) { - if (mod == selector) { - addClass(scope.$eval(attr[name])); - } else { - removeClass(scope.$eval(attr[name])); + if (name !== 'ngClass') { + scope.$watch('$index', function($index, old$index) { + var mod = $index & 1; + if (mod !== old$index & 1) { + if (mod === selector) { + addClass(scope.$eval(attr[name])); + } else { + removeClass(scope.$eval(attr[name])); + } + } + }); + } + + + function ngClassWatchAction(newVal) { + if (selector === true || scope.$index % 2 === selector) { + if (oldVal && !equals(newVal,oldVal)) { + removeClass(oldVal); + } + addClass(newVal); } + oldVal = copy(newVal); } - }); - } - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - if (oldVal && (newVal !== oldVal)) { - removeClass(oldVal); + function removeClass(classVal) { + attr.$removeClass(flattenClasses(classVal)); } - addClass(newVal); - } - oldVal = newVal; - } - function removeClass(classVal) { - if (isObject(classVal) && !isArray(classVal)) { - classVal = map(classVal, function(v, k) { if (v) return k }); - } - element.removeClass(isArray(classVal) ? classVal.join(' ') : classVal); - } + function addClass(classVal) { + attr.$addClass(flattenClasses(classVal)); + } + function flattenClasses(classVal) { + if(isArray(classVal)) { + return classVal.join(' '); + } else if (isObject(classVal)) { + var classes = [], i = 0; + forEach(classVal, function(v, k) { + if (v) { + classes.push(k); + } + }); + return classes.join(' '); + } - function addClass(classVal) { - if (isObject(classVal) && !isArray(classVal)) { - classVal = map(classVal, function(v, k) { if (v) return k }); + return classVal; + }; } - if (classVal) { - element.addClass(isArray(classVal) ? classVal.join(' ') : classVal); - } - } - }); + }; + }; } /** @@ -23037,21 +24333,86 @@ function classDirective(name, selector) { * @name ng.directive:ngClass * * @description - * The `ngClass` allows you to set CSS class on HTML element dynamically by databinding an - * expression that represents all classes to be added. + * The `ngClass` allows you to set CSS classes on HTML an element, dynamically, by databinding + * an expression that represents all classes to be added. * * The directive won't add duplicate classes if a particular class was already set. * * When the expression changes, the previously added classes are removed and only then the * new classes are added. * + * @animations + * add - happens just before the class is applied to the element + * remove - happens just before the class is removed from the element + * * @element ANY * @param {expression} ngClass {@link guide/expression Expression} to eval. The result * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. + * names, an array, or a map of class names to boolean values. In the case of a map, the + * names of the properties whose values are truthy will be added as css classes to the + * element. * - * @example + * @example Example that demostrates basic bindings via ngClass directive. + +

Map Syntax Example

+ bold + strike + red +
+

Using String Syntax

+ +
+

Using Array Syntax

+
+
+
+
+ + .strike { + text-decoration: line-through; + } + .bold { + font-weight: bold; + } + .red { + color: red; + } + + + it('should let you toggle the class', function() { + + expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/bold/); + expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/red/); + + input('bold').check(); + expect(element('.doc-example-live p:first').prop('className')).toMatch(/bold/); + + input('red').check(); + expect(element('.doc-example-live p:first').prop('className')).toMatch(/red/); + }); + + it('should let you toggle string example', function() { + expect(element('.doc-example-live p:nth-of-type(2)').prop('className')).toBe(''); + input('style').enter('red'); + expect(element('.doc-example-live p:nth-of-type(2)').prop('className')).toBe('red'); + }); + + it('array example should have 3 classes', function() { + expect(element('.doc-example-live p:last').prop('className')).toBe(''); + input('style1').enter('bold'); + input('style2').enter('strike'); + input('style3').enter('red'); + expect(element('.doc-example-live p:last').prop('className')).toBe('bold strike red'); + }); + +
+ + ## Animations + + Example that demostrates how addition and removal of classes can be animated. + + @@ -23059,8 +24420,22 @@ function classDirective(name, selector) { Sample Text - .my-class { + .my-class-add, .my-class-remove { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + } + + .my-class, + .my-class-add.my-class-add-active { color: red; + font-size:3em; + } + + .my-class-remove.my-class-remove-active { + font-size:1.0em; + color:black; } @@ -23135,7 +24510,7 @@ var ngClassOddDirective = classDirective('Odd', 0); * @name ng.directive:ngClassEven * * @description - * The `ngClassOdd` and `ngClassEven` works exactly as + * The `ngClassOdd` and `ngClassEven` directives work exactly as * {@link ng.directive:ngClass ngClass}, except it works in * conjunction with `ngRepeat` and takes affect only on odd (even) rows. * @@ -23194,7 +24569,7 @@ var ngClassEvenDirective = classDirective('Even', 1); * *
  * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
- *   display: none;
+ *   display: none !important;
  * }
  * 
* @@ -23252,14 +24627,14 @@ var ngCloakDirective = ngDirective({ * * Controller — The `ngController` directive specifies a Controller class; the class has * methods that typically express the business logic behind the application. * - * Note that an alternative way to define controllers is via the `{@link ng.$route}` - * service. + * Note that an alternative way to define controllers is via the {@link ngRoute.$route $route} service. * * @element ANY * @scope * @param {expression} ngController Name of a globally accessible constructor function or an * {@link guide/expression expression} that on the current scope evaluates to a - * constructor function. + * constructor function. The controller instance can further be published into the scope + * by adding `as localName` the controller name attribute. * * @example * Here is a simple form for editing user contact information. Adding, removing, clearing, and @@ -23267,11 +24642,75 @@ var ngCloakDirective = ngDirective({ * easily be called from the angular markup. Notice that the scope becomes the `this` for the * controller's instance. This allows for easy access to the view data from the controller. Also * notice that any changes to the data are automatically reflected in the View without the need - * for a manual update. + * for a manual update. The example is included in two different declaration styles based on + * your style preferences. +
+ Name: + [ greet ]
+ Contact: +
    +
  • + + + [ clear + | X ] +
  • +
  • [ add ]
  • +
+
+
+ + it('should check controller as', function() { + expect(element('#ctrl-as-exmpl>:input').val()).toBe('John Smith'); + expect(element('#ctrl-as-exmpl li:nth-child(1) input').val()) + .toBe('408 555 1212'); + expect(element('#ctrl-as-exmpl li:nth-child(2) input').val()) + .toBe('john.smith@example.org'); + + element('#ctrl-as-exmpl li:first a:contains("clear")').click(); + expect(element('#ctrl-as-exmpl li:first input').val()).toBe(''); + + element('#ctrl-as-exmpl li:last a:contains("add")').click(); + expect(element('#ctrl-as-exmpl li:nth-child(3) input').val()) + .toBe('yourname@example.org'); + }); + +
+ + + -
+
Name: [ greet ]
Contact: @@ -23316,21 +24755,22 @@ var ngCloakDirective = ngDirective({ it('should check controller', function() { - expect(element('.doc-example-live div>:input').val()).toBe('John Smith'); - expect(element('.doc-example-live li:nth-child(1) input').val()) + expect(element('#ctrl-exmpl>:input').val()).toBe('John Smith'); + expect(element('#ctrl-exmpl li:nth-child(1) input').val()) .toBe('408 555 1212'); - expect(element('.doc-example-live li:nth-child(2) input').val()) + expect(element('#ctrl-exmpl li:nth-child(2) input').val()) .toBe('john.smith@example.org'); - element('.doc-example-live li:first a:contains("clear")').click(); - expect(element('.doc-example-live li:first input').val()).toBe(''); + element('#ctrl-exmpl li:first a:contains("clear")').click(); + expect(element('#ctrl-exmpl li:first input').val()).toBe(''); - element('.doc-example-live li:last a:contains("add")').click(); - expect(element('.doc-example-live li:nth-child(3) input').val()) + element('#ctrl-exmpl li:last a:contains("add")').click(); + expect(element('#ctrl-exmpl li:nth-child(3) input').val()) .toBe('yourname@example.org'); }); + */ var ngControllerDirective = [function() { return { @@ -23344,16 +24784,32 @@ var ngControllerDirective = [function() { * @name ng.directive:ngCsp * @priority 1000 * + * @element html * @description * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * This directive should be used on the root element of the application (typically the `` - * element or other element with the {@link ng.directive:ngApp ngApp} - * directive). - * - * If enabled the performance of template expression evaluator will suffer slightly, so don't enable - * this mode unless you need it. - * - * @element html + * + * This is necessary when developing things like Google Chrome Extensions. + * + * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). + * For us to be compatible, we just need to implement the "getterFn" in $parse without violating + * any of these restrictions. + * + * AngularJS uses `Function(string)` generated functions as a speed optimization. By applying `ngCsp` + * it is be possible to opt into the CSP compatible mode. When this mode is on AngularJS will + * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will + * be raised. + * + * In order to use this feature put `ngCsp` directive on the root element of the application. + * + * @example + * This example shows how to apply the `ngCsp` directive to the `html` tag. +
+     
+     
+     ...
+     ...
+     
+   
*/ var ngCspDirective = ['$sniffer', function($sniffer) { @@ -23402,13 +24858,13 @@ var ngCspDirective = ['$sniffer', function($sniffer) { */ var ngEventDirectives = {}; forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress'.split(' '), + 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur'.split(' '), function(name) { var directiveName = directiveNormalize('ng-' + name); ngEventDirectives[directiveName] = ['$parse', function($parse) { return function(scope, element, attr) { var fn = $parse(attr[directiveName]); - element.bind(lowercase(name), function(event) { + element.on(lowercase(name), function(event) { scope.$apply(function() { fn(scope, {$event:event}); }); @@ -23585,10 +25041,11 @@ forEach( * Enables binding angular expressions to onsubmit events. * * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page). + * server and reloading the current page) **but only if the form does not contain an `action` + * attribute**. * * @element form - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. + * @param {expression} ngSubmit {@link guide/expression Expression} to eval. (Event object is available as `$event`) * * @example @@ -23628,11 +25085,144 @@ forEach( */ -var ngSubmitDirective = ngDirective(function(scope, element, attrs) { - element.bind('submit', function() { - scope.$apply(attrs.ngSubmit); - }); -}); + +/** + * @ngdoc directive + * @name ng.directive:ngFocus + * + * @description + * Specify custom behavior on focus event. + * + * @element window, input, select, textarea, a + * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon + * focus. (Event object is available as `$event`) + * + * @example + * See {@link ng.directive:ngClick ngClick} + */ + +/** + * @ngdoc directive + * @name ng.directive:ngBlur + * + * @description + * Specify custom behavior on blur event. + * + * @element window, input, select, textarea, a + * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon + * blur. (Event object is available as `$event`) + * + * @example + * See {@link ng.directive:ngClick ngClick} + */ + +/** + * @ngdoc directive + * @name ng.directive:ngIf + * @restrict A + * + * @description + * The `ngIf` directive removes and recreates a portion of the DOM tree (HTML) + * conditionally based on **"falsy"** and **"truthy"** values, respectively, evaluated within + * an {expression}. In other words, if the expression assigned to **ngIf evaluates to a false + * value** then **the element is removed from the DOM** and **if true** then **a clone of the + * element is reinserted into the DOM**. + * + * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the + * element in the DOM rather than changing its visibility via the `display` css property. A common + * case when this difference is significant is when using css selectors that rely on an element's + * position within the DOM (HTML), such as the `:first-child` or `:last-child` pseudo-classes. + * + * Note that **when an element is removed using ngIf its scope is destroyed** and **a new scope + * is created when the element is restored**. The scope created within `ngIf` inherits from + * its parent scope using + * {@link https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance prototypal inheritance}. + * An important implication of this is if `ngModel` is used within `ngIf` to bind to + * a javascript primitive defined in the parent scope. In this case any modifications made to the + * variable within the child scope will override (hide) the value in the parent scope. + * + * Also, `ngIf` recreates elements using their compiled state. An example scenario of this behavior + * is if an element's class attribute is directly modified after it's compiled, using something like + * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element + * the added class will be lost because the original compiled state is used to regenerate the element. + * + * Additionally, you can provide animations via the ngAnimate module to animate the **enter** + * and **leave** effects. + * + * @animations + * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container + * leave - happens just before the ngIf contents are removed from the DOM + * + * @element ANY + * @scope + * @param {expression} ngIf If the {@link guide/expression expression} is falsy then + * the element is removed from the DOM tree (HTML). + * + * @example + + + Click me:
+ Show when checked: + + I'm removed when the checkbox is unchecked. + +
+ + .animate-if { + background:white; + border:1px solid black; + padding:10px; + } + + .animate-if.ng-enter, .animate-if.ng-leave { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + } + + .animate-if.ng-enter, + .animate-if.ng-leave.ng-leave-active { + opacity:0; + } + + .animate-if.ng-enter.ng-enter-active, + .animate-if.ng-leave { + opacity:1; + } + +
+ */ +var ngIfDirective = ['$animate', function($animate) { + return { + transclude: 'element', + priority: 1000, + terminal: true, + restrict: 'A', + compile: function (element, attr, transclude) { + return function ($scope, $element, $attr) { + var childElement, childScope; + $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { + if (childElement) { + $animate.leave(childElement); + childElement = undefined; + } + if (childScope) { + childScope.$destroy(); + childScope = undefined; + } + if (toBoolean(value)) { + childScope = $scope.$new(); + transclude(childScope, function (clone) { + childElement = clone; + $animate.enter(clone, $element.parent(), $element); + }); + } + }); + } + } + } +}]; /** * @ngdoc directive @@ -23642,16 +25232,26 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { * @description * Fetches, compiles and includes an external HTML fragment. * - * Keep in mind that Same Origin Policy applies to included resources - * (e.g. ngInclude won't work for cross-domain requests on all browsers and for - * file:// access on some browsers). + * Keep in mind that: * - * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter** - * and **leave** effects. + * - by default, the template URL is restricted to the same domain and protocol as the + * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl} on it. To load templates from other domains and/or protocols, + * you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or + * {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. Refer Angular's {@link + * ng.$sce Strict Contextual Escaping}. + * - in addition, the browser's + * {@link https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest + * Same Origin Policy} and {@link http://www.w3.org/TR/cors/ Cross-Origin Resource Sharing + * (CORS)} policy apply that may further restrict whether the template is successfully loaded. + * (e.g. ngInclude won't work for cross-domain requests on all browsers and for `file://` + * access on some browsers) * * @animations - * enter - happens just after the ngInclude contents change and a new DOM element is created and injected into the ngInclude container - * leave - happens just after the ngInclude contents change and just before the former contents are removed from the DOM + * enter - animation is used to bring new content into the browser. + * leave - animation is used to animate existing content away. + * + * The enter and leave animation occur concurrently. * * @scope * @@ -23667,7 +25267,7 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { * - Otherwise enable scrolling only if the expression evaluates to truthy value. * * @example - +
url of the template: {{template.url}}
-
+
+
+
@@ -23689,17 +25289,27 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { } -
Content of template1.html
+ Content of template1.html
-
Content of template2.html
+ Content of template2.html
- .example-leave-setup, - .example-enter-setup { + .example-animate-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .example-animate-container > div { + padding:10px; + } + + .include-example.ng-enter, .include-example.ng-leave { -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; @@ -23708,24 +25318,21 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { left:0; right:0; bottom:0; - } - - .example-animate-container > * { display:block; padding:10px; } - .example-enter-setup { + .include-example.ng-enter { top:-50px; } - .example-enter-setup.example-enter-start { + .include-example.ng-enter.ng-enter-active { top:0; } - .example-leave-setup { + .include-example.ng-leave { top:0; } - .example-leave-setup.example-leave-start { + .include-example.ng-leave.ng-leave-active { top:50px; } @@ -23741,13 +25348,23 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { }); it('should change to blank', function() { select('template').option(''); - expect(element('.doc-example-live [ng-include]').text()).toEqual(''); + expect(element('.doc-example-live [ng-include]')).toBe(undefined); });
*/ +/** + * @ngdoc event + * @name ng.directive:ngInclude#$includeContentRequested + * @eventOf ng.directive:ngInclude + * @eventType emit on the scope ngInclude was declared in + * @description + * Emitted every time the ngInclude content is requested. + */ + + /** * @ngdoc event * @name ng.directive:ngInclude#$includeContentLoaded @@ -23756,56 +25373,67 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { * @description * Emitted every time the ngInclude content is reloaded. */ -var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animator', - function($http, $templateCache, $anchorScroll, $compile, $animator) { +var NG_INCLUDE_PRIORITY = 500; +var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animate', '$sce', + function($http, $templateCache, $anchorScroll, $compile, $animate, $sce) { return { restrict: 'ECA', terminal: true, + priority: NG_INCLUDE_PRIORITY, compile: function(element, attr) { var srcExp = attr.ngInclude || attr.src, onloadExp = attr.onload || '', autoScrollExp = attr.autoscroll; - return function(scope, element, attr) { - var animate = $animator(scope, attr); - var changeCounter = 0, - childScope; + element.html(''); + var anchor = jqLite(document.createComment(' ngInclude: ' + srcExp + ' ')); + element.replaceWith(anchor); - var clearContent = function() { - if (childScope) { - childScope.$destroy(); - childScope = null; + return function(scope) { + var changeCounter = 0, + currentScope, + currentElement; + + var cleanupLastIncludeContent = function() { + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + if(currentElement) { + $animate.leave(currentElement); + currentElement = null; } - animate.leave(element.contents(), element); }; - scope.$watch(srcExp, function ngIncludeWatchAction(src) { + scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { var thisChangeId = ++changeCounter; if (src) { $http.get(src, {cache: $templateCache}).success(function(response) { if (thisChangeId !== changeCounter) return; + var newScope = scope.$new(); - if (childScope) childScope.$destroy(); - childScope = scope.$new(); - animate.leave(element.contents(), element); + cleanupLastIncludeContent(); - var contents = jqLite('
').html(response).contents(); + currentScope = newScope; + currentElement = element.clone(); + currentElement.html(response); + $animate.enter(currentElement, null, anchor); - animate.enter(contents, element); - $compile(contents)(childScope); + $compile(currentElement, false, NG_INCLUDE_PRIORITY - 1)(currentScope); if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { $anchorScroll(); } - childScope.$emit('$includeContentLoaded'); + currentScope.$emit('$includeContentLoaded'); scope.$eval(onloadExp); }).error(function() { - if (thisChangeId === changeCounter) clearContent(); + if (thisChangeId === changeCounter) cleanupLastIncludeContent(); }); + scope.$emit('$includeContentRequested'); } else { - clearContent(); + cleanupLastIncludeContent(); } }); }; @@ -23889,7 +25517,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * @description * # Overview * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js and the rules can be overridden + * These rules are bundled with angular.js, but can be overridden * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive * by specifying the mappings between * {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html @@ -23902,8 +25530,8 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * * While a plural category may match many numbers (for example, in en-US locale, "other" can match * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. You will see the use of plural categories - * and explicit number rules throughout later parts of this documentation. + * explicit number rule for "3" matches the number 3. There are examples of plural categories + * and explicit number rules throughout the rest of this documentation. * * # Configuring ngPluralize * You configure ngPluralize by providing 2 attributes: `count` and `when`. @@ -23913,8 +25541,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * Angular expression}; these are evaluated on the current scope for its bound value. * * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object so that Angular - * can interpret it correctly. + * string to be displayed. The value of the attribute should be a JSON object. * * The following example shows how to configure ngPluralize: * @@ -24056,13 +25683,20 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp restrict: 'EA', link: function(scope, element, attr) { var numberExp = attr.count, - whenExp = element.attr(attr.$attr.when), // this is because we have {{}} in attrs + whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs offset = attr.offset || 0, - whens = scope.$eval(whenExp), + whens = scope.$eval(whenExp) || {}, whensExpFns = {}, startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(); + endSymbol = $interpolate.endSymbol(), + isWhen = /^when(Minus)?(.+)$/; + forEach(attr, function(expression, attributeName) { + if (isWhen.test(attributeName)) { + whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = + element.attr(attr.$attr[attributeName]); + } + }); forEach(whens, function(expression, key) { whensExpFns[key] = $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + @@ -24075,7 +25709,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp 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 (!whens[value]) value = $locale.pluralCat(value - offset); + if (!(value in whens)) value = $locale.pluralCat(value - offset); return whensExpFns[value](scope, element, true); } else { return ''; @@ -24098,13 +25732,59 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * * Special properties are exposed on the local scope of each template instance, including: * - * * `$index` – `{number}` – iterator offset of the repeated element (0..length-1) - * * `$first` – `{boolean}` – true if the repeated element is first in the iterator. - * * `$middle` – `{boolean}` – true if the repeated element is between the first and last in the iterator. - * * `$last` – `{boolean}` – true if the repeated element is last in the iterator. + * | Variable | Type | Details | + * |-----------|-----------------|-----------------------------------------------------------------------------| + * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | + * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | + * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | + * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | + * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | + * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | * - * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter**, - * **leave** and **move** effects. + * + * # Special repeat start and end points + * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending + * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. + * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) + * up to and including the ending HTML tag where **ng-repeat-end** is placed. + * + * The example below makes use of this feature: + *
+ *   
+ * Header {{ item }} + *
+ *
+ * Body {{ item }} + *
+ *
+ * Footer {{ item }} + *
+ *
+ * + * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: + *
+ *   
+ * Header A + *
+ *
+ * Body A + *
+ *
+ * Footer A + *
+ *
+ * Header B + *
+ *
+ * Body B + *
+ *
+ * Footer B + *
+ *
+ * + * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such + * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). * * @animations * enter - when a new item is added to the list or when an item is revealed after a filter @@ -24120,7 +25800,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * * `variable in expression` – where variable is the user defined loop variable and `expression` * is a scope expression giving the collection to enumerate. * - * For example: `track in cd.tracks`. + * For example: `album in artist.albums`. * * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, * and `expression` is the scope expression giving the collection to enumerate. @@ -24128,10 +25808,11 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * For example: `(name, age) in {'adam':10, 'amalie':12}`. * * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tractking function + * which can be used to associate the objects in the collection with the DOM elements. If no tracking function * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more then one tractking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) + * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are + * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, + * before specifying a tracking expression. * * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements * will be associated by item identity in the array. @@ -24141,10 +25822,13 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * with the corresponding item in the array by identity. Moving the same object in array would move the DOM * element in the same way ian the DOM. * - * For example: `item in items track by item.id` Is a typical pattern when the items come from the database. In this + * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this * case the object identity does not matter. Two objects are considered equivalent as long as their `id` * property is same. * + * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter + * to items in conjunction with a tracking expression. + * * @example * This example initializes the scope to a list of names and * then uses `ngRepeat` to display every person: @@ -24164,47 +25848,62 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp ]"> I have {{friends.length}} friends. They are: -
    -
  • +
      +
    • [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
- .example-repeat-enter-setup, - .example-repeat-leave-setup, - .example-repeat-move-setup { + .example-animate-container { + background:white; + border:1px solid black; + list-style:none; + margin:0; + padding:0; + } + + .example-animate-container > li { + padding:10px; + list-style:none; + } + + .animate-repeat.ng-enter, + .animate-repeat.ng-leave, + .animate-repeat.ng-move { -webkit-transition:all linear 0.5s; -moz-transition:all linear 0.5s; - -ms-transition:all linear 0.5s; -o-transition:all linear 0.5s; transition:all linear 0.5s; } - .example-repeat-enter-setup { + .animate-repeat.ng-enter { line-height:0; opacity:0; + padding-top:0; + padding-bottom:0; } - .example-repeat-enter-setup.example-repeat-enter-start { + .animate-repeat.ng-enter.ng-enter-active { line-height:20px; opacity:1; + padding:10px; } - .example-repeat-leave-setup { + .animate-repeat.ng-leave { opacity:1; line-height:20px; + padding:10px; } - .example-repeat-leave-setup.example-repeat-leave-start { + .animate-repeat.ng-leave.ng-leave-active { opacity:0; line-height:0; + padding-top:0; + padding-bottom:0; } - .example-repeat-move-setup { } - .example-repeat-move-setup.example-repeat-move-start { } + .animate-repeat.ng-move { } + .animate-repeat.ng-move.ng-move-active { } it('should render initial data set', function() { @@ -24229,23 +25928,23 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
*/ -var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { +var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { var NG_REMOVED = '$$NG_REMOVED'; + var ngRepeatMinErr = minErr('ngRepeat'); return { transclude: 'element', priority: 1000, terminal: true, compile: function(element, attr, linker) { return function($scope, $element, $attr){ - var animate = $animator($scope, $attr); var expression = $attr.ngRepeat; var match = expression.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/), - trackByExp, hashExpFn, trackByIdFn, lhs, rhs, valueIdentifier, keyIdentifier, + trackByExp, trackByExpGetter, trackByIdFn, trackByIdArrayFn, trackByIdObjFn, lhs, rhs, valueIdentifier, keyIdentifier, hashFnLocals = {$id: hashKey}; if (!match) { - throw Error("Expected ngRepeat in form of '_item_ in _collection_[ track by _id_]' but got '" + - expression + "'."); + throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", + expression); } lhs = match[1]; @@ -24253,24 +25952,27 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { trackByExp = match[4]; if (trackByExp) { - hashExpFn = $parse(trackByExp); + trackByExpGetter = $parse(trackByExp); trackByIdFn = function(key, value, index) { // assign key, value, and $index to the locals so that they can be used in hash functions if (keyIdentifier) hashFnLocals[keyIdentifier] = key; hashFnLocals[valueIdentifier] = value; hashFnLocals.$index = index; - return hashExpFn($scope, hashFnLocals); + return trackByExpGetter($scope, hashFnLocals); }; } else { - trackByIdFn = function(key, value) { + trackByIdArrayFn = function(key, value) { return hashKey(value); } + trackByIdObjFn = function(key) { + return key; + } } match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); if (!match) { - throw Error("'item' in 'item in collection' should be identifier or (key, value) but got '" + - lhs + "'."); + throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", + lhs); } valueIdentifier = match[3] || match[1]; keyIdentifier = match[2]; @@ -24285,8 +25987,8 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { //watch props $scope.$watchCollection(rhs, function ngRepeatAction(collection){ var index, length, - cursor = $element, // current position of the node - nextCursor, + previousNode = $element[0], // current position of the node + nextNode, // Same as lastBlockMap but it has the current state. It will become the // lastBlockMap on the next iteration. nextBlockMap = {}, @@ -24299,9 +26001,11 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { nextBlockOrder = []; - if (isArray(collection)) { + if (isArrayLike(collection)) { collectionKeys = collection; + trackByIdFn = trackByIdFn || trackByIdArrayFn; } else { + trackByIdFn = trackByIdFn || trackByIdObjFn; // if object, extract keys, sort them and use to determine order of iteration over obj props collectionKeys = []; for (key in collection) { @@ -24320,20 +26024,23 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { key = (collection === collectionKeys) ? index : collectionKeys[index]; value = collection[key]; trackById = trackByIdFn(key, value, index); - if((block = lastBlockMap[trackById])) { + if(lastBlockMap.hasOwnProperty(trackById)) { + block = lastBlockMap[trackById] delete lastBlockMap[trackById]; nextBlockMap[trackById] = block; nextBlockOrder[index] = block; } else if (nextBlockMap.hasOwnProperty(trackById)) { // restore lastBlockMap forEach(nextBlockOrder, function(block) { - if (block && block.element) lastBlockMap[block.id] = block; + if (block && block.startNode) lastBlockMap[block.id] = block; }); // This is a duplicate and we need to throw an error - throw new Error('Duplicates in a repeater are not allowed. Repeater: ' + expression); + throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", + expression, trackById); } else { // new never before seen block nextBlockOrder[index] = { id: trackById }; + nextBlockMap[trackById] = false; } } @@ -24341,8 +26048,8 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { for (key in lastBlockMap) { if (lastBlockMap.hasOwnProperty(key)) { block = lastBlockMap[key]; - animate.leave(block.element); - block.element[0][NG_REMOVED] = true; + $animate.leave(block.elements); + forEach(block.elements, function(element) { element[NG_REMOVED] = true}); block.scope.$destroy(); } } @@ -24353,24 +26060,23 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { value = collection[key]; block = nextBlockOrder[index]; - if (block.element) { + if (block.startNode) { // if we have already seen this object, then we need to reuse the // associated scope/element childScope = block.scope; - nextCursor = cursor[0]; + nextNode = previousNode; do { - nextCursor = nextCursor.nextSibling; - } while(nextCursor && nextCursor[NG_REMOVED]); + nextNode = nextNode.nextSibling; + } while(nextNode && nextNode[NG_REMOVED]); - if (block.element[0] == nextCursor) { + if (block.startNode == nextNode) { // do nothing - cursor = block.element; } else { // existing item which got moved - animate.move(block.element, null, cursor); - cursor = block.element; + $animate.move(block.elements, null, jqLite(previousNode)); } + previousNode = block.endNode; } else { // new item which we don't know about childScope = $scope.$new(); @@ -24382,13 +26088,16 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { childScope.$first = (index === 0); childScope.$last = (index === (arrayLength - 1)); childScope.$middle = !(childScope.$first || childScope.$last); + childScope.$odd = !(childScope.$even = index%2==0); - if (!block.element) { + if (!block.startNode) { linker(childScope, function(clone) { - animate.enter(clone, null, cursor); - cursor = clone; + $animate.enter(clone, null, jqLite(previousNode)); + previousNode = clone; block.scope = childScope; - block.element = clone; + block.startNode = clone[0]; + block.elements = clone; + block.endNode = clone[clone.length - 1]; nextBlockMap[block.id] = block; }); } @@ -24405,19 +26114,77 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { * @name ng.directive:ngShow * * @description - * The `ngShow` and `ngHide` directives show or hide a portion of the DOM tree (HTML) - * conditionally based on **"truthy"** values evaluated within an {expression}. In other - * words, if the expression assigned to **ngShow evaluates to a true value** then **the element is set to visible** - * (via `display:block` in css) and **if false** then **the element is set to hidden** (so display:none). - * With ngHide this is the reverse whereas true values cause the element itself to become - * hidden. + * The `ngShow` directive shows and hides the given HTML element conditionally based on the expression + * provided to the ngShow attribute. The show and hide mechanism is a achieved by removing and adding + * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is a predefined CSS class present + * in AngularJS which sets the display style to none (using an !important flag). * - * Additionally, you can also provide animations via the ngAnimate attribute to animate the **show** - * and **hide** effects. + *
+ * 
+ * 
+ * + * + *
+ *
+ * + * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute + * on the element causing it to become hidden. When true, the ng-hide CSS class is removed + * from the element causing the element not to appear hidden. + * + * ## Why is !important used? + * + * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector + * can be easily overridden by heavier selectors. For example, something as simple + * as changing the display style on a HTML list item would make hidden elements appear visible. + * This also becomes a bigger issue when dealing with CSS frameworks. + * + * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector + * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the + * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. + * + * ### Overriding .ng-hide + * + * 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: + *
+ * .ng-hide {
+ *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...
+ *   display:block!important;
+ *
+ *   //this is just another form of hiding an element
+ *   position:absolute;
+ *   top:-9999px;
+ *   left:-9999px;
+ * }
+ * 
+ * + * Just remember to include the important flag so the CSS override will function. + * + * ## A note about animations with ngShow + * + * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression + * is true and false. This system works similar to the animation system present with ngClass, however, the + * only difference is that you must also include the !important flag to override the display property so + * that you can perform an animation when the element is hidden during the time of the animation. + * + *
+ * //
+ * //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;
+ *   display:block!important;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * 
* * @animations - * show - happens after the ngShow expression evaluates to a truthy value and the contents are set to visible - * hide - happens before the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden + * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible + * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden * * @element ANY * @param {expression} ngShow If the {@link guide/expression expression} is truthy @@ -24429,36 +26196,36 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { Click me:
Show: - +
I show up when your checkbox is checked. - +
Hide: - +
I hide when your checkbox is checked. - +
- .example-show-setup, .example-hide-setup { + .animate-show.ng-hide-add, + .animate-show.ng-hide-remove { -webkit-transition:all linear 0.5s; -moz-transition:all linear 0.5s; - -ms-transition:all linear 0.5s; -o-transition:all linear 0.5s; transition:all linear 0.5s; + display:block!important; } - .example-show-setup { + .animate-show.ng-hide-add.ng-hide-add-active, + .animate-show.ng-hide-remove { line-height:0; opacity:0; padding:0 10px; } - .example-show-start.example-show-start { + + .animate-show.ng-hide-add, + .animate-show.ng-hide-remove.ng-hide-remove-active { line-height:20px; opacity:1; padding:10px; @@ -24466,19 +26233,6 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { background:white; } - .example-hide-setup { - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - .example-hide-start.example-hide-start { - line-height:0; - opacity:0; - padding:0 10px; - } - .check-element { padding:10px; border:1px solid black; @@ -24498,12 +26252,10 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { */ -//TODO(misko): refactor to remove element from the DOM -var ngShowDirective = ['$animator', function($animator) { +var ngShowDirective = ['$animate', function($animate) { return function(scope, element, attr) { - var animate = $animator(scope, attr); scope.$watch(attr.ngShow, function ngShowWatchAction(value){ - animate[toBoolean(value) ? 'show' : 'hide'](element); + $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); }); }; }]; @@ -24514,19 +26266,77 @@ var ngShowDirective = ['$animator', function($animator) { * @name ng.directive:ngHide * * @description - * The `ngShow` and `ngHide` directives show or hide a portion of the DOM tree (HTML) - * conditionally based on **"truthy"** values evaluated within an {expression}. In other - * words, if the expression assigned to **ngShow evaluates to a true value** then **the element is set to visible** - * (via `display:block` in css) and **if false** then **the element is set to hidden** (so display:none). - * With ngHide this is the reverse whereas true values cause the element itself to become - * hidden. + * The `ngHide` directive shows and hides the given HTML element conditionally based on the expression + * provided to the ngHide attribute. The show and hide mechanism is a achieved by removing and adding + * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is a predefined CSS class present + * in AngularJS which sets the display style to none (using an !important flag). * - * Additionally, you can also provide animations via the ngAnimate attribute to animate the **show** - * and **hide** effects. + *
+ * 
+ * 
+ * + * + *
+ *
+ * + * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute + * on the element causing it to become hidden. When false, the ng-hide CSS class is removed + * from the element causing the element not to appear hidden. + * + * ## Why is !important used? + * + * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector + * can be easily overridden by heavier selectors. For example, something as simple + * as changing the display style on a HTML list item would make hidden elements appear visible. + * This also becomes a bigger issue when dealing with CSS frameworks. + * + * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector + * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the + * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. + * + * ### Overriding .ng-hide + * + * 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: + *
+ * .ng-hide {
+ *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...
+ *   display:block!important;
+ *
+ *   //this is just another form of hiding an element
+ *   position:absolute;
+ *   top:-9999px;
+ *   left:-9999px;
+ * }
+ * 
+ * + * Just remember to include the important flag so the CSS override will function. + * + * ## A note about animations with ngHide + * + * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression + * is true and false. This system works similar to the animation system present with ngClass, however, the + * only difference is that you must also include the !important flag to override the display property so + * that you can perform an animation when the element is hidden during the time of the animation. + * + *
+ * //
+ * //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;
+ *   display:block!important;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * 
* * @animations - * show - happens after the ngHide expression evaluates to a non truthy value and the contents are set to visible - * hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden + * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden + * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible * * @element ANY * @param {expression} ngHide If the {@link guide/expression expression} is truthy then @@ -24538,36 +26348,36 @@ var ngShowDirective = ['$animator', function($animator) { Click me:
Show: - +
I show up when your checkbox is checked. - +
Hide: - +
I hide when your checkbox is checked. - +
- .example-show-setup, .example-hide-setup { + .animate-hide.ng-hide-add, + .animate-hide.ng-hide-remove { -webkit-transition:all linear 0.5s; -moz-transition:all linear 0.5s; - -ms-transition:all linear 0.5s; -o-transition:all linear 0.5s; transition:all linear 0.5s; + display:block!important; } - .example-show-setup { + .animate-hide.ng-hide-add.ng-hide-add-active, + .animate-hide.ng-hide-remove { line-height:0; opacity:0; padding:0 10px; } - .example-show-start.example-show-start { + + .animate-hide.ng-hide-add, + .animate-hide.ng-hide-remove.ng-hide-remove-active { line-height:20px; opacity:1; padding:10px; @@ -24575,19 +26385,6 @@ var ngShowDirective = ['$animator', function($animator) { background:white; } - .example-hide-setup { - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - .example-hide-start.example-hide-start { - line-height:0; - opacity:0; - padding:0 10px; - } - .check-element { padding:10px; border:1px solid black; @@ -24607,12 +26404,10 @@ var ngShowDirective = ['$animator', function($animator) { */ -//TODO(misko): refactor to remove element from the DOM -var ngHideDirective = ['$animator', function($animator) { +var ngHideDirective = ['$animate', function($animate) { return function(scope, element, attr) { - var animate = $animator(scope, attr); scope.$watch(attr.ngHide, function ngHideWatchAction(value){ - animate[toBoolean(value) ? 'hide' : 'show'](element); + $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); }); }; }]; @@ -24682,9 +26477,6 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default * attribute is displayed. * - * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter** - * and **leave** effects. - * * @animations * enter - happens after the ngSwtich contents change and the matched child element is placed inside the container * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM @@ -24717,10 +26509,8 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { selection={{selection}}
-
+
Settings Div
Home Span
default
@@ -24734,10 +26524,22 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { } - .example-leave-setup, .example-enter-setup { + .animate-switch-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .animate-switch-container > div { + padding:10px; + } + + .animate-switch-container > .ng-enter, + .animate-switch-container > .ng-leave { -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; @@ -24748,22 +26550,17 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { bottom:0; } - .example-animate-container > * { - display:block; - padding:10px; - } - - .example-enter-setup { + .animate-switch-container > .ng-enter { top:-50px; } - .example-enter-start.example-enter-start { + .animate-switch-container > .ng-enter.ng-enter-active { top:0; } - .example-leave-setup { + .animate-switch-container > .ng-leave { top:0; } - .example-leave-start.example-leave-start { + .animate-switch-container > .ng-leave.ng-leave-active { top:50px; } @@ -24782,7 +26579,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { */ -var ngSwitchDirective = ['$animator', function($animator) { +var ngSwitchDirective = ['$animate', function($animate) { return { restrict: 'EA', require: 'ngSwitch', @@ -24792,7 +26589,6 @@ var ngSwitchDirective = ['$animator', function($animator) { this.cases = {}; }], link: function(scope, element, attr, ngSwitchController) { - var animate = $animator(scope, attr); var watchExpr = attr.ngSwitch || attr.on, selectedTranscludes, selectedElements, @@ -24801,7 +26597,7 @@ var ngSwitchDirective = ['$animator', function($animator) { scope.$watch(watchExpr, function ngSwitchWatchAction(value) { for (var i= 0, ii=selectedScopes.length; i' + '
{{title}}
' + '
' + @@ -24899,232 +26694,18 @@ var ngSwitchDefaultDirective = ngDirective({ * */ var ngTranscludeDirective = ngDirective({ - controller: ['$transclude', '$element', function($transclude, $element) { - $transclude(function(clone) { - $element.append(clone); + controller: ['$transclude', '$element', '$scope', function($transclude, $element, $scope) { + // use evalAsync so that we don't process transclusion before directives on the parent element even when the + // transclusion replaces the current element. (we can't use priority here because that applies only to compile fns + // and not controllers + $scope.$evalAsync(function() { + $transclude(function(clone) { + $element.append(clone); + }); }); }] }); -/** - * @ngdoc directive - * @name ng.directive:ngView - * @restrict ECA - * - * @description - * # Overview - * `ngView` is a directive that complements the {@link ng.$route $route} service by - * including the rendered template of the current route into the main layout (`index.html`) file. - * Every time the current route changes, the included view changes with it according to the - * configuration of the `$route` service. - * - * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter** - * and **leave** effects. - * - * @animations - * enter - happens just after the ngView contents are changed (when the new view DOM element is inserted into the DOM) - * leave - happens just after the current ngView contents change and just before the former contents are removed from the DOM - * - * @scope - * @example - - -
- Choose: - Moby | - Moby: Ch1 | - Gatsby | - Gatsby: Ch4 | - Scarlet Letter
- -
-
- -
$location.path() = {{$location.path()}}
-
$route.current.templateUrl = {{$route.current.templateUrl}}
-
$route.current.params = {{$route.current.params}}
-
$route.current.scope.name = {{$route.current.scope.name}}
-
$routeParams = {{$routeParams}}
-
-
- - -
- controller: {{name}}
- Book Id: {{params.bookId}}
-
-
- - -
- controller: {{name}}
- Book Id: {{params.bookId}}
- Chapter Id: {{params.chapterId}} -
-
- - - .example-leave-setup, .example-enter-setup { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - } - - .example-animate-container { - position:relative; - height:100px; - } - - .example-animate-container > * { - display:block; - width:100%; - border-left:1px solid black; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - padding:10px; - } - - .example-enter-setup { - left:100%; - } - .example-enter-setup.example-enter-start { - left:0; - } - - .example-leave-setup { } - .example-leave-setup.example-leave-start { - left:-100%; - } - - - - angular.module('ngView', [], function($routeProvider, $locationProvider) { - $routeProvider.when('/Book/:bookId', { - templateUrl: 'book.html', - controller: BookCntl - }); - $routeProvider.when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: ChapterCntl - }); - - // configure html5 to get links working on jsfiddle - $locationProvider.html5Mode(true); - }); - - function MainCntl($scope, $route, $routeParams, $location) { - $scope.$route = $route; - $scope.$location = $location; - $scope.$routeParams = $routeParams; - } - - function BookCntl($scope, $routeParams) { - $scope.name = "BookCntl"; - $scope.params = $routeParams; - } - - function ChapterCntl($scope, $routeParams) { - $scope.name = "ChapterCntl"; - $scope.params = $routeParams; - } - - - - it('should load and compile correct template', function() { - element('a:contains("Moby: Ch1")').click(); - var content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: ChapterCntl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element('a:contains("Scarlet")').click(); - content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: BookCntl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - -
- */ - - -/** - * @ngdoc event - * @name ng.directive:ngView#$viewContentLoaded - * @eventOf ng.directive:ngView - * @eventType emit on the current ngView scope - * @description - * Emitted every time the ngView content is reloaded. - */ -var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$compile', - '$controller', '$animator', - function($http, $templateCache, $route, $anchorScroll, $compile, - $controller, $animator) { - return { - restrict: 'ECA', - terminal: true, - link: function(scope, element, attr) { - var lastScope, - onloadExp = attr.onload || '', - animate = $animator(scope, attr); - - scope.$on('$routeChangeSuccess', update); - update(); - - - function destroyLastScope() { - if (lastScope) { - lastScope.$destroy(); - lastScope = null; - } - } - - function clearContent() { - animate.leave(element.contents(), element); - destroyLastScope(); - } - - function update() { - var locals = $route.current && $route.current.locals, - template = locals && locals.$template; - - if (template) { - clearContent(); - animate.enter(jqLite('
').html(template).contents(), element); - - var link = $compile(element.contents()), - current = $route.current, - controller; - - lastScope = current.scope = scope.$new(); - if (current.controller) { - locals.$scope = lastScope; - controller = $controller(current.controller, locals); - element.children().data('$ngControllerController', controller); - } - - link(lastScope); - lastScope.$emit('$viewContentLoaded'); - lastScope.$eval(onloadExp); - - // $anchorScroll might listen on event... - $anchorScroll(); - } else { - clearContent(); - } - } - } - }; -}]; - /** * @ngdoc directive * @name ng.directive:script @@ -25183,8 +26764,8 @@ var scriptDirective = ['$templateCache', function($templateCache) { * Optionally `ngOptions` attribute can be used to dynamically generate a list of `` * DOM element. + * * `trackexpr`: Used when working with an array of objects. The result of this expression will be + * used to identify the objects in the array. The `trackexpr` will most likely refer to the + * `value` variable (e.g. `value.propertyName`). * * @example @@ -25292,8 +26877,8 @@ var scriptDirective = ['$templateCache', function($templateCache) { var ngOptionsDirective = valueFn({ terminal: true }); var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //0000111110000000000022220000000000000000000000333300000000000000444444444444444440000000005555555555555555500000006666666666666666600000000000000077770 - var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*)$/, + //0000111110000000000022220000000000000000000000333300000000000000444444444444444440000000005555555555555555500000006666666666666666600000000000000007777000000000000000000088888 + var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/, nullModelCtrl = {$setViewValue: noop}; return { @@ -25423,7 +27008,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { } }; - selectElement.bind('change', function() { + selectElement.on('change', function() { scope.$apply(function() { if (unknownOption.parent()) unknownOption.remove(); ngModelCtrl.$setViewValue(selectElement.val()); @@ -25449,7 +27034,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { } }); - selectElement.bind('change', function() { + selectElement.on('change', function() { scope.$apply(function() { var array = []; forEach(selectElement.find('option'), function(option) { @@ -25466,9 +27051,9 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { var match; if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw Error( - "Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '" + optionsExp + "'."); + throw minErr('ngOptions')('iexp', + "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", + optionsExp, startingTag(selectElement)); } var displayFn = $parse(match[2] || match[1]), @@ -25477,6 +27062,8 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { groupByFn = $parse(match[3] || ''), valueFn = $parse(match[2] ? match[1] : valueName), valuesFn = $parse(match[7]), + track = match[8], + trackFn = track ? $parse(match[8]) : null, // This is an array of array of existing option groups in DOM. We try to reuse these if possible // optionGroupsCache[0] is the options with no option group // optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element @@ -25498,7 +27085,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { // clear contents, we'll add what's needed based on the model selectElement.html(''); - selectElement.bind('change', function() { + selectElement.on('change', function() { scope.$apply(function() { var optionGroup, collection = valuesFn(scope) || [], @@ -25517,7 +27104,14 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { if ((optionElement = optionGroup[index].element)[0].selected) { key = optionElement.val(); if (keyName) locals[keyName] = key; - locals[valueName] = collection[key]; + if (trackFn) { + for (var trackIndex = 0; trackIndex < collection.length; trackIndex++) { + locals[valueName] = collection[trackIndex]; + if (trackFn(scope, locals) == key) break; + } + } else { + locals[valueName] = collection[key]; + } value.push(valueFn(scope, locals)); } } @@ -25529,9 +27123,19 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { } else if (key == ''){ value = null; } else { - locals[valueName] = collection[key]; - if (keyName) locals[keyName] = key; - value = valueFn(scope, locals); + if (trackFn) { + for (var trackIndex = 0; trackIndex < collection.length; trackIndex++) { + locals[valueName] = collection[trackIndex]; + if (trackFn(scope, locals) == key) { + value = valueFn(scope, locals); + break; + } + } + } else { + locals[valueName] = collection[key]; + if (keyName) locals[keyName] = key; + value = valueFn(scope, locals); + } } } ctrl.$setViewValue(value); @@ -25563,11 +27167,15 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { label; if (multiple) { - selectedSet = new HashMap(modelValue); - } else if (modelValue === null || nullOption) { - // if we are not multiselect, and we are null then we have to add the nullOption - optionGroups[''].push({selected:modelValue === null, id:'', label:''}); - selectedSet = true; + if (trackFn && isArray(modelValue)) { + selectedSet = new HashMap([]); + for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { + locals[valueName] = modelValue[trackIndex]; + selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); + } + } else { + selectedSet = new HashMap(modelValue); + } } // We now build up the list of options we need (we merge later) @@ -25579,22 +27187,33 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { optionGroupNames.push(optionGroupName); } if (multiple) { - selected = selectedSet.remove(valueFn(scope, locals)) != undefined; + selected = selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals)) != undefined; } else { - selected = modelValue === valueFn(scope, locals); + if (trackFn) { + var modelCast = {}; + modelCast[valueName] = modelValue; + selected = trackFn(scope, modelCast) === trackFn(scope, locals); + } else { + selected = modelValue === valueFn(scope, locals); + } selectedSet = selectedSet || selected; // see if at least one item is selected } label = displayFn(scope, locals); // what will be seen by the user label = label === undefined ? '' : label; // doing displayFn(scope, locals) || '' overwrites zero values optionGroup.push({ - id: keyName ? keys[index] : index, // either the index into array or key from object + id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index), // either the index into array or key from object label: label, selected: selected // determine if we should be selected }); } - if (!multiple && !selectedSet) { - // nothing was selected, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); + if (!multiple) { + if (nullOption || modelValue === null) { + // insert null option if we have a placeholder, or the model is null + optionGroups[''].unshift({id:'', label:'', selected:!selectedSet}); + } else if (!selectedSet) { + // option could not be found, we have to insert the undefined item + optionGroups[''].unshift({id:'?', label:'', selected:true}); + } } // Now we need to update the list of DOM nodes to match the optionGroups we computed above @@ -25638,7 +27257,8 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { if (existingOption.id !== option.id) { lastElement.val(existingOption.id = option.id); } - if (existingOption.element.selected !== option.selected) { + // lastElement.prop('selected') provided by jQuery has side-effects + if (lastElement[0].selected !== option.selected) { lastElement.prop('selected', (existingOption.selected = option.selected)); } } else { @@ -25729,7 +27349,7 @@ var optionDirective = ['$interpolate', function($interpolate) { selectCtrl.addOption(attr.value); } - element.bind('$destroy', function() { + element.on('$destroy', function() { selectCtrl.removeOption(attr.value); }); }; @@ -25750,6 +27370,11 @@ var styleDirective = valueFn({ // Public namespace angular.scenario = angular.scenario || {}; +/** + * Expose jQuery (e.g. for custom dsl extensions). + */ +angular.scenario.jQuery = _jQuery; + /** * Defines a new output format. * @@ -25964,102 +27589,6 @@ function callerFile(offset) { }; } -/** - * Triggers a browser event. Attempts to choose the right event if one is - * not specified. - * - * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement - * @param {string} type Optional event type. - * @param {Array.=} keys Optional list of pressed keys - * (valid values: 'alt', 'meta', 'shift', 'ctrl') - * @param {number} x Optional x-coordinate for mouse/touch events. - * @param {number} y Optional y-coordinate for mouse/touch events. - */ -function browserTrigger(element, type, keys, x, y) { - if (element && !element.nodeName) element = element[0]; - if (!element) return; - if (!type) { - type = { - 'text': 'change', - 'textarea': 'change', - 'hidden': 'change', - 'password': 'change', - 'button': 'click', - 'submit': 'click', - 'reset': 'click', - 'image': 'click', - 'checkbox': 'click', - 'radio': 'click', - 'select-one': 'change', - 'select-multiple': 'change' - }[lowercase(element.type)] || 'click'; - } - if (lowercase(nodeName_(element)) == 'option') { - element.parentNode.value = element.value; - element = element.parentNode; - type = 'change'; - } - - keys = keys || []; - function pressed(key) { - return indexOf(keys, key) !== -1; - } - - if (msie < 9) { - switch(element.type) { - case 'radio': - case 'checkbox': - element.checked = !element.checked; - break; - } - // WTF!!! Error: Unspecified error. - // Don't know why, but some elements when detached seem to be in inconsistent state and - // calling .fireEvent() on them will result in very unhelpful error (Error: Unspecified error) - // forcing the browser to compute the element position (by reading its CSS) - // puts the element in consistent state. - element.style.posLeft; - - // TODO(vojta): create event objects with pressed keys to get it working on IE<9 - var ret = element.fireEvent('on' + type); - if (lowercase(element.type) == 'submit') { - while(element) { - if (lowercase(element.nodeName) == 'form') { - element.fireEvent('onsubmit'); - break; - } - element = element.parentNode; - } - } - return ret; - } else { - var evnt = document.createEvent('MouseEvents'), - originalPreventDefault = evnt.preventDefault, - iframe = _jQuery('#application iframe')[0], - appWindow = iframe ? iframe.contentWindow : window, - fakeProcessDefault = true, - finalProcessDefault, - angular = appWindow.angular || {}; - - // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208 - angular['ff-684208-preventDefault'] = false; - evnt.preventDefault = function() { - fakeProcessDefault = false; - return originalPreventDefault.apply(evnt, arguments); - }; - - x = x || 0; - y = y || 0; - evnt.initMouseEvent(type, true, true, window, 0, x, y, x, y, pressed('ctrl'), pressed('alt'), - pressed('shift'), pressed('meta'), 0, element); - - element.dispatchEvent(evnt); - finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault); - - delete angular['ff-684208-preventDefault']; - - return finalProcessDefault; - } -} /** * Don't use the jQuery trigger method since it works incorrectly. @@ -26073,7 +27602,7 @@ function browserTrigger(element, type, keys, x, y) { (function(fn){ var parentTrigger = fn.trigger; fn.trigger = function(type) { - if (/(click|change|keydown|blur|input)/.test(type)) { + if (/(click|change|keydown|blur|input|mousedown|mouseup)/.test(type)) { var processDefaults = []; this.each(function(index, node) { processDefaults.push(browserTrigger(node, type)); @@ -26162,6 +27691,121 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) { return result; }; +(function() { + var msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1], 10); + + function indexOf(array, obj) { + if (array.indexOf) return array.indexOf(obj); + + for ( var i = 0; i < array.length; i++) { + if (obj === array[i]) return i; + } + return -1; + } + + + + /** + * Triggers a browser event. Attempts to choose the right event if one is + * not specified. + * + * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement + * @param {string} eventType Optional event type. + * @param {Array.=} keys Optional list of pressed keys + * (valid values: 'alt', 'meta', 'shift', 'ctrl') + * @param {number} x Optional x-coordinate for mouse/touch events. + * @param {number} y Optional y-coordinate for mouse/touch events. + */ + window.browserTrigger = function browserTrigger(element, eventType, keys, x, y) { + if (element && !element.nodeName) element = element[0]; + if (!element) return; + + var inputType = (element.type) ? element.type.toLowerCase() : null, + nodeName = element.nodeName.toLowerCase(); + + if (!eventType) { + eventType = { + 'text': 'change', + 'textarea': 'change', + 'hidden': 'change', + 'password': 'change', + 'button': 'click', + 'submit': 'click', + 'reset': 'click', + 'image': 'click', + 'checkbox': 'click', + 'radio': 'click', + 'select-one': 'change', + 'select-multiple': 'change', + '_default_': 'click' + }[inputType || '_default_']; + } + + if (nodeName == 'option') { + element.parentNode.value = element.value; + element = element.parentNode; + eventType = 'change'; + } + + keys = keys || []; + function pressed(key) { + return indexOf(keys, key) !== -1; + } + + if (msie < 9) { + if (inputType == 'radio' || inputType == 'checkbox') { + element.checked = !element.checked; + } + + // WTF!!! Error: Unspecified error. + // Don't know why, but some elements when detached seem to be in inconsistent state and + // calling .fireEvent() on them will result in very unhelpful error (Error: Unspecified error) + // forcing the browser to compute the element position (by reading its CSS) + // puts the element in consistent state. + element.style.posLeft; + + // TODO(vojta): create event objects with pressed keys to get it working on IE<9 + var ret = element.fireEvent('on' + eventType); + if (inputType == 'submit') { + while(element) { + if (element.nodeName.toLowerCase() == 'form') { + element.fireEvent('onsubmit'); + break; + } + element = element.parentNode; + } + } + return ret; + } else { + var evnt = document.createEvent('MouseEvents'), + originalPreventDefault = evnt.preventDefault, + appWindow = element.ownerDocument.defaultView, + fakeProcessDefault = true, + finalProcessDefault, + angular = appWindow.angular || {}; + + // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208 + angular['ff-684208-preventDefault'] = false; + evnt.preventDefault = function() { + fakeProcessDefault = false; + return originalPreventDefault.apply(evnt, arguments); + }; + + x = x || 0; + y = y || 0; + evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), pressed('alt'), + pressed('shift'), pressed('meta'), 0, element); + + element.dispatchEvent(evnt); + finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault); + + delete angular['ff-684208-preventDefault']; + + return finalProcessDefault; + } + } +}()); + /** * Represents the application currently being tested and abstracts usage * of iframes or separate windows. @@ -26225,10 +27869,8 @@ angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorF self.context.find('#test-frames').append('
+

Watch a Presentation About Angular

+

Here is a presentation on Angular from May 2012. The corresponding slides are also available.

+
diff --git a/lib/angular/docs/partials/guide/scope.html b/lib/angular/docs/partials/guide/scope.html old mode 100644 new mode 100755 index 88250b6..a103060 --- a/lib/angular/docs/partials/guide/scope.html +++ b/lib/angular/docs/partials/guide/scope.html @@ -1,45 +1,43 @@ -

- + Improve this doc

+
+

-
Improve this doc

What are Scopes?

- +

What are Scopes?

scope is an object that refers to the application model. It is an execution context for expressions. Scopes are arranged in hierarchical structure which mimic the DOM structure of the application. Scopes can watch expressions and propagate events.

- -

Scope characteristics

- +

Scope characteristics

  • Scopes provide APIs ($watch) to observe -model mutations.

  • +model mutations.

    +
  • Scopes provide APIs ($apply) to -propagate any model changes through the system into the view from outside of the "Angular -realm" (controllers, services, Angular event handlers).

  • +propagate any model changes through the system into the view from outside of the "Angular +realm" (controllers, services, Angular event handlers).

    +
  • Scopes can be nested to isolate application components while providing access to shared model -properties. A scope (prototypically) inherits properties from its parent scope.

  • +properties. A scope (prototypically) inherits properties from its parent scope.

    +
  • Scopes provide context against which expressions are evaluated. For example {{username}} expression is meaningless, unless it is evaluated against a specific -scope which defines the username property.

  • +scope which defines the username property.

    +
- -

Scope as Data-Model

- +

Scope as Data-Model

Scope is the glue between application controller and the view. During the template linking phase the directives set up $watch expressions on the scope. The $watch allows the directives to be notified of property changes, which allows the directive to render the updated value to the DOM.

-

Both controllers and directives have reference to the scope, but not to each other. This arrangement isolates the controller from the directive as well as from DOM. This is an important point since it makes the controllers view agnostic, which greatly improves the testing story of the applications.

- -

Source

-
+

Source

+
-

-
 
-

-
 
-

Demo

-
- +

Demo

+

In the above example notice that the MyController assigns World to the username property of the scope. The scope then notifies the input of the assignment, which then renders the input with username pre-filled. This demonstrates how a controller can write data into the scope.

-

Similarly the controller can assign behavior to scope as seen by the sayHello method, which is -invoked when the user clicks on the 'greet' button. The sayHello method can read the username +invoked when the user clicks on the 'greet' button. The sayHello method can read the username property and create a greeting property. This demonstrates that the properties on scope update automatically when they are bound to HTML input widgets.

-

Logically the rendering of {{greeting}} involves:

-
  • retrieval of the scope associated with DOM node where {{greeting}} is defined in template. In this example this is the same scope as the scope which was passed into MyController. (We -will discuss scope hierarchies later.)

  • +will discuss scope hierarchies later.)

    +
  • Evaluate the greeting expression against the scope retrieved above, -and assign the result to the text of the enclosing DOM element.

  • +and assign the result to the text of the enclosing DOM element.

    +
-

You can think of the scope and its properties as the data which is used to render the view. The scope is the single source-of-truth for all things view related.

-

From a testability point of view, the separation of the controller and the view is desirable, because it allows us to test the behavior without being distracted by the rendering details.

-
   it('should say hello', function() {
     var scopeMock = {};
@@ -103,29 +96,23 @@ to test the behavior without being distracted by the rendering details.

expect(scopeMock.greeting).toEqual('Hello angular!'); });
- -

Scope Hierarchies

- +

Scope Hierarchies

Each Angular application has exactly one root scope, but may have several child scopes.

-

The application can have multiple scopes, because some directives create new child scopes (refer to directive documentation to see which directives create new scopes). When new scopes are created, they are added as children of their parent scope. This creates a tree -structure which parallels the DOM where they're attached

- +structure which parallels the DOM where they're attached

When Angular evaluates {{username}}, it first looks at the scope associated with the given element for the username property. If no such property is found, it searches the parent scope and so on until the root scope is reached. In JavaScript this behavior is known as prototypical inheritance, and child scopes prototypically inherit from their parents.

-

This example illustrates scopes in application, and prototypical inheritance of properties.

- -

Source

-
+

Source

+
-

-
 
-

-
 
-

-
 
-

Demo

-
- +

Demo

+

Notice that Angular automatically places ng-scope class on elements where scopes are attached. The <style> definition in this example highlights in red the new scope locations. The child scopes are necessary because the repeater evaluates {{employee.name}} expression, but depending on which scope the expression is evaluated it produces different result. Similarly the evaluation of {{department}} prototypically inherits from root scope, as it is the only place where the department property is defined.

- -

Retrieving Scopes from the DOM.

- +

Retrieving Scopes from the DOM.

Scopes are attached to the DOM as $scope data property, and can be retrieved for debugging purposes. (It is unlikely that one would need to retrieve scopes in this way inside the application.) The location where the root scope is attached to the DOM is defined by the location of ng-app directive. Typically -ng-app is placed an the <html> element, but it can be placed on other elements as well, if, +ng-app is placed on the <html> element, but it can be placed on other elements as well, if, for example, only a portion of the view needs to be controlled by Angular.

-

To examine the scope in the debugger:

-
    -
  1. right click on the element of interest in your browser and select 'inspect element'. You -should see the browser debugger with the element you clicked on highlighted.

  2. +
  3. right click on the element of interest in your browser and select 'inspect element'. You +should see the browser debugger with the element you clicked on highlighted.

    +
  4. The debugger allows you to access the currently selected element in the console as $0 -variable.

  5. -
  6. To retrieve the associated scope in console execute: angular.element($0).scope()

  7. +variable.

    + +
  8. To retrieve the associated scope in console execute: angular.element($0).scope()

    +
- -

Scope Events Propagation

- +

Scope Events Propagation

Scopes can propagate events in similar fashion to DOM events. The event can be broadcasted to the scope children or emitted to scope parents.

- -

Source

-
+

Source

+
-

-
 
-

-
 
-

Demo

-
- -

Scope Life Cycle

- +

Demo

+
+

Scope Life Cycle

The normal flow of a browser receiving an event is that it executes a corresponding JavaScript callback. Once the callback completes the browser re-renders the DOM and returns to waiting for more events.

-

When the browser calls into JavaScript the code executes outside the Angular execution context, which means that Angular is unaware of model modifications. To properly process model modifications the execution has to enter the Angular execution context using the $apply method. Only model modifications which execute inside the $apply method will be properly accounted for by Angular. For example if a directive listens on DOM events, such as ng-click it must evaluate the expression inside the $apply method.

-

After evaluating the expression, the $apply method performs a $digest. In the $digest phase the scope examines all of the $watch expressions and compares them with the previous value. This dirty checking is done -asynchronously. This means that assignment such as $scope.username="angular" will not +asynchronously. This means that assignment such as $scope.username="angular" will not immediately cause a $watch to be notified, instead the $watch notification is delayed until the $digest phase. This delay is desirable, since it coalesces multiple model updates into one $watch notification as well as it guarantees that during the $watch notification no other $watches are running. If a $watch changes the value of the model, it will force additional $digest cycle.

-
  1. Creation

    -

    The root scope is created during the application - bootstrap by the $injector. During template - linking, some directives create new child scopes.

  2. +bootstrap by the $injector. During template +linking, some directives create new child scopes.

    +
  3. Watcher registration

    -

    During template linking directives register watches on the scope. These watches will be - used to propagate model values to the DOM.

  4. +used to propagate model values to the DOM.

    +
  5. Model mutation

    -

    For mutations to be properly observed, you should make them only within the scope.$apply(). (Angular APIs do this - implicitly, so no extra $apply call is needed when doing synchronous work in controllers, - or asynchronous work with $http or $timeout services.

  6. +implicitly, so no extra $apply call is needed when doing synchronous work in controllers, +or asynchronous work with $http or $timeout services.

    +
  7. Mutation observation

    -

    At the end $apply, Angular performs a $digest cycle on the root scope, which then propagates throughout all child scopes. During - the $digest cycle, all $watched expressions or functions are checked for model mutation - and if a mutation is detected, the $watch listener is called.

  8. +the $digest cycle, all $watched expressions or functions are checked for model mutation +and if a mutation is detected, the $watch listener is called.

    +
  9. Scope destruction

    -

    When child scopes are no longer needed, it is the responsibility of the child scope creator - to destroy them via scope.$destroy() - API. This will stop propagation of $digest calls into the child scope and allow for memory - used by the child scope models to be reclaimed by the garbage collector.

  10. +to destroy them via scope.$destroy() +API. This will stop propagation of $digest calls into the child scope and allow for memory +used by the child scope models to be reclaimed by the garbage collector.

    +
- -

Scopes and Directives

- +

Scopes and Directives

During the compilation phase, the compiler matches directives against the DOM template. The directives usually fall into one of two categories:

-
  • Observing directives, such as double-curly expressions {{expression}}, register listeners using the $watch() method. This type of directive needs -to be notified whenever the expression changes so that it can update the view.

  • +to be notified whenever the expression changes so that it can update the view.

    +
  • Listener directives, such as ng-click, register a listener with the DOM. When the DOM listener fires, the directive -executes the associated expression and updates the view using the $apply() method.

  • +executes the associated expression and updates the view using the $apply() method.

    +
-

When an external event (such as a user action, timer or XHR) is received, the associated expression must be applied to the scope through the $apply() method so that all listeners are updated correctly.

- -

Directives that Create Scopes

- +

Directives that Create Scopes

In most cases, directives and scopes interact but do not create new instances of scope. However, some directives, such as ng-controller and ng-repeat, create new child scopes and attach the child scope to the corresponding DOM element. You can retrieve a scope for any DOM element by using an angular.element(aDomElement).scope() method call.

- -

Controllers and Scopes

- +

Controllers and Scopes

Scopes and controllers interact with each other in the following situations:

-
    -
  • Controllers use scopes to expose controller methods to templates (see ng-controller).

  • -
  • Controllers define methods (behavior) that can mutate the model (properties on the scope).

  • +
  • Controllers use scopes to expose controller methods to templates (see ng-controller).

    +
  • +
  • Controllers define methods (behavior) that can mutate the model (properties on the scope).

    +
  • Controllers may register watches on - the model. These watches execute immediately after the controller behavior executes.

  • +the model. These watches execute immediately after the controller behavior executes.

    +
-

See the ng-controller for more information.

- -

Scope $watch Performance Considerations

- +

Scope $watch Performance Considerations

Dirty checking the scope for property changes is a common operation in Angular and for this reason the dirty checking function must be efficient. Care should be taken that the dirty checking function does not do any DOM access, as DOM access is orders of magnitude slower then property -access on JavaScript object.

+access on JavaScript object.

+ diff --git a/lib/angular/docs/partials/guide/type.html b/lib/angular/docs/partials/guide/type.html deleted file mode 100644 index e2f3dce..0000000 --- a/lib/angular/docs/partials/guide/type.html +++ /dev/null @@ -1,4 +0,0 @@ -

- -

- diff --git a/lib/angular/docs/partials/misc/contribute.html b/lib/angular/docs/partials/misc/contribute.html old mode 100644 new mode 100755 index bd3b984..127099b --- a/lib/angular/docs/partials/misc/contribute.html +++ b/lib/angular/docs/partials/misc/contribute.html @@ -1,282 +1,247 @@ -

- + Improve this doc

+
+

-
Improve this doc
    +
    -

    - -

    License

    - +

    License

    AngularJS is an open source project licensed under the MIT license. Your contributions are always welcome. When working with AngularJS code base, please follow the guidelines provided on this page.

    -

    - -

    Contributing to Source Code

    - -

    We'd love for you to contribute to our source code and to make AngularJS even better than it is -today! Here are the guidelines we'd like you to follow:

    - +

    Contributing to Source Code

    +

    We'd love for you to contribute to our source code and to make AngularJS even better than it is +today! Here are the guidelines we'd like you to follow:

    • Major changes that you intend to contribute to the project should be discussed first on our mailing list so that we can better coordinate our efforts, prevent duplication of work, and help you to craft the change so that it -is successfully accepted upstream.

    • +is successfully accepted upstream.

      +
    • Small changes and bug fixes can be crafted and submitted to Github as a pull -request.

    • +request.

      +
    -

    - -

    Applying Code Standards

    - +

    Applying Code Standards

    To ensure consistency throughout the source code, keep these rules in mind as you are working:

    -
      -
    • All features or bug fixes must be tested by one or more specs.

    • +
    • All features or bug fixes must be tested by one or more specs.

      +
    • All public API methods must be documented with ngdoc, an extended version of jsdoc (we added support for markdown and templating via @ngdoc tag). To see how we document our APIs, please -check out the existing ngdocs.

    • -
    • With the exceptions listed below, we follow the rules contained in Google's JavaScript Style Guide:

      - -
      • Do not use namespaces: Instead, we wrap the entire angular code base in an anonymous closure -and export our API explicitly rather than implicitly.

      • -
      • Wrap all code at 100 characters.

      • +check out the existing ngdocs.

        + +
      • With the exceptions listed below, we follow the rules contained in Google's JavaScript Style Guide:

        +
          +
        • Do not use namespaces: Instead, we wrap the entire angular code base in an anonymous closure +and export our API explicitly rather than implicitly.

          +
        • +
        • Wrap all code at 100 characters.

          +
        • Instead of complex inheritance hierarchies, we prefer simple objects. We use prototypical -inheritance only when absolutely necessary.

        • -
        • We love functions and closures and, whenever possible, prefer them over objects.

        • +inheritance only when absolutely necessary.

          + +
        • We love functions and closures and, whenever possible, prefer them over objects.

          +
        • To write concise code that can be better minified, internally we use aliases that map to the -external API. See our existing code to see what we mean.

        • -
        • We don't go crazy with type annotations for private internal APIs unless it's an internal API -that is used throughout AngularJS. The best guidance is to do what makes the most sense.

      • +external API. See our existing code to see what we mean.

        + +
      • We don't go crazy with type annotations for private internal APIs unless it's an internal API +that is used throughout AngularJS. The best guidance is to do what makes the most sense.

        +
      • +
      +
    -

    - -

    Checking Out and Building Angular

    - +

    Checking Out and Building Angular

    The AngularJS source code is hosted at Github, which we also use to accept code contributions. The AngularJS repository can be found at https://github.com/angular/angular.js.

    -

    Several steps are needed to check out and build AngularJS:

    - -

    Installation Dependencies

    - +

    Installation Dependencies

    Before you can build AngularJS, you must install or configure the following dependencies on your machine:

    -
    • Git: The Github Guide to Installing Git is -quite a good source for information on Git.

    • +quite a good source for information on Git.

      +
    • Node.js: We use Node to generate the documentation, run a development web server, run tests, and generate a build. Depending on your system, you can install Node either from source or as a pre-packaged bundle.

      - -

      Once installed, you'll also need several npms (node packages), which you can install once you checked out a local copy +

    • +
    • Java: JavaScript is minified using +Closure Tools jar. Make sure you have Java (version 6 or higher) installed +and included in your PATH variable.

      +

      Once installed, you'll also need several npms (node packages), which you can install once you checked out a local copy of the Angular repository (see below) with:

      - -
      • cd angular.js
      • -
      • npm install
    • -
    • Grunt: We use Grunt as our build system. Install the grunt command-line tool globally with:

      - -
      • sudo npm install -g grunt-cli
    • +
        +
      • cd angular.js
      • +
      • npm install
      • +
      • bower install
      - -

      Creating a Github Account and Forking Angular

      - + +
    • Grunt: We use Grunt as our build system. Install the grunt command-line tool globally with:

      +
        +
      • sudo npm install -g grunt-cli
      • +
      +
    • +
    • Bower: Bower is used to manage packages for the docs. Install the bower tool globally with:

      +
        +
      • sudo npm install -g bower
      • +
      +
    • +
    +

    Creating a Github Account and Forking Angular

    To create a Github account, follow the instructions here. Afterwards, go ahead and fork the main angular repository.

    - -

    Building AngularJS

    - +

    Building AngularJS

    To build AngularJS, you check out the source code and use Grunt to generate the non-minified and minified AngularJS files:

    -
    1. To clone your Github repository, run:

      - -
      git clone git@github.com:<github username>/angular.js.git
      -
    2. +
       git clone git@github.com:<github username>/angular.js.git
      +
    3. To go to the AngularJS directory, run:

      - -
      cd angular.js
      -
    4. +
       cd angular.js
      +
    5. To add the main AngularJS repository as an upstream remote to your repository, run:

      - -
      git remote add upstream https://github.com/angular/angular.js.git
      -
    6. +
       git remote add upstream https://github.com/angular/angular.js.git
      +
    7. To add node.js dependencies

      - -
      npm install
      -
    8. +
       npm install
      + +
    9. To add docs components

      +
       bower install
      +
    10. To build AngularJS, run:

      - -
      grunt package
      -
    11. +
       grunt package
      +
    - -

    NOTE: If you're using Windows you must run your command line with administrative privileges (right click, run as +

    NOTE: If you're using Windows you must run your command line with administrative privileges (right click, run as Administrator).

    -

    The build output can be located under the build directory. It consists of the following files and directories:

    -
    • angular-<version>.zip — This is the complete zip file, which contains all of the release build -artifacts.

    • -
    • angular.js — The non-minified angular script.

    • -
    • angular.min.js — The minified angular script.

    • -
    • angular-scenario.js — The angular End2End test runner.

    • -
    • docs/ — A directory that contains all of the files needed to run docs.angularjs.org.

    • -
    • docs/index.html — The main page for the documentation.

    • -
    • docs/docs-scenario.html — The End2End test runner for the documentation application.

    • +artifacts.

      + +
    • angular.js — The non-minified angular script.

      +
    • +
    • angular.min.js — The minified angular script.

      +
    • +
    • angular-scenario.js — The angular End2End test runner.

      +
    • +
    • docs/ — A directory that contains all of the files needed to run docs.angularjs.org.

      +
    • +
    • docs/index.html — The main page for the documentation.

      +
    • +
    • docs/docs-scenario.html — The End2End test runner for the documentation application.

      +
    -

    - -

    Running a Local Development Web Server

    - +

    Running a Local Development Web Server

    To debug code and run end-to-end tests, it is often useful to have a local HTTP server. For this purpose, we have made available a local web server based on Node.js.

    -
    1. To start the web server, run:

      - -
      grunt webserver
      -
    2. +
       grunt webserver
      +
    3. To access the local server, go to this website:

      - -
      http://localhost:8000/
      -
      - -

      By default, it serves the contents of the AngularJS project directory.

    4. +
       http://localhost:8000/
      +

      By default, it serves the contents of the AngularJS project directory.

      +
    -

    - -

    Running the Unit Test Suite

    - -

    Our unit and integration tests are written with Jasmine and executed with Testacular. To run all of the +

    Running the Unit Test Suite

    +

    Our unit and integration tests are written with Jasmine and executed with Karma. To run all of the tests once on Chrome run:

    - -
    grunt test:unit
    -
    - +
    grunt test:unit

    To run the tests on other browsers (Chrome, ChromeCanary, Firefox, Opera and Safari are pre-configured) use:

    - -
    grunt test:unit --browsers Opera,Firefox
    -
    - +
    grunt test:unit --browsers Opera,Firefox

    Note there should be no spaces between browsers. Opera, Firefox is INVALID.

    - -

    During development it's however more productive to continuously run unit tests every time the source or test files +

    During development it's however more productive to continuously run unit tests every time the source or test files change. To execute tests in this mode run:

    -
      -
    1. To start the Testacular server, capture Chrome browser and run unit tests, run:

      - -
      grunt autotest:jqlite
      -
    2. +
    3. To start the Karma server, capture Chrome browser and run unit tests, run:

      +
       grunt autotest:jqlite
      +
    4. To capture more browsers, open this url in the desired browser (url might be different if you have multiple instance -of Testacular running, read Testacular's console output for the correct url):

      - -
      http://localhost:9876/
      -
    5. -
    6. To re-run tests just change any source or test file.

    7. +of Karma running, read Karma's console output for the correct url):

      +
       http://localhost:9876/
      + +
    8. To re-run tests just change any source or test file.

      +
    -

    To learn more about all of the preconfigured Grunt tasks run:

    - -
    grunt --help
    -
    - -

    Running the end-to-end Test Suite

    - +
    grunt --help
    +

    Running the end-to-end Test Suite

    To run the E2E test suite:

    -
      -
    1. Start the local web server if it's not running already.

      - -
      grunt webserver
      -
    2. +
    3. Start the local web server if it's not running already.

      +
       grunt webserver
      +
    4. In a browser, go to:

      - -
      http://localhost:8000/build/docs/docs-scenario.html
      -
      - +
       http://localhost:8000/build/docs/docs-scenario.html

      or in terminal run:

      - -
      grunt test:end2end
      -
    5. +
       grunt test:end2end
      +
    -

    For convenience you can also simply run:

    - -
        grunt test:e2e
    -
    - +
        grunt test:e2e

    This will start the webserver for you and run the tests.

    -

    - -

    Submitting Your Changes

    - +

    Submitting Your Changes

    To create and submit a change:

    -
    1. Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code changes to be -accepted, the CLA must be signed. It's a quick process, we promise!

      - +accepted, the CLA must be signed. It's a quick process, we promise!

      For individuals we have a simple click-through form. For -corporations we'll need you to -print, sign and one of scan+email, fax or mail the form.

    2. -
    3. Create a new branch off the master for your changes:

      - -
      git branch my-fix-branch
      -
    4. -
    5. Check out the branch:

      - -
      git checkout my-fix-branch
      -
    6. -
    7. Create your patch, make sure to have plenty of tests (that pass).

    8. +corporations we'll need you to +print, sign and one of scan+email, fax or mail the form.

      + +
    +
      +
    1. Create and checkout a new branch off the master branch for your changes:

      +
       git checkout -b my-fix-branch master
      +
    2. +
    3. Create your patch, make sure to have plenty of tests (that pass).

      +
    4. Commit your changes and create a descriptive commit message (the commit message is used to generate release notes, please check out our commit message conventions and our commit message presubmit hook validate-commit-msg.js):

      - -
      git commit -a
      -
    5. +
       git commit -a
      +
    6. Push your branch to Github:

      - -
      git push origin my-fix-branch
      -
    7. -
    8. In Github, send a pull request to angular:master.

    9. +
       git push origin my-fix-branch
      + +
    10. In Github, send a pull request to angular:master.

      +
    11. +
    +
    1. When the patch is reviewed and merged, delete your branch and pull yours — and other — changes from the main (upstream) repository:

      - -
      1. To delete the branch in Github, run:

        - -
        git push origin :my-fix-branch
        -
      2. +
          +
        1. To delete the branch in Github, run:

          +
            git push origin :my-fix-branch
          +
        2. To check out the master branch, run:

          - -
          git checkout master
          -
        3. +
            git checkout master
          +
        4. To delete a local branch, run:

          - -
          git branch -D my-fix-branch
          -
        5. +
            git branch -D my-fix-branch
          +
        6. To update your master with the latest upstream version, run:

          - -
          git pull --ff upstream master
          -
        +
          git pull --ff upstream master
        +
      - -

      That's it! Thank you for your contribution!

    + + +

    That's it! Thank you for your contribution!

    +
diff --git a/lib/angular/docs/partials/misc/downloading.html b/lib/angular/docs/partials/misc/downloading.html old mode 100644 new mode 100755 index fd2e285..8f913b1 --- a/lib/angular/docs/partials/misc/downloading.html +++ b/lib/angular/docs/partials/misc/downloading.html @@ -1,24 +1,20 @@ -

- + Improve this doc

+
+

-
Improve this doc

Including angular scripts from the Google CDN

- +

Including angular scripts from the Google CDN

The quickest way to get started is to point your html <script> tag to a Google CDN URL. -This way, you don't have to download anything or maintain a local copy.

- +This way, you don't have to download anything or maintain a local copy.

There are two types of angular script URLs you can point to, one for development and one for production:

-
  • angular-.js — This is the human-readable, non-minified version, suitable for web development.
  • angular-.min.js — This is the minified version, which we strongly suggest you use in production.
-

To point your code to an angular script on the Google CDN server, use the following template. This example points to the minified version 1.0.2:

-
   <!doctype html>
   <html ng-app>
@@ -30,44 +26,47 @@ example points to the minified version 1.0.2:

</body> </html>
-

Note that only versions 1.0.1 and above are available on the CDN, if you need an earlier version you can use the http://code.angularjs.org/ URL which was the previous recommended location for -hosted code source. If you're still using the angular server you should switch to the CDN version +hosted code source. If you're still using the angular server you should switch to the CDN version for even faster loading times.

- -

Downloading and hosting angular files locally

- +

Downloading and hosting angular files locally

This option is for those who want to work with angular offline, or those who want to host the angular files on their own servers.

- -

If you navigate to http://code.angularjs.org/, you'll see a directory listing with all of the +

If you navigate to http://code.angularjs.org/, you'll see a directory listing with all of the angular versions since we started releasing versioned build artifacts (quite late in the project lifetime). Each directory contains all artifacts that we released for a particular version. Download the version you want and have fun.

-

Each directory under http://code.angularjs.org/ includes the following set of files:

-
  • angular.js — This file is non-obfuscated, non-minified, and human-readable by opening it it any editor or browser. In order to get better error messages during development, you -should always use this non-minified angular script.

  • +should always use this non-minified angular script.

    +
  • angular.min.js — This is a minified and obfuscated version of angular.js created with the Closure compiler. Use this version for production in order -to minimize the size of the application that is downloaded by your user's browser.

  • +to minimize the size of the application that is downloaded by your user's browser.

    +
  • angular.zip — This is a zip archive that contains all of the files released -for this angular version. Use this file to get everything in a single download.

  • +for this angular version. Use this file to get everything in a single download.

    +
  • angular-mocks.js — This file contains an implementation of mocks that makes testing angular apps even easier. Your unit/integration test harness should load this file after -angular-<version>.js is loaded.

  • +angular-<version>.js is loaded.

    +
  • angular-scenario.js — This file is a very nifty JavaScript file that allows you -to write and execute end-to-end tests for angular applications.

  • +to write and execute end-to-end tests for angular applications.

    +
  • angular-loader.min.js — Module loader for Angular modules. If you are loading multiple script files containing Angular modules, you can load them asynchronously and in any order as long as you load this file first. Often the contents of this file are copy&pasted into the index.html to avoid even the initial request to angular-loader.min.js. -See angular-seed for an example of usage.

  • -
  • angular-resource.js, angular-cookies.js, etc - extra Angular modules with additional functionality.

  • +See angular-seed for an example of usage.

    + +
  • angular-resource.js, angular-cookies.js, etc - extra Angular modules with additional functionality.

    +
  • docs — this directory contains all the files that compose the http://docs.angularjs.org/ documentation app. These files are handy to see the older version of -our docs, or even more importantly, view the docs offline.

  • -
+our docs, or even more importantly, view the docs offline.

+ + +
diff --git a/lib/angular/docs/partials/misc/faq.html b/lib/angular/docs/partials/misc/faq.html old mode 100644 new mode 100755 index f62e685..92b8349 --- a/lib/angular/docs/partials/misc/faq.html +++ b/lib/angular/docs/partials/misc/faq.html @@ -1,206 +1,133 @@ -

- + Improve this doc

+
+

-
Improve this doc

FAQ

- -

Questions

- -

Why is this project called "AngularJS"? Why is the namespace called "ng"?

- -

Because HTML has Angular brackets and "ng" sounds like "Angular".

- -

Is AngularJS a library, framework, plugin or a browser extension?

- -

AngularJS fits the definition of a framework the best, even though it's much more lightweight than -a typical framework and that's why many confuse it with a library.

- +

FAQ

+

Questions

+

Why is this project called "AngularJS"? Why is the namespace called "ng"?

+

Because HTML has Angular brackets and "ng" sounds like "Angular".

+

Is AngularJS a library, framework, plugin or a browser extension?

+

AngularJS fits the definition of a framework the best, even though it's much more lightweight than +a typical framework and that's why many confuse it with a library.

AngularJS is 100% JavaScript, 100% client side and compatible with both desktop and mobile browsers. -So it's definitely not a plugin or some other native browser extension.

- -

Is AngularJS a templating system?

- +So it's definitely not a plugin or some other native browser extension.

+

Is AngularJS a templating system?

At the highest level, Angular does look like a just another templating system. But there is one important reason why the Angular templating system is different, that makes it very good fit for application development: bidirectional data binding. The template is compiled in the browser and -the compilation step produces a live view. This means you, the developers, don't need to write +the compilation step produces a live view. This means you, the developers, don't need to write code to constantly sync the view with the model and the model with the view as in other templating systems.

- -

Do I need to worry about security holes in AngularJS?

- +

Do I need to worry about security holes in AngularJS?

Like any other technology, AngularJS is not impervious to attack. Angular does, however, provide built-in protection from basic security holes including cross-site scripting and HTML injection attacks. AngularJS does round-trip escaping on all strings for you and even offers XSRF protection for server-side communication.

-

AngularJS was designed to be compatible with other security measures like Content Security Policy (CSP), HTTPS (SSL/TLS) and server-side authentication and authorization that greatly reduce the possible attack vectors and we highly recommended their use.

- -

Can I download the source, build, and host the AngularJS environment locally?

- +

Can I download the source, build, and host the AngularJS environment locally?

Yes. See instructions in downloading.

- -

What browsers does Angular work with?

- +

What browsers does Angular work with?

We run our extensive test suite against the following browsers: Safari, Chrome, Firefox, Opera, -IE8, IE9 and mobile browsers (Android, Chrome Mobile, iOS Safari).

- -

What's Angular's performance like?

- +IE8, IE9 and mobile browsers (Android, Chrome Mobile, iOS Safari). See Internet Explorer Compatibility for more details in supporting legacy IE browsers.

+

What's Angular's performance like?

The startup time heavily depends on your network connection, state of the cache, browser used and available hardware, but typically we measure bootstrap time in tens or hundreds of milliseconds.

-

The runtime performance will vary depending on the number and complexity of bindings on the page as well as the speed of your backend (for apps that fetch data from the backend). Just for an illustration we typically build snappy apps with hundreds or thousands of active bindings.

- -

How big is the angular.js file that I need to include?

- +

How big is the angular.js file that I need to include?

The size of the file is < 29KB compressed and minified.

- -

Can I use the open-source Closure Library with Angular?

- +

Can I use the open-source Closure Library with Angular?

Yes, you can use widgets from the Closure Library in Angular.

- -

Does Angular use the jQuery library?

- -

Yes, Angular can use jQuery if it's present in your app when the +

Does Angular use the jQuery library?

+

Yes, Angular can use jQuery if it's present in your app when the application is being bootstrapped. If jQuery is not present in your script path, Angular falls back to its own implementation of the subset of jQuery that we call jQLite.

- -

What is testability like in Angular?

- +

What is testability like in Angular?

Very testable and designed this way from ground up. It has an integrated dependency injection framework, provides mocks for many heavy dependencies (server-side communication). See service for details.

- -

How can I learn more about Angular?

- +

How can I learn more about Angular?

Watch the July 17, 2012 talk -"AngularJS Intro + Dependency Injection".

- -

How is Angular licensed?

- +"AngularJS Intro + Dependency Injection".

+

How is Angular licensed?

The MIT License.

- -

Can I download and use the Angular logo artwork?

- -

Yes! You can find design files in our github repository, under "angular.js/images/logo" -The logo design is licensed under a "Creative Commons Attribution-ShareAlike 3.0 Unported License". If you have some other use in mind, contact us.

- -

How can I get some AngularJS schwag?

- -

We often bring a few t-shirts and stickers to events where we're presenting. If you want to order your own, the folks who +

Can I download and use the Angular logo artwork?

+

Yes! You can find design files in our github repository, under "angular.js/images/logo" +The logo design is licensed under a "Creative Commons Attribution-ShareAlike 3.0 Unported License". If you have some other use in mind, contact us.

+

How can I get some AngularJS schwag?

+

We often bring a few t-shirts and stickers to events where we're presenting. If you want to order your own, the folks who make our schwag will be happy to do a custom run for you, based on our existing template. By using the design they have on file, -they'll waive the setup costs, and you can order any quantity you need.

- +they'll waive the setup costs, and you can order any quantity you need.

Stickers Contact Tom Witting (or anyone in sales) via email at tom@stickergiant.com, and tell him you want to order some AngularJS -stickers just like the ones in job #42711. You'll have to give them your own info for billing and shipping.

- +stickers just like the ones in job #42711. You'll have to give them your own info for billing and shipping.

As long as the design stays exactly the same, StickerGiant will give you a reorder discount.

- -

T-shirts -Contact sales at www.customink.com and tell them you want some shirts with design name "angularjs", -just like past order #2106371. You'll have to give them your own info for billing and shipping.

- -

As long as the design stays exactly the same, CustomInk won't charge for any set up fees, and they'll give you a reorder discount.

- -

Common Pitfalls

- +

Common Pitfalls

The Angular support channel (#angularjs on Freenode) sees a number of recurring pitfalls that new users of Angular fall into. This document aims to point them out before you discover them the hard way.

- -

DOM Manipulation

- +

DOM Manipulation

Stop trying to use jQuery to modify the DOM in controllers. Really. That includes adding elements, removing elements, retrieving their contents, showing and hiding them. Use built-in directives, or write your own where necessary, to do your DOM manipulation. See below about duplicating functionality.

- -

If you're struggling to break the habit, consider removing jQuery from your app. +

If you're struggling to break the habit, consider removing jQuery from your app. Really. Angular has the $http service and powerful directives that make it almost always unnecessary. -Angular's bundled jQLite has a handful of the features most commonly used in writing Angular directives, especially binding to events.

- -

Trying to duplicate functionality that already exists

- -

There's a good chance that your app isn't the first to require certain functionality. +Angular's bundled jQLite has a handful of the features most commonly used in writing Angular directives, especially binding to events.

+

Trying to duplicate functionality that already exists

+

There's a good chance that your app isn't the first to require certain functionality. There are a few pieces of Angular that are particularly likely to be reimplemented out of old habits.

-

ng-repeat

-

ng-repeat gets this a lot. -People try to use jQuery (see above) to add more elements to some container as they're fetched from the server. +People try to use jQuery (see above) to add more elements to some container as they're fetched from the server. No, bad dog. This is what ng-repeat is for, and it does its job very well. Store the data from the server in an array on your $scope, and bind it to the DOM with ng-repeat.

-

ng-show

-

ng-show gets this frequently too. Conditionally showing and hiding things using jQuery is a common pattern in other apps, but Angular has a better way. ng-show (and ng-hide) conditionally show and hide elements based on boolean expressions. Describe the conditions for showing and hiding an element in terms of $scope variables:

- -
<div ng-show="!loggedIn">Click <a href="#/login">here</a> to log in</div>
-
- +
<div ng-show="!loggedIn">Click <a href="#/login">here</a> to log in</div>

Note also the counterpart ng-hide and similar ng-disabled. Note especially the powerful ng-switch that should be used instead of several mutually exclusive ng-shows.

-

ng-class

-

ng-class is the last of the big three. Conditionally applying classes to elements is another thing commonly done manually using jQuery. Angular, of course, has a better way. -You can give ng-class a whitespace-separated set of class names, and then it's identical to ordinary class. -That's not very exciting, so there's a second syntax:

- -
<div ng-class="{ errorClass: isError, warningClass: isWarning, okClass: !isError && !isWarning }">...</div>
-
- +You can give ng-class a whitespace-separated set of class names, and then it's identical to ordinary class. +That's not very exciting, so there's a second syntax:

+
<div ng-class="{ errorClass: isError, warningClass: isWarning, okClass: !isError && !isWarning }">...</div>

Where you give ng-class an object, whose keys are CSS class names and whose values are conditional expressions using $scope variables. The element will then have all the classes whose conditions are truthy, and none of those whose conditions are falsy.

-

Note also the handy ng-class-even and ng-class-odd, and the related though somewhat different ng-style.

- -

$watch and $apply

- -

Angular's two-way data binding is the root of all awesome in Angular. -However, it's not magic, and there are some situations where you need to give it a nudge in the right direction.

- +

$watch and $apply

+

Angular's two-way data binding is the root of all awesome in Angular. +However, it's not magic, and there are some situations where you need to give it a nudge in the right direction.

When you bind a value to an element in Angular using ng-model, ng-repeat, etc., Angular creates a $watch on that value. Then whenever a value on a scope changes, all $watches observing that element are executed, and everything updates.

- -

Sometimes, usually when you're writing a custom directive, you will have to define your own $watch on a scope value to make the directive react to changes.

- -

On the flip side, sometimes you change a scope value in some code but the app doesn't react to it. +

Sometimes, usually when you're writing a custom directive, you will have to define your own $watch on a scope value to make the directive react to changes.

+

On the flip side, sometimes you change a scope value in some code but the app doesn't react to it. Angular checks for scope variable changes after pieces of your code have finished running; for example, when ng-click calls a function on your scope, Angular will check for changes and react. -However, some code is outside of Angular and you'll have to call scope.$apply() yourself to trigger the update. +However, some code is outside of Angular and you'll have to call scope.$apply() yourself to trigger the update. This is most commonly seen in event handlers in custom directives.

- -

Combining ng-repeat with other directives

- +

Combining ng-repeat with other directives

ng-repeat is extremely useful, one of the most powerful directives in Angular. However the transformation it applies to the DOM is substantial. Therefore applying other directives (such as ng-show, ng-controller and others) to the same element as ng-repeat generally leads to problems.

-

If you want to apply a directive to the whole repeat, wrap the repeat in a parent element and put it there. If you want to apply a directive to each inner piece of the repeat, put it on a child of the element with ng-repeat.

- -

$rootScope exists, but it can be used for evil

- +

$rootScope exists, but it can be used for evil

Scopes in Angular form a hierarchy, prototypically inheriting from a root scope at the top of the tree. Usually this can be ignored, since most views have a controller, and therefore a scope, of their own.

-

Occasionally there are pieces of data that you want to make global to the whole app. For these, you can inject $rootScope and set values on it like any other scope. Since the scopes inherit from the root scope, these values will be available to the expressions attached to directives like ng-show just like values on your local $scope.

-

Of course, global state sucks and you should use $rootScope sparingly, like you would (hopefully) use with global variables in any language. -In particular, don't use it for code, only data. -If you're tempted to put a function on $rootScope, it's almost always better to put it in a service that can be injected where it's needed, and more easily tested.

- -

Conversely, don't create a service whose only purpose in life is to store and return bits of data.

+In particular, don't use it for code, only data. +If you're tempted to put a function on $rootScope, it's almost always better to put it in a service that can be injected where it's needed, and more easily tested.

+

Conversely, don't create a service whose only purpose in life is to store and return bits of data.

+
diff --git a/lib/angular/docs/partials/misc/started.html b/lib/angular/docs/partials/misc/started.html old mode 100644 new mode 100755 index a7158ef..af98b04 --- a/lib/angular/docs/partials/misc/started.html +++ b/lib/angular/docs/partials/misc/started.html @@ -1,11 +1,11 @@ -

- + Improve this doc

+
+

-
Improve this doc

We want you to have an easy time while starting to use Angular. We've put together the following steps on your path to +

We want you to have an easy time while starting to use Angular. We've put together the following steps on your path to becoming an Angular expert.

-
    -
  1. Read the conceptual overview.
    Understand Angular's vocabulary and how all the Angular +
  2. Read the conceptual overview.
    Understand Angular's vocabulary and how all the Angular components work together.
  3. Do the AngularJS Tutorial.
    Walk end-to-end through building and application complete with tests on top of a node.js web server. Covers every major AngularJS feature and show you how to set up your development @@ -13,28 +13,23 @@ environment.
  4. Download or clone the Seed App project template.
    Gives you a starter app with a directory layout, test harness, and scripts to begin building your application.
-

Further Steps

- -

Watch Videos

- -

If you haven’t had a chance to watch the videos from the homepage, please check out: -* Introduction to AngularJS -* Creating Directives -* Communicating with Servers

- +

Watch Videos

+

If you haven’t had a chance to watch the videos from the homepage, please check out:

+

And visit our YouTube channel for more AngularJS video presentations and tutorials.

- -

Subscribe

- +

Subscribe

- -

Read more

- +

Read more

The AngularJS documentation includes the Developer Guide covering concepts and the -API Reference for syntax and usage.

+API Reference for syntax and usage.

+
diff --git a/lib/angular/docs/partials/tutorial/index.html b/lib/angular/docs/partials/tutorial/index.html old mode 100644 new mode 100755 index 5fed017..29899d7 --- a/lib/angular/docs/partials/tutorial/index.html +++ b/lib/angular/docs/partials/tutorial/index.html @@ -1,16 +1,14 @@ -

- + Improve this doc

+
+

-
Improve this doc

A great way to get introduced to AngularJS is to work through this tutorial, which walks you through +

A great way to get introduced to AngularJS is to work through this tutorial, which walks you through the construction of an AngularJS web app. The app you will build is a catalog that displays a list of Android devices, lets you filter the list to see only devices that interest you, and then view details for any device.

-

-

Work through the tutorial to see how Angular makes browsers smarter — without the use of extensions or plug-ins. As you work through the tutorial, you will:

-
  • See examples of how to use client-side data binding and dependency injection to build dynamic views of data that change immediately in response to user actions.
  • @@ -19,11 +17,8 @@ views of data that change immediately in response to user actions.
  • Learn how to use Angular services to make common web tasks, such as getting data into your app, easier.
-

And all of this works in any browser without modification to the browser!

-

When you finish the tutorial you will be able to:

-
  • Create a dynamic application that works in any browser.
  • Define the differences between Angular and common JavaScript frameworks.
  • @@ -32,81 +27,77 @@ easier.
  • Create and run tests.
  • Identify resources for learning more about AngularJS.
-

The tutorial guides you through the entire process of building a simple application, including writing and running unit and end-to-end tests. Experiments at the end of each step provide suggestions for you to learn more about AngularJS and the application you are building.

-

You can go through the whole tutorial in a couple of hours or you may want to spend a pleasant day -really digging into it. If you're looking for a shorter introduction to AngularJS, check out the +really digging into it. If you're looking for a shorter introduction to AngularJS, check out the Getting Started document.

-

Working with the code

-

You can follow this tutorial and hack on the code in either the Mac/Linux or the Windows environment. The tutorial relies on the use of Git versioning system for source code management. -You don't need to know anything about Git to follow the tutorial. Select one of the tabs below +You don't need to know anything about Git to follow the tutorial. Select one of the tabs below and follow the instructions for setting up your computer.

-
    -
  1. You will need Node.js and Testacular to run unit tests, so please verify that you have +

  2. You will need Node.js and Karma to run unit tests, so please verify that you have Node.js v0.8 or better installed and that the node executable is on your PATH by running the following command in a terminal window:

    node --version
    -

    Additionally install Testacular if you - don't have it already:

    -
    npm install -g testacular
    -
  3. You'll also need Git, which you can get from +

    Additionally install Karma if you + don't have it already:

    +
    npm install -g karma
    +
  4. You'll also need Git, which you can get from the Git site.

  5. -
  6. Clone the angular-phonecat repository located at Github by running the following command:

    +
  7. Clone the angular-phonecat repository located at a +href="https://github.com/angular/angular-phonecat"Github by running the following command:

    git clone git://github.com/angular/angular-phonecat.git

    This command creates the angular-phonecat directory in your current directory.

  8. Change your current directory to angular-phonecat:

    cd angular-phonecat
    -

    The tutorial instructions assume you are running all commands from the angular-phonecat +

    The tutorial instructions assume you are running all commands from the angular-phonecat directory.

  9. You will need an http server running on your system. Mac and Linux machines typically -have Apache pre-installed, but If you don't already have one installed, you can use node +have Apache pre-installed, but If you don't already have one installed, you can use node to run scripts/web-server.js, a simple bundled http server.

-

+
    -
  1. You will need Node.js and Testacular to run unit tests, so please verify that you have +

  2. You will need Node.js and Karma to run unit tests, so please verify that you have Node.js v0.8 or better installed and that the node executable is on your PATH by running the following command in a terminal window:

    node --version
    -

    Additionally install Testacular if you - don't have it already:

    -
    npm install -g testacular
    +

    Additionally install Karma if you + don't have it already:

    +
    npm install -g karma
  3. -
  4. You'll also need Git, which you can get from +

  5. You'll also need Git, which you can get from the Git site.

  6. Clone the angular-phonecat repository located at Github by running the following command:

    git clone git://github.com/angular/angular-phonecat.git
    -

    This command creates the angular-phonecat directory in your current directory.

  7. -
  8. Change your current directory to angular-phonecat.

    +

    This command creates the angular-phonecat directory in your current directory.

  9. +
  10. Change your current directory to angular-phonecat:

    cd angular-phonecat
    -

    The tutorial instructions assume you are running all commands from the angular-phonecat +

    The tutorial instructions assume you are running all commands from the angular-phonecat directory.

    You should run all git commands from Git bash.

    Other commands like test.bat or e2e-test.bat should be executed from the Windows command line.

  11. -
  12. You need an http server running on your system, but if you don't already have one +

  13. You need an http server running on your system, but if you don't already have one already installed, you can use node to run scripts\web-server.js, a simple bundled http server.

-

+

The last thing to do is to make sure your computer has a web browser and a good text editor -installed. Now, let's get some cool stuff done!

- -

Get Started!

+installed. Now, let's get some cool stuff done!

+

Get Started!

+
diff --git a/lib/angular/docs/partials/tutorial/step_00.html b/lib/angular/docs/partials/tutorial/step_00.html old mode 100644 new mode 100755 index 5a3df81..27831c1 --- a/lib/angular/docs/partials/tutorial/step_00.html +++ b/lib/angular/docs/partials/tutorial/step_00.html @@ -1,16 +1,17 @@ -

- + Improve this doc

+
+

-
Improve this doc
    +
      +

      You are now ready to build the AngularJS phonecat app. In this step, you will become familiar with the most important source code files, learn how to start the development servers bundled with angular-seed, and run the application in the browser.

      -
        -
      1. In angular-phonecat directory, run this command:

        +
      2. In angular-phonecat directory, run this command:

        git checkout -f step-0

        This resets your workspace to step 0 of the tutorial app.

        You must repeat this for every future step in the tutorial and change the number to @@ -22,9 +23,10 @@ angular-seed, and run the application in the browser.

      3. For node.js users:
        1. In a separate terminal tab or window, run -./scripts/web-server.js to start the web server.
        2. -
        3. Open a browser window for the app and navigate to http://localhost:8000/app/index.html
        4. +node ./scripts/web-server.js to start the web server. +
        5. Open a browser window for the app and navigate to a +href="http://localhost:8000/app/index.html"http://localhost:8000/app/index.html
      4. For other http servers: @@ -32,7 +34,7 @@ href="http://localhost:8000/app/index.html">http://localhost:8000/app/index.html
      5. Configure the server to serve the files in the angular-phonecat directory.
      6. Navigate in your browser to -http://localhost:[port-number]/[context-path]/app/index.html.
      7. +http://localhost:[port-number]/[context-path]/app/index.html.
      @@ -43,7 +45,7 @@ directory.
        -
      1. Open Git bash and run this command (in angular-phonecat directory):

        +
      2. Open Git bash and run this command (in angular-phonecat directory):

        git checkout -f step-0

        This resets your workspace to step 0 of the tutorial app.

        You must repeat this for every future step in the tutorial and change the number to @@ -55,8 +57,9 @@ directory.

        1. In a separate terminal tab or window, run node scripts\web-server.js to start the web server.
        2. -
        3. Open a browser window for the app and navigate to http://localhost:8000/app/index.html
        4. +
        5. Open a browser window for the app and navigate to a +href="http://localhost:8000/app/index.html"http://localhost:8000/app/index.html
      3. For other http servers: @@ -64,7 +67,7 @@ href="http://localhost:8000/app/index.html">http://localhost:8000/app/index.html
      4. Configure the server to serve the files in the angular-phonecat directory.
      5. Navigate in your browser to -http://localhost:[port-number]/[context-path]/app/index.html.
      6. +http://localhost:[port-number]/[context-path]/app/index.html.
      @@ -73,11 +76,10 @@ directory.
      -

      You can now see the page in your browser. It's not very exciting, but that's OK.

      -

      The HTML page that displays "Nothing here yet!" was constructed with the HTML code shown below. +

      You can now see the page in your browser. It's not very exciting, but that's OK.

      +

      The HTML page that displays "Nothing here yet!" was constructed with the HTML code shown below. The code contains some key Angular elements that we will need going forward.

      -

      app/index.html:

       <!doctype html>
      @@ -96,111 +98,86 @@ The code contains some key Angular elements that we will need going forward.

      </body> </html>
      - -

      What is the code doing?

      - +

      What is the code doing?

      • ng-app directive:

        - -
          <html ng-app>
        -
        - +
            <html ng-app>

        The ng-app attribute represents an Angular directive (named ngApp; Angular uses name-with-dashes for attribute names and camelCase for the corresponding directive name) used to flag an element which Angular should consider to be the root element of our application. This gives application developers the freedom to tell Angular if the entire html page or only a -portion of it should be treated as the Angular application.

      • +portion of it should be treated as the Angular application.

        +
      • AngularJS script tag:

        - -
          <script src="lib/angular/angular.js">
        -
        - +
            <script src="lib/angular/angular.js">

        This code downloads the angular.js script and registers a callback that will be executed by the browser when the containing HTML page is fully downloaded. When the callback is executed, Angular looks for the ngApp directive. If Angular finds the directive, it will bootstrap the application with the root of the application DOM -being the element on which the ngApp directive was defined.

      • +being the element on which the ngApp directive was defined.

        +
      • Double-curly binding with an expression:

        - -
          Nothing here {{'yet' + '!'}}
        -
        - -

        This line demonstrates the core feature of Angular's templating capabilities – a binding, denoted -by double-curlies {{ }} as well as a simple expression 'yet' + '!' used in this binding.

        - +
            Nothing here {{'yet' + '!'}}
        +

        This line demonstrates the core feature of Angular's templating capabilities – a binding, denoted +by double-curlies {{ }} as well as a simple expression 'yet' + '!' used in this binding.

        The binding tells Angular that it should evaluate an expression and insert the result into the -DOM in place of the binding. Rather than a one-time insert, as we'll see in the next steps, a +DOM in place of the binding. Rather than a one-time insert, as we'll see in the next steps, a binding will result in efficient continuous updates whenever the result of the expression evaluation changes.

        -

        Angular expression is a JavaScript-like code snippet that is evaluated by Angular in the context of the current model scope, rather than within the scope of the global context (window).

        -

        As expected, once this template is processed by Angular, the html page contains the text: -"Nothing here yet!".

      • +"Nothing here yet!".

        +
      - -

      Bootstrapping AngularJS apps

      - +

      Bootstrapping AngularJS apps

      Bootstrapping AngularJS apps automatically using the ngApp directive is very easy and suitable for most cases. In advanced cases, such as when using script loaders, you can use imperative / manual way to bootstrap the app.

      -

      There are 3 important things that happen during the app bootstrap:

      -
      1. The injector that will be used for dependency injection -within this app is created.

      2. +within this app is created.

        +
      3. The injector will then create the root scope that will -become the context for the model of our application.

      4. -
      5. Angular will then "compile" the DOM starting at the ngApp root element, processing any -directives and bindings found along the way.

      6. +become the context for the model of our application.

        + +
      7. Angular will then "compile" the DOM starting at the ngApp root element, processing any +directives and bindings found along the way.

        +
      -

      Once an application is bootstrapped, it will then wait for incoming browser events (such as mouse click, key press or incoming HTTP response) that might change the model. Once such an event occurs, Angular detects if it caused any model changes and if changes are found, Angular will reflect them in the view by updating all of the affected bindings.

      -

      The structure of our application is currently very simple. The template contains just one directive and one static binding, and our model is empty. That will soon change!

      -

      - -

      What are all these files in my working directory?

      - +

      What are all these files in my working directory?

      Most of the files in your working directory come from the angular-seed project which is typically used to bootstrap new Angular projects. The seed project includes the latest Angular libraries, test libraries, scripts and a simple example app, all pre-configured for developing a typical web app.

      -

      For the purposes of this tutorial, we modified the angular-seed with the following changes:

      -
      • Removed the example app
      • Added phone images to app/img/phones/
      • Added phone data files (JSON) to app/phones/
      • Added Bootstrap files to app/css/ and app/img/
      - -

      Experiments

      - +

      Experiments

      • Try adding a new expression to the index.html that will do some math:

        - -
          <p>1 + 2 = {{ 1 + 2 }}</p>
        -
      • +
            <p>1 + 2 = {{ 1 + 2 }}</p>
        +
      - -

      Summary

      - -

      Now let's go to step 1 and add some content to the web app.

      - +

      Summary

      +

      Now let's go to step 1 and add some content to the web app.

        Note: During the bootstrap the injector and the root scope will then be associated with the - element on which the `ngApp` directive was declared, so when debugging the app you can retrieve - them from browser console via `angular.element(rootElement).scope()` and - `angular.element(rootElement).injector()`. -
        + element on which the ngApp directive was declared, so when debugging the app you can retrieve + them from browser console via angular.element(rootElement).scope() and + angular.element(rootElement).injector(). +
        diff --git a/lib/angular/docs/partials/tutorial/step_01.html b/lib/angular/docs/partials/tutorial/step_01.html old mode 100644 new mode 100755 index fe06ea6..56103cd --- a/lib/angular/docs/partials/tutorial/step_01.html +++ b/lib/angular/docs/partials/tutorial/step_01.html @@ -1,21 +1,20 @@ -

        - + Improve this doc

        +
        +

        -
        Improve this doc
          +
            +

            In order to illustrate how Angular enhances standard HTML, you will create a purely static HTML page and then examine how we can turn this HTML code into a template that Angular will use to dynamically display the same result with any set of data.

            -

            In this step you will add some basic information about two cell phones to an HTML page.

            -
            +

            The page now contains a list with information about two phones.

            -

            The most important changes are listed below. You can see the full diff on GitHub:

            -

            app/index.html:

               <ul>
            @@ -33,18 +32,12 @@ dynamically display the same result with any set of data.

            </li> </ul>
            - -

            Experiments

            - +

            Experiments

            • Try adding more static HTML to index.html. For example:

              - -
                <p>Total number of phones: 2</p>
              -
            • +
                  <p>Total number of phones: 2</p>
              +
            - -

            Summary

            - -

            This addition to your app uses static HTML to display the list. Now, let's go to step 2 to learn how to use AngularJS to dynamically generate the same list.

            - -
              +

              Summary

              +

              This addition to your app uses static HTML to display the list. Now, let's go to step 2 to learn how to use AngularJS to dynamically generate the same list.

              +
                diff --git a/lib/angular/docs/partials/tutorial/step_02.html b/lib/angular/docs/partials/tutorial/step_02.html old mode 100644 new mode 100755 index 8811679..fb53b7b --- a/lib/angular/docs/partials/tutorial/step_02.html +++ b/lib/angular/docs/partials/tutorial/step_02.html @@ -1,30 +1,26 @@ -

                - + Improve this doc

                +
                +

                -
                Improve this doc
                  +
                    -

                    Now it's time to make the web page dynamic — with AngularJS. We'll also add a test that verifies the + +

                    Now it's time to make the web page dynamic — with AngularJS. We'll also add a test that verifies the code for the controller we are going to add.

                    -

                    There are many ways to structure the code for an application. For Angular apps, we encourage the -use of the Model-View-Controller (MVC) design pattern to decouple the code and to separate concerns. With that in mind, let's use a +use of the Model-View-Controller (MVC) design pattern to decouple the code and to separate concerns. With that in mind, let's use a little Angular and JavaScript to add model, view, and controller components to our app.

                    -
                    +

                    The app now contains a list with three phones.

                    -

                    The most important changes are listed below. You can see the full diff on GitHub:

                    - -

                    View and Template

                    - +

                    View and Template

                    In Angular, the view is a projection of the model through the HTML template. This means that whenever the model changes, Angular refreshes the appropriate binding points, which updates the view.

                    -

                    The view component is constructed by Angular from this template:

                    -

                    app/index.html:

                     <html ng-app>
                    @@ -44,28 +40,24 @@ view.

                    </body> </html>
                    -

                    We replaced the hard-coded phone list with the ngRepeat directive and two Angular expressions enclosed in curly braces: {{phone.name}} and {{phone.snippet}}:

                    -
                      -
                    • The ng-repeat="phone in phones" statement in the <li> tag is an Angular repeater. The +

                    • The ng-repeat="phone in phones" statement in the <li> tag is an Angular repeater. The repeater tells Angular to create a <li> element for each phone in the list using the first <li> -tag as the template.

                    • -
                    • As we've learned in step 0, the curly braces around phone.name and phone.snippet denote +tag as the template.

                      +
                    • +
                    • As we've learned in step 0, the curly braces around phone.name and phone.snippet denote bindings. As opposed to evaluating constants, these expressions are referring to our application model, which was set up in our PhoneListCtrl controller.

                      - -

                    • +
                      <img class="diagram" src="img/tutorial/tutorial_02.png">
                      +
                    - -

                    Model and Controller

                    - +

                    Model and Controller

                    The data model (a simple array of phones in object literal notation) is instantiated within the PhoneListCtrl controller:

                    -

                    app/js/controllers.js:

                     function PhoneListCtrl($scope) {
                    @@ -79,36 +71,31 @@ function PhoneListCtrl($scope) {
                       ];
                     }
                     
                    -

                    Although the controller is not yet doing very much controlling, it is playing a crucial role. By providing context for our data model, the controller allows us to establish data-binding between the model and the view. We connected the dots between the presentation, data, and logic components as follows:

                    -
                    • PhoneListCtrl — the name of our controller function (located in the JavaScript file controllers.js), matches the value of the ngController directive located -on the <body> tag.

                    • +on the <body> tag.

                      +
                    • The phone data is then attached to the scope ($scope) that was injected into our controller function. The controller scope is a prototypical descendant of the root scope that was created when the application bootstrapped. This controller scope is available to all bindings located within -the <body ng-controller="PhoneListCtrl"> tag.

                      - +the <body ng-controller="PhoneListCtrl"> tag.

                      The concept of a scope in Angular is crucial; a scope can be seen as the glue which allows the template, model and controller to work together. Angular uses scopes, along with the information contained in the template, data model, and controller, to keep models and views separate, but in sync. Any changes made to the model are reflected in the view; any changes that occur in the view are reflected in the model.

                      - -

                      To learn more about Angular scopes, see the angular scope documentation.

                    • +

                      To learn more about Angular scopes, see the angular scope documentation.

                      +
                    - -

                    Tests

                    - -

                    The "Angular way" makes it easy to test code as it is being developed. Take a look at the following +

                    Tests

                    +

                    The "Angular way" makes it easy to test code as it is being developed. Take a look at the following unit test for your newly created controller:

                    -

                    test/unit/controllersSpec.js:

                     describe('PhoneCat controllers', function() {
                    @@ -124,71 +111,58 @@ describe('PhoneCat controllers', function() {
                       });
                     });
                     
                    - -

                    The test verifies that we have three records in the phones array and the example demonstrates how -easy it is to create a unit test for code in Angular. Since testing is such a critical part of -software development, we make it easy to create tests in Angular so that developers are encouraged -to write them.

                    - -

                    Angular developers prefer the syntax of Jasmine's Behavior-driven Development (BDD) framework when +

                    The test instantiates our PhoneListCtrl and verifies that its phones array property contains three +records. This example demonstrates how easy it is to create a unit test for code in Angular. Since +testing is such a critical part of software development, we make it easy to create tests in Angular +so that developers are encouraged to write them.

                    +

                    Angular developers prefer the syntax of Jasmine's Behavior-driven Development (BDD) framework when writing tests. Although Angular does not require you to use Jasmine, we wrote all of the tests in this tutorial in Jasmine. You can learn about Jasmine on the Jasmine home page and on the Jasmine wiki.

                    - -

                    The angular-seed project is pre-configured to run all unit tests using Testacular. To run the test, do the following:

                    - +

                    The angular-seed project is pre-configured to run all unit tests using Karma. To run the test, do the following:

                    1. In a separate terminal window or tab, go to the angular-phonecat directory and run -./scripts/test.sh to start the Testacular server.

                    2. -
                    3. Testacular will start a new instance of Chrome browser automatically. Just ignore it and let it run in -the background. Testacular will use this browser for test execution.

                    4. +./scripts/test.sh to start the Karma server (the config file necessary to start the server +is located at ./config/karma.conf.js).

                      + +
                    5. Karma will start a new instance of Chrome browser automatically. Just ignore it and let it run in +the background. Karma will use this browser for test execution.

                      +
                    6. You should see the following or similar output in the terminal:

                      - -
                           info: Testacular server started at http://localhost:9876/
                      -     info (launcher): Starting  browser "Chrome"
                      -     info (Chrome 22.0): Connected on socket id tPUm9DXcLHtZTKbAEO-n
                      -     Chrome 22.0: Executed 1 of 1 SUCCESS (0.093 secs / 0.004 secs)
                      -
                      - -

                      Yay! The test passed! Or not...

                    7. -
                    8. To rerun the tests, just change any of the source or test files. Testacular will notice the change -and will rerun the tests for you. Now isn't that sweet?

                    9. +
                            info: Karma server started at http://localhost:9876/
                      +      info (launcher): Starting  browser "Chrome"
                      +      info (Chrome 22.0): Connected on socket id tPUm9DXcLHtZTKbAEO-n
                      +      Chrome 22.0: Executed 1 of 1 SUCCESS (0.093 secs / 0.004 secs)
                      +

                      Yay! The test passed! Or not...

                      + +
                    10. To rerun the tests, just change any of the source or test files. Karma will notice the change +and will rerun the tests for you. Now isn't that sweet?

                      +
                    - -

                    Experiments

                    - +

                    Experiments

                    • Add another binding to index.html. For example:

                      - -
                        <p>Total number of phones: {{phones.length}}</p>
                      -
                    • +
                          <p>Total number of phones: {{phones.length}}</p>
                      +
                    • Create a new model property in the controller and bind to it from the template. For example:

                      - -
                        $scope.hello = "Hello, World!"
                      -
                      - -

                      Refresh your browser to make sure it says, "Hello, World!"

                    • +
                          $scope.hello = "Hello, World!"
                      +

                      Refresh your browser to make sure it says, "Hello, World!"

                      +
                    • Create a repeater that constructs a simple table:

                      - -
                        <table>
                      -    <tr><th>row number</th></tr>
                      -    <tr ng-repeat="i in [0, 1, 2, 3, 4, 5, 6, 7]"><td>{{i}}</td></tr>
                      -  </table>
                      -
                      - +
                          <table>
                      +      <tr><th>row number</th></tr>
                      +      <tr ng-repeat="i in [0, 1, 2, 3, 4, 5, 6, 7]"><td>{{i}}</td></tr>
                      +    </table>

                      Now, make the list 1-based by incrementing i by one in the binding:

                      - -
                        <table>
                      -    <tr><th>row number</th></tr>
                      -    <tr ng-repeat="i in [0, 1, 2, 3, 4, 5, 6, 7]"><td>{{i+1}}</td></tr>
                      -  </table>
                      -
                    • -
                    • Make the unit test fail by changing the toBe(3) statement to toBe(4).

                    • +
                          <table>
                      +      <tr><th>row number</th></tr>
                      +      <tr ng-repeat="i in [0, 1, 2, 3, 4, 5, 6, 7]"><td>{{i+1}}</td></tr>
                      +    </table>
                      + +
                    • Make the unit test fail by changing the toBe(3) statement to toBe(4).

                      +
                    - -

                    Summary

                    - +

                    Summary

                    You now have a dynamic app that features separate model, view, and controller components, and you -are testing as you go. Now, let's go to step 3 to learn how to add full text search +are testing as you go. Now, let's go to step 3 to learn how to add full text search to the app.

                    - -
                      +
                        diff --git a/lib/angular/docs/partials/tutorial/step_03.html b/lib/angular/docs/partials/tutorial/step_03.html old mode 100644 new mode 100755 index e12788d..f2eecaa --- a/lib/angular/docs/partials/tutorial/step_03.html +++ b/lib/angular/docs/partials/tutorial/step_03.html @@ -1,28 +1,25 @@ -

                        - + Improve this doc

                        +
                        +

                        -
                        Improve this doc
                          +
                            -

                            We did a lot of work in laying a foundation for the app in the last step, so now we'll do something + +

                            We did a lot of work in laying a foundation for the app in the last step, so now we'll do something simple; we will add full text search (yes, it will be simple!). We will also write an end-to-end test, because a good end-to-end test is a good friend. It stays with your app, keeps an eye on it, and quickly detects regressions.

                            -
                            +

                            The app now has a search box. Notice that the phone list on the page changes depending on what a user types into the search box.

                            -

                            The most important differences between Steps 2 and 3 are listed below. You can see the full diff on GitHub:

                            - -

                            Controller

                            - +

                            Controller

                            We made no changes to the controller.

                            - -

                            Template

                            - +

                            Template

                            app/index.html:

                               <div class="container-fluid">
                            @@ -47,41 +44,33 @@ user types into the search box.

                            </div> </div>
                            - -

                            We added a standard HTML <input> tag and used Angular's +

                            We added a standard HTML <input> tag and used Angular's $filter function to process the input for the ngRepeat directive.

                            -

                            This lets a user enter search criteria and immediately see the effects of their search on the phone list. This new code demonstrates the following:

                            -
                            • Data-binding: This is one of the core features in Angular. When the page loads, Angular binds the name of the input box to a variable of the same name in the data model and keeps the two in sync.

                              -

                              In this code, the data that a user types into the input box (named query) is immediately available as a filter input in the list repeater (phone in phones | filter:query). When -changes to the data model cause the repeater's input to change, the repeater efficiently updates +changes to the data model cause the repeater's input to change, the repeater efficiently updates the DOM to reflect the current state of the model.

                              - -

                            • +
                              <img  class="diagram" src="img/tutorial/tutorial_03.png">
                              +
                            • Use of the filter filter: The filter function uses the query value to create a new array that contains only those records that match the query.

                              -

                              ngRepeat automatically updates the view in response to the changing number of phones returned -by the filter filter. The process is completely transparent to the developer.

                            • +by the filter filter. The process is completely transparent to the developer.

                              +
                            - -

                            Test

                            - +

                            Test

                            In Step 2, we learned how to write and run unit tests. Unit tests are perfect for testing -controllers and other components of our application written in JavaScript, but they can't easily +controllers and other components of our application written in JavaScript, but they can't easily test DOM manipulation or the wiring of our application. For these, an end-to-end test is a much better choice.

                            - -

                            The search feature was fully implemented via templates and data-binding, so we'll write our first +

                            The search feature was fully implemented via templates and data-binding, so we'll write our first end-to-end test, to verify that the feature works.

                            -

                            test/e2e/scenarios.js:

                             describe('PhoneCat App', function() {
                            @@ -105,63 +94,44 @@ describe('PhoneCat App', function() {
                               });
                             });
                             
                            -

                            Even though the syntax of this test looks very much like our controller unit test written with -Jasmine, the end-to-end test uses APIs of Angular's end-to-end test runner.

                            - +Jasmine, the end-to-end test uses APIs of Angular's end-to-end test runner.

                            To run the end-to-end test, open one of the following in a new browser tab:

                            - - -

                            Previously we've seen how Testacular can be used to execute unit tests. Well, it can also run the +

                            Previously we've seen how Karma can be used to execute unit tests. Well, it can also run the end-to-end tests! Use ./scripts/e2e-test.sh script for that. End-to-end tests are slow, so unlike -with unit tests, Testacular will exit after the test run and will not automatically rerun the test +with unit tests, Karma will exit after the test run and will not automatically rerun the test suite on every file change. To rerun the test suite, execute the e2e-test.sh script again.

                            -

                            This test verifies that the search box and the repeater are correctly wired together. Notice how easy it is to write end-to-end tests in Angular. Although this example is for a simple test, it really is that easy to set up any functional, readable, end-to-end test.

                            - -

                            Experiments

                            - +

                            Experiments

                            - -

                            Summary

                            - -

                            We have now added full text search and included a test to verify that search works! Now let's go on +

                            Summary

                            +

                            We have now added full text search and included a test to verify that search works! Now let's go on to step 4 to learn how to add sorting capability to the phone app.

                            - -
                              +
                                diff --git a/lib/angular/docs/partials/tutorial/step_04.html b/lib/angular/docs/partials/tutorial/step_04.html old mode 100644 new mode 100755 index 44d84a8..52ab12e --- a/lib/angular/docs/partials/tutorial/step_04.html +++ b/lib/angular/docs/partials/tutorial/step_04.html @@ -1,23 +1,22 @@ -

                                - + Improve this doc

                                +
                                +

                                -
                                Improve this doc
                                  +
                                    +

                                    In this step, you will add a feature to let your users control the order of the items in the phone list. The dynamic ordering is implemented by creating a new model property, wiring it together with the repeater, and letting the data binding magic do the rest of the work.

                                    -
                                    +

                                    You should see that in addition to the search box, the app displays a drop down menu that allows users to control the order in which the phones are listed.

                                    -

                                    The most important differences between Steps 3 and 4 are listed below. You can see the full diff on GitHub:

                                    - -

                                    Template

                                    - +

                                    Template

                                    app/index.html:

                                       Search: <input ng-model="query">
                                    @@ -35,29 +34,24 @@ users to control the order in which the phones are listed.

                                    </li> </ul>
                                    -

                                    We made the following changes to the index.html template:

                                    -
                                    • First, we added a <select> html element named orderProp, so that our users can pick from the two provided sorting options.

                                      - -

                                    • +
                                      <img  class="diagram" src="img/tutorial/tutorial_04.png">
                                      +
                                    • We then chained the filter filter with orderBy filter to further process the input into the repeater. orderBy is a filter that takes an input -array, copies it and reorders the copy which is then returned.

                                    • +array, copies it and reorders the copy which is then returned.

                                      +
                                    -

                                    Angular creates a two way data-binding between the select element and the orderProp model. orderProp is then used as the input for the orderBy filter.

                                    -

                                    As we discussed in the section about data-binding and the repeater in step 3, whenever the model -changes (for example because a user changes the order with the select drop down menu), Angular's +changes (for example because a user changes the order with the select drop down menu), Angular's data-binding will cause the view to automatically update. No bloated DOM manipulation code is necessary!

                                    - -

                                    Controller

                                    - +

                                    Controller

                                    app/js/controllers.js:

                                     function PhoneListCtrl($scope) {
                                    @@ -76,27 +70,24 @@ function PhoneListCtrl($scope) {
                                       $scope.orderProp = 'age';
                                     }
                                     
                                    -
                                    • We modified the phones model - the array of phones - and added an age property to each phone -record. This property is used to order phones by age.

                                    • +record. This property is used to order phones by age.

                                      +
                                    • We added a line to the controller that sets the default value of orderProp to age. If we had not set the default value here, the model would stay uninitialized until our user would pick an option from the drop down menu.

                                      -

                                      This is a good time to talk about two-way data-binding. Notice that when the app is loaded in the -browser, "Newest" is selected in the drop down menu. This is because we set orderProp to 'age' +browser, "Newest" is selected in the drop down menu. This is because we set orderProp to 'age' in the controller. So the binding works in the direction from our model to the UI. Now if you -select "Alphabetically" in the drop down menu, the model will be updated as well and the phones +select "Alphabetically" in the drop down menu, the model will be updated as well and the phones will be reordered. That is the data-binding doing its job in the opposite direction — from the UI -to the model.

                                    • +to the model.

                                      +
                                    - -

                                    Test

                                    - -

                                    The changes we made should be verified with both a unit test and an end-to-end test. Let's look at +

                                    Test

                                    +

                                    The changes we made should be verified with both a unit test and an end-to-end test. Let's look at the unit test first.

                                    -

                                    test/unit/controllersSpec.js:

                                     describe('PhoneCat controllers', function() {
                                    @@ -121,19 +112,12 @@ describe('PhoneCat controllers', function() {
                                       });
                                     });
                                     
                                    -

                                    The unit test now verifies that the default ordering property is set.

                                    - -

                                    We used Jasmine's API to extract the controller construction into a beforeEach block, which is +

                                    We used Jasmine's API to extract the controller construction into a beforeEach block, which is shared by all tests in the parent describe block.

                                    - -

                                    You should now see the following output in the Testacular tab:

                                    - -
                                        Chrome 22.0: Executed 2 of 2 SUCCESS (0.021 secs / 0.001 secs)
                                    -
                                    - -

                                    Let's turn our attention to the end-to-end test.

                                    - +

                                    You should now see the following output in the Karma tab:

                                    +
                                        Chrome 22.0: Executed 2 of 2 SUCCESS (0.021 secs / 0.001 secs)
                                    +

                                    Let's turn our attention to the end-to-end test.

                                    test/e2e/scenarios.js:

                                     ...
                                    @@ -154,25 +138,22 @@ shared by all tests in the parent describe block.

                                    }); ...
                                    -

                                    The end-to-end test verifies that the ordering mechanism of the select box is working correctly.

                                    -

                                    You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test -runner.html to see the tests run, or you can see them running on Angular's server.

                                    - -

                                    Experiments

                                    - +runner.html to see the tests run, or you can see them running on Angular's server.

                                    +

                                    Experiments

                                    • In the PhoneListCtrl controller, remove the statement that sets the orderProp value and -you'll see that Angular will temporarily add a new "unknown" option to the drop-down list and the -ordering will default to unordered/natural order.

                                    • +you'll see that Angular will temporarily add a new "unknown" option to the drop-down list and the +ordering will default to unordered/natural order.

                                      +
                                    • Add an {{orderProp}} binding into the index.html template to display its current value as -text.

                                    • +text.

                                      + +
                                    • Reverse the sort order by adding a - symbol before the sorting value: <option value="-age">Oldest</option>

                                      +
                                    - -

                                    Summary

                                    - +

                                    Summary

                                    Now that you have added list sorting and tested the app, go to step 5 to learn about Angular services and how Angular uses dependency injection.

                                    - -
                                      +
                                        diff --git a/lib/angular/docs/partials/tutorial/step_05.html b/lib/angular/docs/partials/tutorial/step_05.html old mode 100644 new mode 100755 index f48e9e0..59440c3 --- a/lib/angular/docs/partials/tutorial/step_05.html +++ b/lib/angular/docs/partials/tutorial/step_05.html @@ -1,23 +1,21 @@ -

                                        - + Improve this doc

                                        +
                                        +

                                        -
                                        Improve this doc
                                          +
                                            -

                                            Enough of building an app with three phones in a hard-coded dataset! Let's fetch a larger dataset -from our server using one of angular's built-in services called $http. We will use angular's dependency injection (DI) to provide the service to the PhoneListCtrl controller.

                                            +

                                            Enough of building an app with three phones in a hard-coded dataset! Let's fetch a larger dataset +from our server using one of angular's built-in services called $http. We will use angular's dependency injection (DI) to provide the service to the PhoneListCtrl controller.

                                            +

                                            You should now see a list of 20 phones.

                                            -

                                            The most important changes are listed below. You can see the full diff on GitHub:

                                            - -

                                            Data

                                            - +

                                            Data

                                            The app/phones/phones.json file in your project is a dataset that contains a larger list of phones stored in the JSON format.

                                            -

                                            Following is a sample of the file:

                                             [
                                            @@ -31,19 +29,15 @@ stored in the JSON format.

                                            ... ]
                                            - -

                                            Controller

                                            - -

                                            We'll use angular's $http service in our controller to make an HTTP +

                                            Controller

                                            +

                                            We'll use angular's $http service in our controller to make an HTTP request to your web server to fetch the data in the app/phones/phones.json file. $http is just -one of several built-in angular services that handle common operations +one of several built-in angular services that handle common operations in web apps. Angular injects these services for you where you need them.

                                            - -

                                            Services are managed by angular's DI subsystem. Dependency injection +

                                            Services are managed by angular's DI subsystem. Dependency injection helps to make your web apps both well-structured (e.g., separate components for presentation, data, and control) and loosely coupled (dependencies between components are not resolved by the components themselves, but by the DI subsystem).

                                            -

                                            app/js/controllers.js:

                                             function PhoneListCtrl($scope, $http) {
                                            @@ -56,79 +50,59 @@ function PhoneListCtrl($scope, $http) {
                                             
                                             //PhoneListCtrl.$inject = ['$scope', '$http'];
                                             
                                            -

                                            $http makes an HTTP GET request to our web server, asking for phone/phones.json (the url is relative to our index.html file). The server responds by providing the data in the json file. (The response might just as well have been dynamically generated by a backend server. To the browser and our app they both look the same. For the sake of simplicity we used a json file in this tutorial.)

                                            -

                                            The $http service returns a promise object with a success method. We call this method to handle the asynchronous response and assign the phone data to the scope controlled by this controller, as a model called phones. Notice that angular detected the json response and parsed it for us!

                                            -

                                            To use a service in angular, you simply declare the names of the dependencies you need as arguments -to the controller's constructor function, as follows:

                                            - -
                                            function PhoneListCtrl($scope, $http) {...}
                                            -
                                            - -

                                            Angular's dependency injector provides services to your controller when the controller is being +to the controller's constructor function, as follows:

                                            +
                                            function PhoneListCtrl($scope, $http) {...}
                                            +

                                            Angular's dependency injector provides services to your controller when the controller is being constructed. The dependency injector also takes care of creating any transitive dependencies the service may have (services often depend upon other services).

                                            -

                                            Note that the names of arguments are significant, because the injector uses these to look up the dependencies.

                                            -

                                            - -

                                            '$' Prefix Naming Convention

                                            - +

                                            '$' Prefix Naming Convention

                                            You can create your own services, and in fact we will do exactly that in step 11. As a naming -convention, angular's built-in services, Scope methods and a few other angular APIs have a '$' -prefix in front of the name. Don't use a '$' prefix when naming your services and models, in order +convention, angular's built-in services, Scope methods and a few other angular APIs have a '$' +prefix in front of the name. Don't use a '$' prefix when naming your services and models, in order to avoid any possible naming collisions.

                                            - -

                                            A Note on Minification

                                            - -

                                            Since angular infers the controller's dependencies from the names of arguments to the controller's +

                                            A Note on Minification

                                            +

                                            Since angular infers the controller's dependencies from the names of arguments to the controller's constructor function, if you were to minify the JavaScript code for PhoneListCtrl controller, all of its function arguments would be minified as well, and the dependency injector would not be able to identify services correctly.

                                            -

                                            To overcome issues caused by minification, just assign an array with service identifier strings into the $inject property of the controller function, just like the last line in the snippet (commented out) suggests:

                                            - -
                                            PhoneListCtrl.$inject = ['$scope', '$http'];
                                            -
                                            - +
                                            PhoneListCtrl.$inject = ['$scope', '$http'];

                                            There is also one more way to specify this dependency list and avoid minification issues — using the bracket notation which wraps the function to be injected into an array of strings (representing the dependency names) followed by the function to be injected:

                                            - -
                                            var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];
                                            -
                                            - -

                                            Both of these methods work with any function that can be injected by Angular, so it's up to your -project's style guide to decide which one you use.

                                            - -

                                            Test

                                            - +
                                            var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];
                                            +

                                            Both of these methods work with any function that can be injected by Angular, so it's up to your +project's style guide to decide which one you use.

                                            +

                                            Test

                                            test/unit/controllersSpec.js:

                                            -

                                            Because we started using dependency injection and our controller has dependencies, constructing the controller in our tests is a bit more complicated. We could use the new operator and provide the constructor with some kind of fake $http implementation. However, the recommended (and easier) way is to create a controller in the test environment in the same way that angular does it in the production code behind the scenes, as follows:

                                            -
                                             describe('PhoneCat controllers', function() {
                                             
                                               describe('PhoneListCtrl', function(){
                                                 var scope, ctrl, $httpBackend;
                                             
                                            +    // The injector ignores leading and trailing underscores here (i.e. _$httpBackend_).
                                            +    // This allows us to inject a service but then attach it to a variable
                                            +    // with the same name as the service.
                                                 beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
                                                   $httpBackend = _$httpBackend_;
                                                   $httpBackend.expectGET('phones/phones.json').
                                            @@ -138,43 +112,41 @@ describe('PhoneCat controllers', function() {
                                                   ctrl = $controller(PhoneListCtrl, {$scope: scope});
                                                 }));
                                             
                                            -

                                            Note: Because we loaded Jasmine and angular-mocks.js in our test environment, we got two helper -methods module and inject that we'll +methods module and inject that we'll use to access and configure the injector.

                                            -

                                            We created the controller in the test environment, as follows:

                                            -
                                            • We used the inject helper method to inject instances of $rootScope, $controller and -$httpBackend services into the Jasmine's beforeEach +$httpBackend services into the Jasmine's beforeEach function. These instances come from an injector which is recreated from scratch for every single test. This guarantees that each test starts from a well known starting point and each test is -isolated from the work done in other tests.

                                            • -
                                            • We created a new scope for our controller by calling $rootScope.$new()

                                            • +isolated from the work done in other tests.

                                              + +
                                            • We created a new scope for our controller by calling $rootScope.$new()

                                              +
                                            • We called the injected $controller function passing the PhoneListCtrl function and the created -scope as parameters.

                                            • +scope as parameters.

                                              +
                                            -

                                            Because our code now uses the $http service to fetch the phone list data in our controller, before we create the PhoneListCtrl child scope, we need to tell the testing harness to expect an incoming request from the controller. To do this we:

                                            -
                                            • Request $httpBackend service to be injected into our beforeEach function. This is a mock version of the service that in a production environment facilitates all XHR and JSONP requests. The mock version of this service allows you to write tests without having to deal with -native APIs and the global state associated with them — both of which make testing a nightmare.

                                            • +native APIs and the global state associated with them — both of which make testing a nightmare.

                                              +
                                            • Use the $httpBackend.expectGET method to train the $httpBackend service to expect an incoming HTTP request and tell it what to respond with. Note that the responses are not returned until we call -the $httpBackend.flush method.

                                            • +the $httpBackend.flush method.

                                              +
                                            - -

                                            Now, we will make assertions to verify that the phones model doesn't exist on scope before +

                                            Now, we will make assertions to verify that the phones model doesn't exist on scope before the response is received:

                                            -
                                                 it('should create "phones" model with 2 phones fetched from xhr', function() {
                                                   expect(scope.phones).toBeUndefined();
                                            @@ -184,44 +156,33 @@ the response is received:

                                            {name: 'Motorola DROID'}]); });
                                            -
                                            • We flush the request queue in the browser by calling $httpBackend.flush(). This causes the -promise returned by the $http service to be resolved with the trained response.

                                            • -
                                            • We make the assertions, verifying that the phone model now exists on the scope.

                                            • +promise returned by the $http service to be resolved with the trained response.

                                              + +
                                            • We make the assertions, verifying that the phone model now exists on the scope.

                                              +
                                            -

                                            Finally, we verify that the default value of orderProp is set correctly:

                                            -
                                                 it('should set the default value of orderProp model', function() {
                                                   expect(scope.orderProp).toBe('age');
                                                 });
                                            -  });
                                            -});
                                             
                                            - -

                                            You should now see the following output in the Testacular tab:

                                            - -
                                               Chrome 22.0: Executed 2 of 2 SUCCESS (0.028 secs / 0.007 secs)
                                            -
                                            - -

                                            Experiments

                                            - +

                                            You should now see the following output in the Karma tab:

                                            +
                                               Chrome 22.0: Executed 2 of 2 SUCCESS (0.028 secs / 0.007 secs)
                                            +

                                            Experiments

                                            • At the bottom of index.html, add a {{phones | json}} binding to see the list of phones -displayed in json format.

                                            • +displayed in json format.

                                              +
                                            • In the PhoneListCtrl controller, pre-process the http response by limiting the number of phones to the first 5 in the list. Use the following code in the $http callback:

                                              - -
                                               $scope.phones = data.splice(0, 5);
                                              -
                                            • +
                                                 $scope.phones = data.splice(0, 5);
                                              +
                                            - -

                                            Summary

                                            - -

                                            Now that you have learned how easy it is to use angular services (thanks to Angular's dependency +

                                            Summary

                                            +

                                            Now that you have learned how easy it is to use angular services (thanks to Angular's dependency injection), go to step 6, where you will add some thumbnail images of phones and some links.

                                            - -
                                              +
                                                diff --git a/lib/angular/docs/partials/tutorial/step_06.html b/lib/angular/docs/partials/tutorial/step_06.html old mode 100644 new mode 100755 index f516793..7b87f2f --- a/lib/angular/docs/partials/tutorial/step_06.html +++ b/lib/angular/docs/partials/tutorial/step_06.html @@ -1,24 +1,22 @@ -

                                                - + Improve this doc

                                                +
                                                +

                                                -
                                                Improve this doc
                                                  +
                                                  +
                                                    diff --git a/lib/angular/docs/partials/tutorial/step_07.html b/lib/angular/docs/partials/tutorial/step_07.html old mode 100644 new mode 100755 index d56d9f4..982d453 --- a/lib/angular/docs/partials/tutorial/step_07.html +++ b/lib/angular/docs/partials/tutorial/step_07.html @@ -1,63 +1,53 @@ -

                                                    - + Improve this doc

                                                    +
                                                    +

                                                    -
                                                    Improve this doc
                                                      +
                                                        +

                                                        In this step, you will learn how to create a layout template and how to build an app that has multiple views by adding routing.

                                                        -
                                                        +

                                                        Note that when you now navigate to app/index.html, you are redirected to app/index.html#/phones and the same phone list appears in the browser. When you click on a phone link the stub of a phone detail page is displayed.

                                                        -

                                                        The most important changes are listed below. You can see the full diff on GitHub.

                                                        - -

                                                        Multiple Views, Routing and Layout Template

                                                        - +

                                                        Multiple Views, Routing and Layout Template

                                                        Our app is slowly growing and becoming more complex. Before step 7, the app provided our users with a single view (the list of all phones), and all of the template code was located in the index.html file. The next step in building the app is to add a view that will show detailed information about each of the devices in our list.

                                                        -

                                                        To add the detailed view, we could expand the index.html file to contain template code for both views, but that would get messy very quickly. Instead, we are going to turn the index.html -template into what we call a "layout template". This is a template that is common for all views in -our application. Other "partial templates" are then included into this layout template depending on -the current "route" — the view that is currently displayed to the user.

                                                        - +template into what we call a "layout template". This is a template that is common for all views in +our application. Other "partial templates" are then included into this layout template depending on +the current "route" — the view that is currently displayed to the user.

                                                        Application routes in Angular are declared via the $routeProvider, which is the provider of the $route service. This service makes it easy to wire together controllers, view templates, and the current -URL location in the browser. Using this feature we can implement deep linking, which lets us utilize the browser's +URL location in the browser. Using this feature we can implement deep linking, which lets us utilize the browser's history (back and forward navigation) and bookmarks.

                                                        -

                                                        A Note About DI, Injector and Providers

                                                        -

                                                        As you noticed, dependency injection (DI) is the core feature of -AngularJS, so it's important for you to understand a thing or two about how it works.

                                                        - +AngularJS, so it's important for you to understand a thing or two about how it works.

                                                        When the application bootstraps, Angular creates an injector that will be used for all DI stuff in -this app. The injector itself doesn't know anything about what $http or $route services do, in -fact it doesn't even know about the existence of these services unless it is configured with proper +this app. The injector itself doesn't know anything about what $http or $route services do, in +fact it doesn't even know about the existence of these services unless it is configured with proper module definitions. The sole responsibilities of the injector are to load specified module -definition(s), register all service providers defined in these modules and when asked inject +definition(s), register all service providers defined in these modules, and when asked, inject a specified function with dependencies (services) that it lazily instantiates via their providers.

                                                        -

                                                        Providers are objects that provide (create) instances of services and expose configuration APIs that can be used to control the creation and runtime behavior of a service. In case of the $route service, the $routeProvider exposes APIs that allow you to define routes for your application.

                                                        -

                                                        Angular modules solve the problem of removing global state from the application and provide a way -of configuring the injector. As opposed to AMD or require.js modules, Angular modules don't try to +of configuring the injector. As opposed to AMD or require.js modules, Angular modules don't try to solve the problem of script load ordering or lazy script fetching. These goals are orthogonal and both module systems can live side by side and fulfil their goals.

                                                        - -

                                                        The App Module

                                                        - +

                                                        The App Module

                                                        app/js/app.js:

                                                         angular.module('phonecat', []).
                                                        @@ -68,49 +58,40 @@ angular.module('phonecat', []).
                                                               otherwise({redirectTo: '/phones'});
                                                         }]);
                                                         
                                                        -

                                                        In order to configure our application with routes, we need to create a module for our application. We call this module phonecat and using the config API we request the $routeProvider to be injected into our config function and use $routeProvider.when API to define our routes.

                                                        -

                                                        Note that during the injector configuration phase, the providers can be injected as well, but they will not be available for injection once the injector is created and starts creating service instances.

                                                        -

                                                        Our application routes were defined as follows:

                                                        -
                                                        • The phone list view will be shown when the URL hash fragment is /phones. To construct this -view, Angular will use the phone-list.html template and the PhoneListCtrl controller.

                                                        • -
                                                        • The phone details view will be shown when the URL hash fragment matches '/phone/:phoneId', where +view, Angular will use the phone-list.html template and the PhoneListCtrl controller.

                                                          +
                                                        • +
                                                        • The phone details view will be shown when the URL hash fragment matches '/phone/:phoneId', where :phoneId is a variable part of the URL. To construct the phone details view, angular will use the -phone-detail.html template and the PhoneDetailCtrl controller.

                                                        • +phone-detail.html template and the PhoneDetailCtrl controller.

                                                          +
                                                        -

                                                        We reused the PhoneListCtrl controller that we constructed in previous steps and we added a new, empty PhoneDetailCtrl controller to the app/js/controllers.js file for the phone details view.

                                                        - -

                                                        The statement $route.otherwise({redirectTo: '/phones'}) triggers a redirection to /phones when -the browser address doesn't match either of our routes.

                                                        - +

                                                        The statement $route.otherwise({redirectTo: '/phones'}) triggers a redirection to /phones when +the browser address doesn't match either of our routes.

                                                        Note the use of the :phoneId parameter in the second route declaration. The $route service uses -the route declaration — '/phones/:phoneId' — as a template that is matched against the current +the route declaration — '/phones/:phoneId' — as a template that is matched against the current URL. All variables defined with the : notation are extracted into the $routeParams object.

                                                        - -

                                                        In order for our application to bootstrap with our newly created module we'll also need to specify +

                                                        In order for our application to bootstrap with our newly created module we'll also need to specify the module name as the value of the ngApp directive:

                                                        -

                                                        app/index.html:

                                                         <!doctype html>
                                                         <html lang="en" ng-app="phonecat">
                                                         ...
                                                         
                                                        - -

                                                        Controllers

                                                        - +

                                                        Controllers

                                                        app/js/controllers.js:

                                                         ...
                                                        @@ -120,12 +101,9 @@ function PhoneDetailCtrl($scope, $routeParams) {
                                                         
                                                         //PhoneDetailCtrl.$inject = ['$scope', '$routeParams'];
                                                         
                                                        - -

                                                        Template

                                                        - +

                                                        Template

                                                        The $route service is usually used in conjunction with the ngView directive. The role of the ngView directive is to include the view template for the current route into the layout template, which makes it a perfect fit for our index.html template.

                                                        -

                                                        app/index.html:

                                                         <html lang="en" ng-app="phonecat">
                                                        @@ -142,11 +120,9 @@ route into the layout template, which makes it a perfect fit for our index
                                                         </body>
                                                         </html>
                                                         
                                                        -

                                                        Note that we removed most of the code in the index.html template and replaced it with a single line containing a div with the ng-view attribute. The code that we removed was placed into the phone-list.html template:

                                                        -

                                                        app/partials/phone-list.html:

                                                         <div class="container-fluid">
                                                        @@ -177,26 +153,20 @@ line containing a div with the ng-view attribute. The code that we
                                                           </div>
                                                         </div>
                                                         
                                                        -
                                                        TODO!

                                                        We also added a placeholder template for the phone details view:

                                                        -

                                                        app/partials/phone-detail.html:

                                                         TBD: detail view for {{phoneId}}
                                                         
                                                        -

                                                        Note how we are using phoneId model defined in the PhoneDetailCtrl controller.

                                                        - -

                                                        Test

                                                        - +

                                                        Test

                                                        To automatically verify that everything is wired properly, we wrote end-to-end tests that navigate to various URLs and verify that the correct view was rendered.

                                                        -
                                                         ...
                                                           it('should redirect index.html to index.html#/phones', function() {
                                                        @@ -217,29 +187,23 @@ to various URLs and verify that the correct view was rendered.

                                                        }); });
                                                        -

                                                        You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test -runner to see the tests run, or you can see them running on Angular's server.

                                                        - -

                                                        Experiments

                                                        - +runner to see the tests run, or you can see them running on Angular's server.

                                                        +

                                                        Experiments

                                                          -
                                                        • Try to add an {{orderProp}} binding to index.html, and you'll see that nothing happens even +
                                                        • Try to add an {{orderProp}} binding to index.html, and you'll see that nothing happens even when you are in the phone list view. This is because the orderProp model is visible only in the scope managed by PhoneListCtrl, which is associated with the <div ng-view> element. If you add the same binding into the phone-list.html template, the binding will work as expected.
                                                        -
                                                        -* In `PhoneCatCtrl`, create a new model called "`hero`" with `this.hero = 'Zoro'`. In -`PhoneListCtrl` let's shadow it with `this.hero = 'Batman'`, and in `PhoneDetailCtrl` we'll use -`this.hero = "Captain Proton"`. Then add the `

                                                        hero = {{hero}}

                                                        ` to all three of our templates -(`index.html`, `phone-list.html`, and `phone-detail.html`). Open the app and you'll see scope +* In PhoneCatCtrl, create a new model called "hero" with this.hero = 'Zoro'. In +PhoneListCtrl let's shadow it with this.hero = 'Batman', and in PhoneDetailCtrl we'll use +this.hero = "Captain Proton". Then add the <p>hero = {{hero}}</p> to all three of our templates +(index.html, phone-list.html, and phone-detail.html). Open the app and you'll see scope inheritance and model property shadowing do some wonders.
                                                        -

                                                        Summary

                                                        - -

                                                        With the routing set up and the phone list view implemented, we're ready to go to step 8 to implement the phone details view.

                                                        - -
                                                          +

                                                          Summary

                                                          +

                                                          With the routing set up and the phone list view implemented, we're ready to go to step 8 to implement the phone details view.

                                                          +
                                                            diff --git a/lib/angular/docs/partials/tutorial/step_08.html b/lib/angular/docs/partials/tutorial/step_08.html old mode 100644 new mode 100755 index e3ab948..e159e8c --- a/lib/angular/docs/partials/tutorial/step_08.html +++ b/lib/angular/docs/partials/tutorial/step_08.html @@ -1,27 +1,24 @@ -

                                                            - + Improve this doc

                                                            +
                                                            +

                                                            -
                                                            Improve this doc
                                                              +
                                                                +

                                                                In this step, you will implement the phone details view, which is displayed when a user clicks on a phone in the phone list.

                                                                -
                                                                +

                                                                Now when you click on a phone on the list, the phone details page with phone-specific information is displayed.

                                                                -

                                                                To implement the phone details view we will use $http to fetch -our data, and we'll flesh out the phone-detail.html view template.

                                                                - +our data, and we'll flesh out the phone-detail.html view template.

                                                                The most important changes are listed below. You can see the full diff on GitHub:

                                                                - -

                                                                Data

                                                                - +

                                                                Data

                                                                In addition to phones.json, the app/phones/ directory also contains one json file for each phone:

                                                                -

                                                                app/phones/nexus-s.json: (sample snippet)

                                                                 {
                                                                @@ -43,15 +40,11 @@ phone:

                                                                } }
                                                                - -

                                                                Each of these files describes various properties of the phone using the same data structure. We'll +

                                                                Each of these files describes various properties of the phone using the same data structure. We'll show this data in the phone detail view.

                                                                - -

                                                                Controller

                                                                - -

                                                                We'll expand the PhoneDetailCtrl by using the $http service to fetch the json files. This works +

                                                                Controller

                                                                +

                                                                We'll expand the PhoneDetailCtrl by using the $http service to fetch the json files. This works the same way as the phone list controller.

                                                                -

                                                                app/js/controllers.js:

                                                                 function PhoneDetailCtrl($scope, $routeParams, $http) {
                                                                @@ -62,16 +55,12 @@ function PhoneDetailCtrl($scope, $routeParams, $http) {
                                                                 
                                                                 //PhoneDetailCtrl.$inject = ['$scope', '$routeParams', '$http'];
                                                                 
                                                                -

                                                                To construct the URL for the HTTP request, we use $routeParams.phoneId extracted from the current route by the $route service.

                                                                - -

                                                                Template

                                                                - +

                                                                Template

                                                                The TBD placeholder line has been replaced with lists and bindings that comprise the phone details. Note where we use the angular {{expression}} markup and ngRepeat to project phone data from our model into the view.

                                                                -

                                                                app/partials/phone-detail.html:

                                                                 <img ng-src="{{phone.images[0]}}" class="phone">
                                                                @@ -101,17 +90,14 @@ our model into the view.

                                                                </li> </ul>
                                                                -
                                                                TODO!
                                                                -

                                                                Test

                                                                - +

                                                                Test

                                                                We wrote a new unit test that is similar to the one we wrote for the PhoneListCtrl controller in step 5.

                                                                -

                                                                test/unit/controllersSpec.js:

                                                                 ...
                                                                @@ -137,15 +123,10 @@ step 5.

                                                                }); ...
                                                                - -

                                                                You should now see the following output in the Testacular tab:

                                                                - -
                                                                Chrome 22.0: Executed 3 of 3 SUCCESS (0.039 secs / 0.012 secs)
                                                                -
                                                                - +

                                                                You should now see the following output in the Karma tab:

                                                                +
                                                                Chrome 22.0: Executed 3 of 3 SUCCESS (0.039 secs / 0.012 secs)

                                                                We also added a new end-to-end test that navigates to the Nexus S detail page and verifies that the -heading on the page is "Nexus S".

                                                                - +heading on the page is "Nexus S".

                                                                test/e2e/scenarios.js:

                                                                 ...
                                                                @@ -162,20 +143,14 @@ heading on the page is "Nexus S".

                                                                }); ...
                                                                -

                                                                You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test -runner to see the tests run, or you can see them running on Angular's server.

                                                                - -

                                                                Experiments

                                                                - +runner to see the tests run, or you can see them running on Angular's server.

                                                                +

                                                                Experiments

                                                                - -

                                                                Summary

                                                                - +

                                                                Summary

                                                                Now that the phone details view is in place, proceed to step 9 to learn how to write your own custom display filter.

                                                                - -
                                                                  +
                                                                    diff --git a/lib/angular/docs/partials/tutorial/step_09.html b/lib/angular/docs/partials/tutorial/step_09.html old mode 100644 new mode 100755 index 9608e8a..d405bcd --- a/lib/angular/docs/partials/tutorial/step_09.html +++ b/lib/angular/docs/partials/tutorial/step_09.html @@ -1,26 +1,23 @@ -

                                                                    - + Improve this doc

                                                                    +
                                                                    +

                                                                    -
                                                                    Improve this doc
                                                                      +
                                                                        +

                                                                        In this step you will learn how to create your own custom display filter.

                                                                        -
                                                                        +

                                                                        Navigate to one of the detail pages.

                                                                        - -

                                                                        In the previous step, the details page displayed either "true" or "false" to indicate whether +

                                                                        In the previous step, the details page displayed either "true" or "false" to indicate whether certain phone features were present or not. We have used a custom filter to convert those text -strings into glyphs: ✓ for "true", and ✘ for "false". Let's see what the filter code looks like.

                                                                        - +strings into glyphs: ✓ for "true", and ✘ for "false". Let's see what the filter code looks like.

                                                                        The most important changes are listed below. You can see the full diff on GitHub:

                                                                        - -

                                                                        Custom Filter

                                                                        - +

                                                                        Custom Filter

                                                                        In order to create a new filter, you are going to create a phonecatFilters module and register your custom filter with this module:

                                                                        -

                                                                        app/js/filters.js:

                                                                         angular.module('phonecatFilters', []).filter('checkmark', function() {
                                                                        @@ -29,26 +26,19 @@ angular.module('phonecatFilters', []).filter('checkmark', function() {
                                                                           };
                                                                         });
                                                                         
                                                                        - -

                                                                        The name of our filter is "checkmark". The input evaluates to either true or false, and we -return one of two unicode characters we have chosen to represent true or false (\u2713 and -\u2718).

                                                                        - +

                                                                        The name of our filter is "checkmark". The input evaluates to either true or false, and we +return one of the two unicode characters we have chosen to represent true (\u2713 -> ✓) or false (\u2718 -> ✘).

                                                                        Now that our filter is ready, we need to register the phonecatFilters module as a dependency for our main phonecat module.

                                                                        -

                                                                        app/js/app.js:

                                                                         ...
                                                                         angular.module('phonecat', ['phonecatFilters']).
                                                                         ...
                                                                         
                                                                        - -

                                                                        Template

                                                                        - +

                                                                        Template

                                                                        Since the filter code lives in the app/js/filters.js file, we need to include this file in our layout template.

                                                                        -

                                                                        app/index.html:

                                                                         ...
                                                                        @@ -56,14 +46,9 @@ layout template.

                                                                        <script src="js/filters.js"></script> ...
                                                                        -

                                                                        The syntax for using filters in Angular templates is as follows:

                                                                        - -
                                                                        {{ expression | filter }}
                                                                        -
                                                                        - -

                                                                        Let's employ the filter in the phone details template:

                                                                        - +
                                                                        {{ expression | filter }}
                                                                        +

                                                                        Let's employ the filter in the phone details template:

                                                                        app/partials/phone-detail.html:

                                                                         ...
                                                                        @@ -75,11 +60,8 @@ layout template.

                                                                        </dl> ...
                                                                        - -

                                                                        Test

                                                                        - +

                                                                        Test

                                                                        Filters, like any other component, should be tested and these tests are very easy to write.

                                                                        -

                                                                        test/unit/filtersSpec.js:

                                                                         describe('filter', function() {
                                                                        @@ -97,35 +79,27 @@ describe('filter', function() {
                                                                           });
                                                                         });
                                                                         
                                                                        -

                                                                        Note that you need to configure our test injector with the phonecatFilters module before any of our filter tests execute.

                                                                        - -

                                                                        You should now see the following output in the Testacular tab:

                                                                        - -
                                                                            Chrome 22.0: Executed 4 of 4 SUCCESS (0.034 secs / 0.012 secs)
                                                                        -
                                                                        - -

                                                                        Experiments

                                                                        - +

                                                                        You should now see the following output in the Karma tab:

                                                                        +
                                                                            Chrome 22.0: Executed 4 of 4 SUCCESS (0.034 secs / 0.012 secs)
                                                                        +

                                                                        Experiments

                                                                          -
                                                                        • Let's experiment with some of the built-in Angular filters and add the +

                                                                        • Let's experiment with some of the built-in Angular filters and add the following bindings to index.html:

                                                                          - -
                                                                          • {{ "lower cap string" | uppercase }}
                                                                          • -
                                                                          • {{ {foo: "bar", baz: 23} | json }}
                                                                          • +
                                                                              +
                                                                            • {{ "lower cap string" | uppercase }}
                                                                            • +
                                                                            • {{ {foo: "bar", baz: 23} | json }}
                                                                            • {{ 1304375948024 | date }}
                                                                            • -
                                                                            • {{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
                                                                            +
                                                                          • {{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
                                                                          • +
                                                                          +
                                                                        • We can also create a model with an input element, and combine it with a filtered binding. Add the following to index.html:

                                                                          - -
                                                                          <input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
                                                                          -
                                                                        • +
                                                                           <input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
                                                                          +
                                                                        - -

                                                                        Summary

                                                                        - +

                                                                        Summary

                                                                        Now that you have learned how to write and test a custom filter, go to step 10 to learn how we can use Angular to enhance the phone details page further.

                                                                        - -
                                                                          +
                                                                            diff --git a/lib/angular/docs/partials/tutorial/step_10.html b/lib/angular/docs/partials/tutorial/step_10.html old mode 100644 new mode 100755 index 9bfd14b..9a7716b --- a/lib/angular/docs/partials/tutorial/step_10.html +++ b/lib/angular/docs/partials/tutorial/step_10.html @@ -1,21 +1,20 @@ -

                                                                            - + Improve this doc

                                                                            +
                                                                            +

                                                                            -
                                                                            Improve this doc
                                                                              +
                                                                                +

                                                                                In this step, you will add a clickable phone image swapper to the phone details page.

                                                                                -
                                                                                +

                                                                                The phone details view displays one large image of the current phone and several smaller thumbnail images. It would be great if we could replace the large image with any of the thumbnails just by -clicking on the desired thumbnail image. Let's have a look at how we can do this with Angular.

                                                                                - +clicking on the desired thumbnail image. Let's have a look at how we can do this with Angular.

                                                                                The most important changes are listed below. You can see the full diff on GitHub:

                                                                                - -

                                                                                Controller

                                                                                - +

                                                                                Controller

                                                                                app/js/controllers.js:

                                                                                 ...
                                                                                @@ -32,14 +31,10 @@ function PhoneDetailCtrl($scope, $routeParams, $http) {
                                                                                 
                                                                                 //PhoneDetailCtrl.$inject = ['$scope', '$routeParams', '$http'];
                                                                                 
                                                                                -

                                                                                In the PhoneDetailCtrl controller, we created the mainImageUrl model property and set its default value to the first phone image URL.

                                                                                -

                                                                                We also created a setImage event handler function that will change the value of mainImageUrl.

                                                                                - -

                                                                                Template

                                                                                - +

                                                                                Template

                                                                                app/partials/phone-detail.html:

                                                                                 <img ng-src="{{mainImageUrl}}" class="phone">
                                                                                @@ -53,25 +48,20 @@ default value to the first phone image URL.

                                                                                </ul> ...
                                                                                -

                                                                                We bound the ngSrc directive of the large image to the mainImageUrl property.

                                                                                -

                                                                                We also registered an ngClick handler with thumbnail images. When a user clicks on one of the thumbnail images, the handler will use the setImage event handler function to change the value of the mainImageUrl property to the URL of the thumbnail image.

                                                                                -
                                                                                TODO!
                                                                                -

                                                                                Test

                                                                                - +

                                                                                Test

                                                                                To verify this new feature, we added two end-to-end tests. One verifies that the main image is set to the first phone image by default. The second test clicks on several thumbnail images and verifies that the main image changed appropriately.

                                                                                -

                                                                                test/e2e/scenarios.js:

                                                                                 ...
                                                                                @@ -94,41 +84,31 @@ verifies that the main image changed appropriately.

                                                                                }); });
                                                                                -

                                                                                You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test -runner to see the tests run, or you can see them running on Angular's server.

                                                                                - -

                                                                                Experiments

                                                                                - +runner to see the tests run, or you can see them running on Angular's server.

                                                                                +

                                                                                Experiments

                                                                                  -
                                                                                • Let's add a new controller method to PhoneDetailCtrl:

                                                                                  - -
                                                                                    $scope.hello = function(name) {
                                                                                  -      alert('Hello ' + (name || 'world') + '!');
                                                                                  -  }
                                                                                  -
                                                                                  - +
                                                                                • Let's add a new controller method to PhoneDetailCtrl:

                                                                                  +
                                                                                      $scope.hello = function(name) {
                                                                                  +        alert('Hello ' + (name || 'world') + '!');
                                                                                  +    }

                                                                                  and add:

                                                                                  - -
                                                                                    <button ng-click="hello('Elmo')">Hello</button>
                                                                                  -
                                                                                  - -

                                                                                  to the phone-details.html template.

                                                                                • +
                                                                                      <button ng-click="hello('Elmo')">Hello</button>
                                                                                  +

                                                                                  to the phone-details.html template.

                                                                                  +
                                                                                -
                                                                                TODO! The controller methods are inherited between controllers/scopes, so you can use the same snippet -in the `phone-list.html` template as well. +in the phone-list.html template as well. -* Move the `hello` method from `PhoneCatCtrl` to `PhoneListCtrl` and you'll see that the button -declared in `index.html` will stop working, while the one declared in the `phone-list.html` +* Move the hello method from PhoneCatCtrl to PhoneListCtrl and you'll see that the button +declared in index.html will stop working, while the one declared in the phone-list.html template remains operational.
                                                                                -

                                                                                Summary

                                                                                -

                                                                                With the phone image swapper in place, we're ready for step 11 (the last step!) to +

                                                                                Summary

                                                                                +

                                                                                With the phone image swapper in place, we're ready for step 11 (the last step!) to learn an even better way to fetch data.

                                                                                - -
                                                                                  +
                                                                                    diff --git a/lib/angular/docs/partials/tutorial/step_11.html b/lib/angular/docs/partials/tutorial/step_11.html old mode 100644 new mode 100755 index 99ba48e..1ad1f90 --- a/lib/angular/docs/partials/tutorial/step_11.html +++ b/lib/angular/docs/partials/tutorial/step_11.html @@ -1,24 +1,22 @@ -

                                                                                    - + Improve this doc

                                                                                    +
                                                                                    +

                                                                                    -
                                                                                    Improve this doc
                                                                                      +
                                                                                        +

                                                                                        In this step, you will improve the way our app fetches data.

                                                                                        -
                                                                                        +

                                                                                        The last improvement we will make to our app is to define a custom service that represents a RESTful client. Using this client we can make XHR requests for data in an easier way, without having to deal with the lower-level $http API, HTTP methods and URLs.

                                                                                        -

                                                                                        The most important changes are listed below. You can see the full diff on GitHub:

                                                                                        - -

                                                                                        Template

                                                                                        - +

                                                                                        Template

                                                                                        The custom service is defined in app/js/services.js so we need to include this file in our layout template. Additionally, we also need to load the angular-resource.js file, which contains the -ngResource module and in it the $resource service, that we'll soon use:

                                                                                        - +ngResource module and in it the $resource service, that we'll soon use:

                                                                                        app/index.html.

                                                                                         ...
                                                                                        @@ -26,9 +24,7 @@ template. Additionally, we also need to load the angular-resource.js
                                                                                        -
                                                                                        -

                                                                                        Service

                                                                                        - +

                                                                                        Service

                                                                                        app/js/services.js.

                                                                                         angular.module('phonecatServices', ['ngResource']).
                                                                                        @@ -38,33 +34,26 @@ angular.module('phonecatServices', ['ngResource']).
                                                                                           });
                                                                                         });
                                                                                         
                                                                                        -

                                                                                        We used the module API to register a custom service using a factory function. We passed in the name -of the service - 'Phone' - and the factory function. The factory function is similar to a -controller's constructor in that both can declare dependencies via function arguments. The Phone +of the service - 'Phone' - and the factory function. The factory function is similar to a +controller's constructor in that both can declare dependencies via function arguments. The Phone service declared a dependency on the $resource service.

                                                                                        -

                                                                                        The $resource service makes it easy to create a RESTful client with just a few lines of code. This client can then be used in our application, instead of the lower-level $http service.

                                                                                        -

                                                                                        app/js/app.js.

                                                                                         ...
                                                                                         angular.module('phonecat', ['phonecatFilters', 'phonecatServices']).
                                                                                         ...
                                                                                         
                                                                                        - -

                                                                                        We need to add 'phonecatServices' to 'phonecat' application's requires array.

                                                                                        - -

                                                                                        Controller

                                                                                        - +

                                                                                        We need to add 'phonecatServices' to 'phonecat' application's requires array.

                                                                                        +

                                                                                        Controller

                                                                                        We simplified our sub-controllers (PhoneListCtrl and PhoneDetailCtrl) by factoring out the lower-level $http service, replacing it with a new service called -Phone. Angular's $resource service is easier to +Phone. Angular's $resource service is easier to use than $http for interacting with data sources exposed as RESTful resources. It is also easier now to understand what the code in our controllers is doing.

                                                                                        -

                                                                                        app/js/controllers.js.

                                                                                         ...
                                                                                        @@ -90,45 +79,32 @@ function PhoneDetailCtrl($scope, $routeParams, Phone) {
                                                                                         
                                                                                         //PhoneDetailCtrl.$inject = ['$scope', '$routeParams', 'Phone'];
                                                                                         
                                                                                        -

                                                                                        Notice how in PhoneListCtrl we replaced:

                                                                                        - -
                                                                                        $http.get('phones/phones.json').success(function(data) {
                                                                                        +
                                                                                        $http.get('phones/phones.json').success(function(data) {
                                                                                           $scope.phones = data;
                                                                                        -});
                                                                                        -
                                                                                        - +});

                                                                                        with:

                                                                                        - -
                                                                                        $scope.phones = Phone.query();
                                                                                        -
                                                                                        - +
                                                                                        $scope.phones = Phone.query();

                                                                                        This is a simple statement that we want to query for all phones.

                                                                                        - -

                                                                                        An important thing to notice in the code above is that we don't pass any callback functions when +

                                                                                        An important thing to notice in the code above is that we don't pass any callback functions when invoking methods of our Phone service. Although it looks as if the result were returned -synchronously, that is not the case at all. What is returned synchronously is a "future" — an +synchronously, that is not the case at all. What is returned synchronously is a "future" — an object, which will be filled with data when the XHR response returns. Because of the data-binding in Angular, we can use this future and bind it to our template. Then, when the data arrives, the view will automatically update.

                                                                                        -

                                                                                        Sometimes, relying on the future object and data-binding alone is not sufficient to do everything we require, so in these cases, we can add a callback to process the server response. The PhoneDetailCtrl controller illustrates this by setting the mainImageUrl in a callback.

                                                                                        - -

                                                                                        Test

                                                                                        - +

                                                                                        Test

                                                                                        We have modified our unit tests to verify that our new service is issuing HTTP requests and processing them as expected. The tests also check that our controllers are interacting with the service correctly.

                                                                                        -

                                                                                        The $resource service augments the response object with methods for updating and deleting the resource. If we were to use the standard toEqual matcher, our tests would fail because the test values would not match the responses exactly. To solve the problem, we use a newly-defined toEqualData Jasmine matcher. When the toEqualData matcher compares two objects, it takes only object properties into account and ignores methods.

                                                                                        -

                                                                                        test/unit/controllersSpec.js:

                                                                                         describe('PhoneCat controllers', function() {
                                                                                        @@ -202,14 +178,8 @@ describe('PhoneCat controllers', function() {
                                                                                           });
                                                                                         });
                                                                                         
                                                                                        - -

                                                                                        You should now see the following output in the Testacular tab:

                                                                                        - -
                                                                                        Chrome 22.0: Executed 4 of 4 SUCCESS (0.038 secs / 0.01 secs)
                                                                                        -
                                                                                        - +

                                                                                        You should now see the following output in the Karma tab:

                                                                                        +
                                                                                        Chrome 22.0: Executed 4 of 4 SUCCESS (0.038 secs / 0.01 secs)

                                                                                        Summary

                                                                                        - -

                                                                                        There you have it! We have created a web app in a relatively short amount of time. In the closing notes we'll cover where to go from here.

                                                                                        - -
                                                                                          +

                                                                                          There you have it! We have created a web app in a relatively short amount of time. In the closing notes we'll cover where to go from here.

                                                                                          +
                                                                                            diff --git a/lib/angular/docs/partials/tutorial/the_end.html b/lib/angular/docs/partials/tutorial/the_end.html old mode 100644 new mode 100755 index abf3f97..bac59e7 --- a/lib/angular/docs/partials/tutorial/the_end.html +++ b/lib/angular/docs/partials/tutorial/the_end.html @@ -1,19 +1,16 @@ -

                                                                                            - + Improve this doc

                                                                                            +
                                                                                            +

                                                                                            -
                                                                                            Improve this doc

                                                                                            Our application is now complete. Feel free to experiment with the code further, and jump back to +

                                                                                            Our application is now complete. Feel free to experiment with the code further, and jump back to previous steps using the git checkout command.

                                                                                            -

                                                                                            For more details and examples of the Angular concepts we touched on in this tutorial, see the Developer Guide.

                                                                                            -

                                                                                            For several more examples of code, see the Cookbook.

                                                                                            -

                                                                                            When you are ready to start developing a project using Angular, we recommend that you bootstrap your development with the angular-seed project.

                                                                                            -

                                                                                            We hope this tutorial was useful to you and that you learned enough about Angular to make you want to learn more. We especially hope you are inspired to go out and develop Angular web apps of your own, and that you might be interested in contributing to Angular.

                                                                                            - -

                                                                                            If you have questions or feedback or just want to say "hi", please post a message at https://groups.google.com/forum/#!forum/angular.

                                                                                            +

                                                                                            If you have questions or feedback or just want to say "hi", please post a message at https://groups.google.com/forum/#!forum/angular.

                                                                                            +
                                                                                            diff --git a/lib/angular/docs/robots.txt b/lib/angular/docs/robots.txt old mode 100644 new mode 100755 diff --git a/lib/angular/docs/sitemap.xml b/lib/angular/docs/sitemap.xml old mode 100644 new mode 100755 index cb4053c..b86c022 --- a/lib/angular/docs/sitemap.xml +++ b/lib/angular/docs/sitemap.xml @@ -1,69 +1,7 @@ - http://docs.angularjs.org/api/indexweekly - http://docs.angularjs.org/api/ngweekly - http://docs.angularjs.org/cookbook/buzzweekly - http://docs.angularjs.org/cookbook/advancedformweekly - http://docs.angularjs.org/cookbook/helloworldweekly - http://docs.angularjs.org/cookbook/deeplinkingweekly - http://docs.angularjs.org/cookbook/formweekly - http://docs.angularjs.org/guide/bootstrapweekly - http://docs.angularjs.org/cookbook/indexweekly - http://docs.angularjs.org/cookbook/mvcweekly - http://docs.angularjs.org/guide/compilerweekly - http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controllerweekly - http://docs.angularjs.org/guide/conceptsweekly - http://docs.angularjs.org/guide/dev_guide.mvcweekly - http://docs.angularjs.org/guide/dev_guide.e2e-testingweekly - http://docs.angularjs.org/guide/dev_guide.mvc.understanding_modelweekly - http://docs.angularjs.org/guide/dev_guide.mvc.understanding_viewweekly - http://docs.angularjs.org/guide/dev_guide.services.creating_servicesweekly - http://docs.angularjs.org/guide/dev_guide.services.injecting_controllersweekly - http://docs.angularjs.org/guide/dev_guide.services.$locationweekly - http://docs.angularjs.org/guide/dev_guide.services.managing_dependenciesweekly - http://docs.angularjs.org/guide/dev_guide.servicesweekly - http://docs.angularjs.org/guide/dev_guide.templates.databindingweekly - http://docs.angularjs.org/guide/dev_guide.services.testing_servicesweekly - http://docs.angularjs.org/guide/dev_guide.services.understanding_servicesweekly - http://docs.angularjs.org/guide/dev_guide.templates.css-stylingweekly - http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filtersweekly - http://docs.angularjs.org/guide/dev_guide.templates.filtersweekly - http://docs.angularjs.org/guide/diweekly - http://docs.angularjs.org/guide/directiveweekly - http://docs.angularjs.org/guide/dev_guide.templates.filters.using_filtersweekly - http://docs.angularjs.org/guide/formsweekly - http://docs.angularjs.org/guide/dev_guide.templatesweekly - http://docs.angularjs.org/guide/dev_guide.unit-testingweekly - http://docs.angularjs.org/guide/expressionweekly - http://docs.angularjs.org/guide/i18nweekly - http://docs.angularjs.org/guide/ieweekly - http://docs.angularjs.org/guide/introductionweekly - http://docs.angularjs.org/guide/indexweekly - http://docs.angularjs.org/guide/moduleweekly - http://docs.angularjs.org/guide/typeweekly - http://docs.angularjs.org/misc/downloadingweekly - http://docs.angularjs.org/guide/overviewweekly - http://docs.angularjs.org/guide/scopeweekly - http://docs.angularjs.org/misc/contributeweekly - http://docs.angularjs.org/misc/startedweekly - http://docs.angularjs.org/misc/faqweekly - http://docs.angularjs.org/tutorial/indexweekly - http://docs.angularjs.org/tutorial/step_00weekly - http://docs.angularjs.org/tutorial/step_01weekly - http://docs.angularjs.org/tutorial/step_02weekly - http://docs.angularjs.org/tutorial/step_03weekly - http://docs.angularjs.org/tutorial/step_04weekly - http://docs.angularjs.org/tutorial/step_05weekly - http://docs.angularjs.org/tutorial/step_06weekly - http://docs.angularjs.org/tutorial/step_07weekly - http://docs.angularjs.org/tutorial/step_08weekly - http://docs.angularjs.org/tutorial/step_09weekly - http://docs.angularjs.org/tutorial/the_endweekly - http://docs.angularjs.org/tutorial/step_10weekly - http://docs.angularjs.org/tutorial/step_11weekly http://docs.angularjs.org/api/angular.lowercaseweekly http://docs.angularjs.org/api/angular.uppercaseweekly - http://docs.angularjs.org/api/angular.noConflictweekly http://docs.angularjs.org/api/angular.forEachweekly http://docs.angularjs.org/api/angular.extendweekly http://docs.angularjs.org/api/angular.noopweekly @@ -93,23 +31,21 @@ http://docs.angularjs.org/api/angular.Moduleweekly http://docs.angularjs.org/api/angular.moduleweekly http://docs.angularjs.org/api/ng.$anchorScrollweekly - http://docs.angularjs.org/api/ng.$animationProviderweekly - http://docs.angularjs.org/api/ng.$animationweekly - http://docs.angularjs.org/api/ng.directive:ngAnimateweekly - http://docs.angularjs.org/api/ng.$animatorweekly + http://docs.angularjs.org/api/ng.$animateProviderweekly + http://docs.angularjs.org/api/ng.$animateweekly http://docs.angularjs.org/api/ng.$cacheFactoryweekly http://docs.angularjs.org/api/ng.$templateCacheweekly - http://docs.angularjs.org/api/ng.$controllerProviderweekly - http://docs.angularjs.org/api/ng.$controllerweekly - http://docs.angularjs.org/api/ng.directive:aweekly http://docs.angularjs.org/api/ng.$compileweekly http://docs.angularjs.org/api/ng.$compileProviderweekly http://docs.angularjs.org/api/ng.$compile.directive.Attributesweekly + http://docs.angularjs.org/api/ng.$controllerProviderweekly + http://docs.angularjs.org/api/ng.$controllerweekly + http://docs.angularjs.org/api/ng.directive:aweekly http://docs.angularjs.org/api/ng.directive:ngHrefweekly http://docs.angularjs.org/api/ng.directive:ngSrcweekly + http://docs.angularjs.org/api/ng.directive:ngSrcsetweekly http://docs.angularjs.org/api/ng.directive:ngDisabledweekly http://docs.angularjs.org/api/ng.directive:ngCheckedweekly - http://docs.angularjs.org/api/ng.directive:ngMultipleweekly http://docs.angularjs.org/api/ng.directive:ngReadonlyweekly http://docs.angularjs.org/api/ng.directive:ngSelectedweekly http://docs.angularjs.org/api/ng.directive:ngOpenweekly @@ -118,10 +54,11 @@ http://docs.angularjs.org/api/ng.directive:formweekly http://docs.angularjs.org/api/ng.directive:ngBindweekly http://docs.angularjs.org/api/ng.directive:ngBindTemplateweekly - http://docs.angularjs.org/api/ng.directive:ngBindHtmlUnsafeweekly + http://docs.angularjs.org/api/ng.directive:ngBindHtmlweekly http://docs.angularjs.org/api/ng.directive:ngClassweekly http://docs.angularjs.org/api/ng.directive:ngClassOddweekly http://docs.angularjs.org/api/ng.directive:ngClassEvenweekly + http://docs.angularjs.org/api/ng.directive:ngCloakweekly http://docs.angularjs.org/api/ng.directive:input.textweekly http://docs.angularjs.org/api/ng.directive:input.numberweekly http://docs.angularjs.org/api/ng.directive:input.urlweekly @@ -134,7 +71,6 @@ http://docs.angularjs.org/api/ng.directive:ngModelweekly http://docs.angularjs.org/api/ng.directive:ngChangeweekly http://docs.angularjs.org/api/ng.directive:ngListweekly - http://docs.angularjs.org/api/ng.directive:ngCloakweekly http://docs.angularjs.org/api/ng.directive:ngControllerweekly http://docs.angularjs.org/api/ng.directive:ngCspweekly http://docs.angularjs.org/api/ng.directive:ngClickweekly @@ -149,6 +85,9 @@ http://docs.angularjs.org/api/ng.directive:ngKeyupweekly http://docs.angularjs.org/api/ng.directive:ngKeypressweekly http://docs.angularjs.org/api/ng.directive:ngSubmitweekly + http://docs.angularjs.org/api/ng.directive:ngFocusweekly + http://docs.angularjs.org/api/ng.directive:ngBlurweekly + http://docs.angularjs.org/api/ng.directive:ngIfweekly http://docs.angularjs.org/api/ng.directive:ngIncludeweekly http://docs.angularjs.org/api/ng.directive:ngInitweekly http://docs.angularjs.org/api/ng.directive:ngNonBindableweekly @@ -159,11 +98,10 @@ http://docs.angularjs.org/api/ng.directive:ngStyleweekly http://docs.angularjs.org/api/ng.directive:ngSwitchweekly http://docs.angularjs.org/api/ng.directive:ngTranscludeweekly - http://docs.angularjs.org/api/ng.directive:ngViewweekly http://docs.angularjs.org/api/ng.directive:scriptweekly + http://docs.angularjs.org/api/ng.$exceptionHandlerweekly http://docs.angularjs.org/api/ng.directive:selectweekly http://docs.angularjs.org/api/ng.$documentweekly - http://docs.angularjs.org/api/ng.$exceptionHandlerweekly http://docs.angularjs.org/api/ng.filter:filterweekly http://docs.angularjs.org/api/ng.filter:currencyweekly http://docs.angularjs.org/api/ng.filter:numberweekly @@ -186,26 +124,27 @@ http://docs.angularjs.org/api/ng.$logProviderweekly http://docs.angularjs.org/api/ng.$parseweekly http://docs.angularjs.org/api/ng.$qweekly - http://docs.angularjs.org/api/ng.$rootElementweekly - http://docs.angularjs.org/api/ng.$routeProviderweekly - http://docs.angularjs.org/api/ng.$routeweekly http://docs.angularjs.org/api/ng.$rootScopeProviderweekly http://docs.angularjs.org/api/ng.$rootScopeweekly http://docs.angularjs.org/api/ng.$rootScope.Scopeweekly - http://docs.angularjs.org/api/ng.$routeParamsweekly + http://docs.angularjs.org/api/ng.$sceDelegateweekly + http://docs.angularjs.org/api/ng.$sceDelegateProviderweekly + http://docs.angularjs.org/api/ng.$sceProviderweekly + http://docs.angularjs.org/api/ng.$sceweekly http://docs.angularjs.org/api/ng.$timeoutweekly http://docs.angularjs.org/api/ng.$windowweekly http://docs.angularjs.org/api/ngCookiesweekly http://docs.angularjs.org/api/ngCookies.$cookiesweekly http://docs.angularjs.org/api/ngCookies.$cookieStoreweekly - http://docs.angularjs.org/api/ngMobile.directive:ngTapweekly - http://docs.angularjs.org/api/ngMobileweekly + http://docs.angularjs.org/api/ngAnimateweekly + http://docs.angularjs.org/api/ngAnimate.$animateProviderweekly + http://docs.angularjs.org/api/ngAnimate.$animateweekly + http://docs.angularjs.org/api/ng.$rootElementweekly http://docs.angularjs.org/api/angular.mockweekly http://docs.angularjs.org/api/ngMock.$exceptionHandlerProviderweekly http://docs.angularjs.org/api/ngMock.$exceptionHandlerweekly http://docs.angularjs.org/api/ngMock.$logweekly http://docs.angularjs.org/api/angular.mock.TzDateweekly - http://docs.angularjs.org/api/angular.mock.createMockWindowweekly http://docs.angularjs.org/api/angular.mock.dumpweekly http://docs.angularjs.org/api/ngMock.$httpBackendweekly http://docs.angularjs.org/api/ngMock.$timeoutweekly @@ -214,10 +153,132 @@ http://docs.angularjs.org/api/ngMockE2E.$httpBackendweekly http://docs.angularjs.org/api/angular.mock.moduleweekly http://docs.angularjs.org/api/angular.mock.injectweekly + http://docs.angularjs.org/api/ngRoute.directive:ngViewweekly http://docs.angularjs.org/api/ngResourceweekly http://docs.angularjs.org/api/ngResource.$resourceweekly - http://docs.angularjs.org/api/ngSanitize.directive:ngBindHtmlweekly + http://docs.angularjs.org/api/ngRoute.$routeParamsweekly http://docs.angularjs.org/api/ngSanitize.filter:linkyweekly http://docs.angularjs.org/api/ngSanitizeweekly http://docs.angularjs.org/api/ngSanitize.$sanitizeweekly + http://docs.angularjs.org/api/ngRouteweekly + http://docs.angularjs.org/api/ngRoute.$routeProviderweekly + http://docs.angularjs.org/api/ngRoute.$routeweekly + http://docs.angularjs.org/api/ngTouch.directive:ngSwipeLeftweekly + http://docs.angularjs.org/api/ngTouch.directive:ngSwipeRightweekly + http://docs.angularjs.org/api/ngTouch.directive:ngClickweekly + http://docs.angularjs.org/api/ngTouch.$swipeweekly + http://docs.angularjs.org/api/ngTouchweekly + http://docs.angularjs.org/api/indexweekly + http://docs.angularjs.org/cookbook/advancedformweekly + http://docs.angularjs.org/api/ngweekly + http://docs.angularjs.org/cookbook/buzzweekly + http://docs.angularjs.org/cookbook/helloworldweekly + http://docs.angularjs.org/cookbook/deeplinkingweekly + http://docs.angularjs.org/cookbook/formweekly + http://docs.angularjs.org/cookbook/indexweekly + http://docs.angularjs.org/cookbook/mvcweekly + http://docs.angularjs.org/error/$animate:notcselweekly + http://docs.angularjs.org/error/$cacheFactory:iidweekly + http://docs.angularjs.org/error/$compile:ctreqweekly + http://docs.angularjs.org/error/$compile:iscpweekly + http://docs.angularjs.org/error/$compile:multidirweekly + http://docs.angularjs.org/error/$compile:nodomeventsweekly + http://docs.angularjs.org/error/$compile:nonassignweekly + http://docs.angularjs.org/error/$compile:tploadweekly + http://docs.angularjs.org/error/$compile:selmultiweekly + http://docs.angularjs.org/error/$compile:tplrtweekly + http://docs.angularjs.org/error/$compile:uterdirweekly + http://docs.angularjs.org/error/$controller:noscpweekly + http://docs.angularjs.org/error/$httpBackend:noxhrweekly + http://docs.angularjs.org/error/$injector:cdepweekly + http://docs.angularjs.org/error/indexweekly + http://docs.angularjs.org/error/$injector:itknweekly + http://docs.angularjs.org/error/$injector:nomodweekly + http://docs.angularjs.org/error/$injector:modulerrweekly + http://docs.angularjs.org/error/$injector:pgetweekly + http://docs.angularjs.org/error/$interpolate:interrweekly + http://docs.angularjs.org/error/$injector:unprweekly + http://docs.angularjs.org/error/$sce:insecurlweekly + http://docs.angularjs.org/error/$interpolate:noconcatweekly + http://docs.angularjs.org/error/jqLite:offargsweekly + http://docs.angularjs.org/error/jqLite:noselweekly + http://docs.angularjs.org/error/$location:ihshprfxweekly + http://docs.angularjs.org/error/jqLite:onargsweekly + http://docs.angularjs.org/error/$location:ipthprfxweekly + http://docs.angularjs.org/error/ng:areqweekly + http://docs.angularjs.org/error/$location:isrchargweekly + http://docs.angularjs.org/error/ng:btstrpdweekly + http://docs.angularjs.org/error/ng:cpiweekly + http://docs.angularjs.org/error/ng:cpwsweekly + http://docs.angularjs.org/error/ngModel:nonassignweekly + http://docs.angularjs.org/error/ngOptions:iexpweekly + http://docs.angularjs.org/error/ngRepeat:dupesweekly + http://docs.angularjs.org/error/ngPattern:noregexpweekly + http://docs.angularjs.org/error/ngRepeat:iexpweekly + http://docs.angularjs.org/error/ngRepeat:iidexpweekly + http://docs.angularjs.org/error/$parse:lexerrweekly + http://docs.angularjs.org/error/$parse:isecfnweekly + http://docs.angularjs.org/error/$parse:isecfldweekly + http://docs.angularjs.org/error/$parse:syntaxweekly + http://docs.angularjs.org/error/$parse:ueoeweekly + http://docs.angularjs.org/error/$resource:badargsweekly + http://docs.angularjs.org/error/$resource:badcfgweekly + http://docs.angularjs.org/error/$rootScope:infdigweekly + http://docs.angularjs.org/error/$rootScope:inprogweekly + http://docs.angularjs.org/error/$sanitize:badparseweekly + http://docs.angularjs.org/error/$sce:icontextweekly + http://docs.angularjs.org/error/$sce:iequirksweekly + http://docs.angularjs.org/error/$sce:unsafeweekly + http://docs.angularjs.org/error/$sce:itypeweekly + http://docs.angularjs.org/guide/bootstrapweekly + http://docs.angularjs.org/guide/compilerweekly + http://docs.angularjs.org/guide/conceptsweekly + http://docs.angularjs.org/guide/dev_guide.e2e-testingweekly + http://docs.angularjs.org/guide/dev_guide.mvcweekly + http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controllerweekly + http://docs.angularjs.org/guide/dev_guide.mvc.understanding_modelweekly + http://docs.angularjs.org/guide/dev_guide.mvc.understanding_viewweekly + http://docs.angularjs.org/guide/dev_guide.services.injecting_controllersweekly + http://docs.angularjs.org/guide/dev_guide.services.creating_servicesweekly + http://docs.angularjs.org/guide/dev_guide.services.$locationweekly + http://docs.angularjs.org/guide/dev_guide.services.managing_dependenciesweekly + http://docs.angularjs.org/guide/dev_guide.servicesweekly + http://docs.angularjs.org/guide/dev_guide.templates.databindingweekly + http://docs.angularjs.org/guide/dev_guide.services.testing_servicesweekly + http://docs.angularjs.org/guide/dev_guide.services.understanding_servicesweekly + http://docs.angularjs.org/guide/dev_guide.templates.css-stylingweekly + http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filtersweekly + http://docs.angularjs.org/guide/dev_guide.templates.filtersweekly + http://docs.angularjs.org/guide/dev_guide.templates.filters.using_filtersweekly + http://docs.angularjs.org/guide/dev_guide.templatesweekly + http://docs.angularjs.org/guide/dev_guide.unit-testingweekly + http://docs.angularjs.org/guide/diweekly + http://docs.angularjs.org/guide/expressionweekly + http://docs.angularjs.org/guide/directiveweekly + http://docs.angularjs.org/guide/formsweekly + http://docs.angularjs.org/guide/i18nweekly + http://docs.angularjs.org/guide/ieweekly + http://docs.angularjs.org/guide/indexweekly + http://docs.angularjs.org/guide/introductionweekly + http://docs.angularjs.org/guide/moduleweekly + http://docs.angularjs.org/guide/scopeweekly + http://docs.angularjs.org/misc/contributeweekly + http://docs.angularjs.org/guide/overviewweekly + http://docs.angularjs.org/misc/downloadingweekly + http://docs.angularjs.org/misc/startedweekly + http://docs.angularjs.org/misc/faqweekly + http://docs.angularjs.org/tutorial/indexweekly + http://docs.angularjs.org/tutorial/step_00weekly + http://docs.angularjs.org/tutorial/step_02weekly + http://docs.angularjs.org/tutorial/step_01weekly + http://docs.angularjs.org/tutorial/step_03weekly + http://docs.angularjs.org/tutorial/step_04weekly + http://docs.angularjs.org/tutorial/step_06weekly + http://docs.angularjs.org/tutorial/step_05weekly + http://docs.angularjs.org/tutorial/step_08weekly + http://docs.angularjs.org/tutorial/step_07weekly + http://docs.angularjs.org/tutorial/step_09weekly + http://docs.angularjs.org/tutorial/step_10weekly + http://docs.angularjs.org/tutorial/the_endweekly + http://docs.angularjs.org/tutorial/step_11weekly diff --git a/lib/angular/errors.json b/lib/angular/errors.json new file mode 100755 index 0000000..544d973 --- /dev/null +++ b/lib/angular/errors.json @@ -0,0 +1 @@ +{"id":"ng","generated":"Tue Aug 13 2013 14:50:39 GMT-0700 (PDT)","errors":{"$cacheFactory":{"iid":"CacheId '{0}' is already taken!"},"ngModel":{"nonassign":"Expression '{0}' is non-assignable. Element: {1}"},"$sce":{"iequirks":"Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks mode. You can fix this by adding the text to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.","insecurl":"Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}","icontext":"Attempted to trust a value in invalid context. Context: {0}; Value: {1}","itype":"Attempted to trust a non-string value in a content requiring a string: Context: {0}","unsafe":"Attempting to use an unsafe value in a safe context."},"$controller":{"noscp":"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`."},"$compile":{"nodomevents":"Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead.","multidir":"Multiple directives [{0}, {1}] asking for {2} on: {3}","nonassign":"Expression '{0}' used with directive '{1}' is non-assignable!","tplrt":"Template for directive '{0}' must have exactly one root element. {1}","selmulti":"Binding to the 'multiple' attribute is not supported. Element: {0}","tpload":"Failed to load template: {0}","iscp":"Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}","ctreq":"Controller '{0}', required by directive '{1}', can't be found!","uterdir":"Unterminated attribute, found '{0}' but no matching '{1}' found."},"$injector":{"modulerr":"Failed to instantiate module {0} due to:\n{1}","unpr":"Unknown provider: {0}","itkn":"Incorrect injection token! Expected service name as string, got {0}","cdep":"Circular dependency found: {0}","nomod":"Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.","pget":"Provider '{0}' must define $get factory method."},"$rootScope":{"inprog":"{0} already in progress","infdig":"{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}"},"ngPattern":{"noregexp":"Expected {0} to be a RegExp but was {1}. Element: {2}"},"$interpolate":{"noconcat":"Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce","interr":"Can't interpolate: {0}\n{1}"},"jqLite":{"offargs":"jqLite#off() does not support the `selector` argument","onargs":"jqLite#on() does not support the `selector` or `eventData` parameters","nosel":"Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element"},"ngOptions":{"iexp":"Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}"},"ngRepeat":{"iidexp":"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.","dupes":"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}","iexp":"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'."},"ng":{"areq":"Argument '{0}' is {1}","cpws":"Can't copy! Making copies of Window or Scope instances is not supported.","btstrpd":"App Already Bootstrapped with this Element '{0}'","cpi":"Can't copy! Source and destination are identical."},"$animate":{"notcsel":"Expecting class selector starting with '.' got '{0}'."},"$parse":{"isecfld":"Referencing \"constructor\" field in Angular expressions is disallowed! Expression: {0}","syntax":"Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].","lexerr":"Lexer Error: {0} at column{1} in expression [{2}].","ueoe":"Unexpected end of expression: {0}","isecfn":"Referencing Function in Angular expressions is disallowed! Expression: {0}"},"$httpBackend":{"noxhr":"This browser does not support XMLHttpRequest."},"$location":{"ipthprfx":"Invalid url \"{0}\", missing path prefix \"{1}\".","isrcharg":"The first argument of the `$location#search()` call must be a string or an object.","ihshprfx":"Invalid url \"{0}\", missing hash prefix \"{1}\"."},"$resource":{"badargs":"Expected up to 4 arguments [params, data, success, error], got {0} arguments","badcfg":"Error in resource configuration. Expected response to contain an {0} but got an {1}"},"$sanitize":{"badparse":"The sanitizer was unable to parse the following block of html: {0}"}}} \ No newline at end of file diff --git a/lib/angular/i18n/angular-locale_af-na.js b/lib/angular/i18n/angular-locale_af-na.js index cdb00ea..6b7e285 100755 --- a/lib/angular/i18n/angular-locale_af-na.js +++ b/lib/angular/i18n/angular-locale_af-na.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vm.", - "1": "nm." - }, - "DAY": { - "0": "Sondag", - "1": "Maandag", - "2": "Dinsdag", - "3": "Woensdag", - "4": "Donderdag", - "5": "Vrydag", - "6": "Saterdag" - }, - "MONTH": { - "0": "Januarie", - "1": "Februarie", - "2": "Maart", - "3": "April", - "4": "Mei", - "5": "Junie", - "6": "Julie", - "7": "Augustus", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Desember" - }, - "SHORTDAY": { - "0": "So", - "1": "Ma", - "2": "Di", - "3": "Wo", - "4": "Do", - "5": "Vr", - "6": "Sa" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "R", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "af-na", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_af-za.js b/lib/angular/i18n/angular-locale_af-za.js index 59c2e28..a15813d 100755 --- a/lib/angular/i18n/angular-locale_af-za.js +++ b/lib/angular/i18n/angular-locale_af-za.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vm.", - "1": "nm." - }, - "DAY": { - "0": "Sondag", - "1": "Maandag", - "2": "Dinsdag", - "3": "Woensdag", - "4": "Donderdag", - "5": "Vrydag", - "6": "Saterdag" - }, - "MONTH": { - "0": "Januarie", - "1": "Februarie", - "2": "Maart", - "3": "April", - "4": "Mei", - "5": "Junie", - "6": "Julie", - "7": "Augustus", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Desember" - }, - "SHORTDAY": { - "0": "So", - "1": "Ma", - "2": "Di", - "3": "Wo", - "4": "Do", - "5": "Vr", - "6": "Sa" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE dd MMMM y", "longDate": "dd MMMM y", "medium": "dd MMM y h:mm:ss a", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "R", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "af-za", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_af.js b/lib/angular/i18n/angular-locale_af.js index b24656b..d8f8450 100755 --- a/lib/angular/i18n/angular-locale_af.js +++ b/lib/angular/i18n/angular-locale_af.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vm.", - "1": "nm." - }, - "DAY": { - "0": "Sondag", - "1": "Maandag", - "2": "Dinsdag", - "3": "Woensdag", - "4": "Donderdag", - "5": "Vrydag", - "6": "Saterdag" - }, - "MONTH": { - "0": "Januarie", - "1": "Februarie", - "2": "Maart", - "3": "April", - "4": "Mei", - "5": "Junie", - "6": "Julie", - "7": "Augustus", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Desember" - }, - "SHORTDAY": { - "0": "So", - "1": "Ma", - "2": "Di", - "3": "Wo", - "4": "Do", - "5": "Vr", - "6": "Sa" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE dd MMMM y", "longDate": "dd MMMM y", "medium": "dd MMM y h:mm:ss a", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "R", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "af", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_am-et.js b/lib/angular/i18n/angular-locale_am-et.js index 85b7d0e..0640202 100755 --- a/lib/angular/i18n/angular-locale_am-et.js +++ b/lib/angular/i18n/angular-locale_am-et.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ጡዋት", - "1": "ከሳዓት" - }, - "DAY": { - "0": "እሑድ", - "1": "ሰኞ", - "2": "ማክሰኞ", - "3": "ረቡዕ", - "4": "ሐሙስ", - "5": "ዓርብ", - "6": "ቅዳሜ" - }, - "MONTH": { - "0": "ጃንዩወሪ", - "1": "ፌብሩወሪ", - "2": "ማርች", - "3": "ኤፕረል", - "4": "ሜይ", - "5": "ጁን", - "6": "ጁላይ", - "7": "ኦገስት", - "8": "ሴፕቴምበር", - "9": "ኦክተውበር", - "10": "ኖቬምበር", - "11": "ዲሴምበር" - }, - "SHORTDAY": { - "0": "እሑድ", - "1": "ሰኞ", - "2": "ማክሰ", - "3": "ረቡዕ", - "4": "ሐሙስ", - "5": "ዓርብ", - "6": "ቅዳሜ" - }, - "SHORTMONTH": { - "0": "ጃንዩ", - "1": "ፌብሩ", - "2": "ማርች", - "3": "ኤፕረ", - "4": "ሜይ", - "5": "ጁን", - "6": "ጁላይ", - "7": "ኦገስ", - "8": "ሴፕቴ", - "9": "ኦክተ", - "10": "ኖቬም", - "11": "ዲሴም" - }, + "AMPMS": [ + "\u1321\u12cb\u1275", + "\u12a8\u1233\u12d3\u1275" + ], + "DAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230\u129e", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Birr", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "am-et", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_am.js b/lib/angular/i18n/angular-locale_am.js index 9cad001..26c8244 100755 --- a/lib/angular/i18n/angular-locale_am.js +++ b/lib/angular/i18n/angular-locale_am.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ጡዋት", - "1": "ከሳዓት" - }, - "DAY": { - "0": "እሑድ", - "1": "ሰኞ", - "2": "ማክሰኞ", - "3": "ረቡዕ", - "4": "ሐሙስ", - "5": "ዓርብ", - "6": "ቅዳሜ" - }, - "MONTH": { - "0": "ጃንዩወሪ", - "1": "ፌብሩወሪ", - "2": "ማርች", - "3": "ኤፕረል", - "4": "ሜይ", - "5": "ጁን", - "6": "ጁላይ", - "7": "ኦገስት", - "8": "ሴፕቴምበር", - "9": "ኦክተውበር", - "10": "ኖቬምበር", - "11": "ዲሴምበር" - }, - "SHORTDAY": { - "0": "እሑድ", - "1": "ሰኞ", - "2": "ማክሰ", - "3": "ረቡዕ", - "4": "ሐሙስ", - "5": "ዓርብ", - "6": "ቅዳሜ" - }, - "SHORTMONTH": { - "0": "ጃንዩ", - "1": "ፌብሩ", - "2": "ማርች", - "3": "ኤፕረ", - "4": "ሜይ", - "5": "ጁን", - "6": "ጁላይ", - "7": "ኦገስ", - "8": "ሴፕቴ", - "9": "ኦክተ", - "10": "ኖቬም", - "11": "ዲሴም" - }, + "AMPMS": [ + "\u1321\u12cb\u1275", + "\u12a8\u1233\u12d3\u1275" + ], + "DAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230\u129e", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Birr", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "am", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-001.js b/lib/angular/i18n/angular-locale_ar-001.js index a0f872a..ee6aca0 100755 --- a/lib/angular/i18n/angular-locale_ar-001.js +++ b/lib/angular/i18n/angular-locale_ar-001.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-001", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-ae.js b/lib/angular/i18n/angular-locale_ar-ae.js index b14c48a..6f4f501 100755 --- a/lib/angular/i18n/angular-locale_ar-ae.js +++ b/lib/angular/i18n/angular-locale_ar-ae.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-ae", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-bh.js b/lib/angular/i18n/angular-locale_ar-bh.js index 4def490..1b32a5b 100755 --- a/lib/angular/i18n/angular-locale_ar-bh.js +++ b/lib/angular/i18n/angular-locale_ar-bh.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-bh", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-dz.js b/lib/angular/i18n/angular-locale_ar-dz.js index 8f9ec82..b4bdf08 100755 --- a/lib/angular/i18n/angular-locale_ar-dz.js +++ b/lib/angular/i18n/angular-locale_ar-dz.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", "medium": "yyyy/MM/dd h:mm:ss a", "mediumDate": "yyyy/MM/dd", "mediumTime": "h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-dz", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-eg.js b/lib/angular/i18n/angular-locale_ar-eg.js index ddb4e5c..2e40e63 100755 --- a/lib/angular/i18n/angular-locale_ar-eg.js +++ b/lib/angular/i18n/angular-locale_ar-eg.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-eg", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-iq.js b/lib/angular/i18n/angular-locale_ar-iq.js index ba1a430..c8e8af8 100755 --- a/lib/angular/i18n/angular-locale_ar-iq.js +++ b/lib/angular/i18n/angular-locale_ar-iq.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-iq", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-jo.js b/lib/angular/i18n/angular-locale_ar-jo.js index 3196e46..752de35 100755 --- a/lib/angular/i18n/angular-locale_ar-jo.js +++ b/lib/angular/i18n/angular-locale_ar-jo.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "كانون الثاني", - "1": "شباط", - "2": "آذار", - "3": "نيسان", - "4": "أيار", - "5": "حزيران", - "6": "تموز", - "7": "آب", - "8": "أيلول", - "9": "تشرين الأول", - "10": "تشرين الثاني", - "11": "كانون الأول" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "كانون الثاني", - "1": "شباط", - "2": "آذار", - "3": "نيسان", - "4": "أيار", - "5": "حزيران", - "6": "تموز", - "7": "آب", - "8": "أيلول", - "9": "تشرين الأول", - "10": "تشرين الثاني", - "11": "كانون الأول" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-jo", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-kw.js b/lib/angular/i18n/angular-locale_ar-kw.js index d0cfff8..7e81272 100755 --- a/lib/angular/i18n/angular-locale_ar-kw.js +++ b/lib/angular/i18n/angular-locale_ar-kw.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-kw", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-lb.js b/lib/angular/i18n/angular-locale_ar-lb.js index f640dcc..b1f9ce1 100755 --- a/lib/angular/i18n/angular-locale_ar-lb.js +++ b/lib/angular/i18n/angular-locale_ar-lb.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "كانون الثاني", - "1": "شباط", - "2": "آذار", - "3": "نيسان", - "4": "أيار", - "5": "حزيران", - "6": "تموز", - "7": "آب", - "8": "أيلول", - "9": "تشرين الأول", - "10": "تشرين الثاني", - "11": "كانون الأول" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "كانون الثاني", - "1": "شباط", - "2": "آذار", - "3": "نيسان", - "4": "أيار", - "5": "حزيران", - "6": "تموز", - "7": "آب", - "8": "أيلول", - "9": "تشرين الأول", - "10": "تشرين الثاني", - "11": "كانون الأول" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-lb", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-ly.js b/lib/angular/i18n/angular-locale_ar-ly.js index adc7df1..5f09f8a 100755 --- a/lib/angular/i18n/angular-locale_ar-ly.js +++ b/lib/angular/i18n/angular-locale_ar-ly.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-ly", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-ma.js b/lib/angular/i18n/angular-locale_ar-ma.js index 79bdfe6..e08616b 100755 --- a/lib/angular/i18n/angular-locale_ar-ma.js +++ b/lib/angular/i18n/angular-locale_ar-ma.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", "medium": "yyyy/MM/dd h:mm:ss a", "mediumDate": "yyyy/MM/dd", "mediumTime": "h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-ma", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-om.js b/lib/angular/i18n/angular-locale_ar-om.js index 701eaec..343ace3 100755 --- a/lib/angular/i18n/angular-locale_ar-om.js +++ b/lib/angular/i18n/angular-locale_ar-om.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-om", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-qa.js b/lib/angular/i18n/angular-locale_ar-qa.js index 2fe14b2..0ecd38a 100755 --- a/lib/angular/i18n/angular-locale_ar-qa.js +++ b/lib/angular/i18n/angular-locale_ar-qa.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-qa", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-sa.js b/lib/angular/i18n/angular-locale_ar-sa.js index 5487dac..1b880d9 100755 --- a/lib/angular/i18n/angular-locale_ar-sa.js +++ b/lib/angular/i18n/angular-locale_ar-sa.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-sa", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-sd.js b/lib/angular/i18n/angular-locale_ar-sd.js index 50a6584..c78fdff 100755 --- a/lib/angular/i18n/angular-locale_ar-sd.js +++ b/lib/angular/i18n/angular-locale_ar-sd.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-sd", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-sy.js b/lib/angular/i18n/angular-locale_ar-sy.js index d751483..41e364a 100755 --- a/lib/angular/i18n/angular-locale_ar-sy.js +++ b/lib/angular/i18n/angular-locale_ar-sy.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "كانون الثاني", - "1": "شباط", - "2": "آذار", - "3": "نيسان", - "4": "أيار", - "5": "حزيران", - "6": "تموز", - "7": "آب", - "8": "أيلول", - "9": "تشرين الأول", - "10": "تشرين الثاني", - "11": "كانون الأول" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "كانون الثاني", - "1": "شباط", - "2": "آذار", - "3": "نيسان", - "4": "أيار", - "5": "حزيران", - "6": "تموز", - "7": "آب", - "8": "أيلول", - "9": "تشرين الأول", - "10": "تشرين الثاني", - "11": "كانون الأول" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-sy", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-tn.js b/lib/angular/i18n/angular-locale_ar-tn.js index 9ad3dcf..fc4a8b0 100755 --- a/lib/angular/i18n/angular-locale_ar-tn.js +++ b/lib/angular/i18n/angular-locale_ar-tn.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", "medium": "yyyy/MM/dd h:mm:ss a", "mediumDate": "yyyy/MM/dd", "mediumTime": "h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-tn", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar-ye.js b/lib/angular/i18n/angular-locale_ar-ye.js index 35eebf2..f5dc74e 100755 --- a/lib/angular/i18n/angular-locale_ar-ye.js +++ b/lib/angular/i18n/angular-locale_ar-ye.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar-ye", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ar.js b/lib/angular/i18n/angular-locale_ar.js index aae0b96..300498f 100755 --- a/lib/angular/i18n/angular-locale_ar.js +++ b/lib/angular/i18n/angular-locale_ar.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ص", - "1": "م" - }, - "DAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "MONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "SHORTDAY": { - "0": "الأحد", - "1": "الاثنين", - "2": "الثلاثاء", - "3": "الأربعاء", - "4": "الخميس", - "5": "الجمعة", - "6": "السبت" - }, - "SHORTMONTH": { - "0": "يناير", - "1": "فبراير", - "2": "مارس", - "3": "أبريل", - "4": "مايو", - "5": "يونيو", - "6": "يوليو", - "7": "أغسطس", - "8": "سبتمبر", - "9": "أكتوبر", - "10": "نوفمبر", - "11": "ديسمبر" - }, - "fullDate": "EEEE، d MMMM، y", - "longDate": "d MMMM، y", - "medium": "dd‏/MM‏/yyyy h:mm:ss a", - "mediumDate": "dd‏/MM‏/yyyy", + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/yyyy", "mediumTime": "h:mm:ss a", - "short": "d‏/M‏/yyyy h:mm a", - "shortDate": "d‏/M‏/yyyy", + "short": "d\u200f/M\u200f/yyyy h:mm a", + "shortDate": "d\u200f/M\u200f/yyyy", "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ar", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_bg-bg.js b/lib/angular/i18n/angular-locale_bg-bg.js index 6c123e2..b33dc47 100755 --- a/lib/angular/i18n/angular-locale_bg-bg.js +++ b/lib/angular/i18n/angular-locale_bg-bg.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "пр. об.", - "1": "сл. об." - }, - "DAY": { - "0": "неделя", - "1": "понеделник", - "2": "вторник", - "3": "сряда", - "4": "четвъртък", - "5": "петък", - "6": "събота" - }, - "MONTH": { - "0": "януари", - "1": "февруари", - "2": "март", - "3": "април", - "4": "май", - "5": "юни", - "6": "юли", - "7": "август", - "8": "септември", - "9": "октомври", - "10": "ноември", - "11": "декември" - }, - "SHORTDAY": { - "0": "нд", - "1": "пн", - "2": "вт", - "3": "ср", - "4": "чт", - "5": "пт", - "6": "сб" - }, - "SHORTMONTH": { - "0": "ян.", - "1": "февр.", - "2": "март", - "3": "апр.", - "4": "май", - "5": "юни", - "6": "юли", - "7": "авг.", - "8": "септ.", - "9": "окт.", - "10": "ноем.", - "11": "дек." - }, + "AMPMS": [ + "\u043f\u0440. \u043e\u0431.", + "\u0441\u043b. \u043e\u0431." + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\u0434\u0435\u043a." + ], "fullDate": "dd MMMM y, EEEE", "longDate": "dd MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "lev", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "bg-bg", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_bg.js b/lib/angular/i18n/angular-locale_bg.js index d878035..7d8a253 100755 --- a/lib/angular/i18n/angular-locale_bg.js +++ b/lib/angular/i18n/angular-locale_bg.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "пр. об.", - "1": "сл. об." - }, - "DAY": { - "0": "неделя", - "1": "понеделник", - "2": "вторник", - "3": "сряда", - "4": "четвъртък", - "5": "петък", - "6": "събота" - }, - "MONTH": { - "0": "януари", - "1": "февруари", - "2": "март", - "3": "април", - "4": "май", - "5": "юни", - "6": "юли", - "7": "август", - "8": "септември", - "9": "октомври", - "10": "ноември", - "11": "декември" - }, - "SHORTDAY": { - "0": "нд", - "1": "пн", - "2": "вт", - "3": "ср", - "4": "чт", - "5": "пт", - "6": "сб" - }, - "SHORTMONTH": { - "0": "ян.", - "1": "февр.", - "2": "март", - "3": "апр.", - "4": "май", - "5": "юни", - "6": "юли", - "7": "авг.", - "8": "септ.", - "9": "окт.", - "10": "ноем.", - "11": "дек." - }, + "AMPMS": [ + "\u043f\u0440. \u043e\u0431.", + "\u0441\u043b. \u043e\u0431." + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\u0434\u0435\u043a." + ], "fullDate": "dd MMMM y, EEEE", "longDate": "dd MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "lev", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "bg", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_bn-bd.js b/lib/angular/i18n/angular-locale_bn-bd.js index 3ebe19f..c16bdda 100755 --- a/lib/angular/i18n/angular-locale_bn-bd.js +++ b/lib/angular/i18n/angular-locale_bn-bd.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "রবিবার", - "1": "সোমবার", - "2": "মঙ্গলবার", - "3": "বুধবার", - "4": "বৃহষ্পতিবার", - "5": "শুক্রবার", - "6": "শনিবার" - }, - "MONTH": { - "0": "জানুয়ারী", - "1": "ফেব্রুয়ারী", - "2": "মার্চ", - "3": "এপ্রিল", - "4": "মে", - "5": "জুন", - "6": "জুলাই", - "7": "আগস্ট", - "8": "সেপ্টেম্বর", - "9": "অক্টোবর", - "10": "নভেম্বর", - "11": "ডিসেম্বর" - }, - "SHORTDAY": { - "0": "রবি", - "1": "সোম", - "2": "মঙ্গল", - "3": "বুধ", - "4": "বৃহস্পতি", - "5": "শুক্র", - "6": "শনি" - }, - "SHORTMONTH": { - "0": "জানুয়ারী", - "1": "ফেব্রুয়ারী", - "2": "মার্চ", - "3": "এপ্রিল", - "4": "মে", - "5": "জুন", - "6": "জুলাই", - "7": "আগস্ট", - "8": "সেপ্টেম্বর", - "9": "অক্টোবর", - "10": "নভেম্বর", - "11": "ডিসেম্বর" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\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", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "৳", + "CURRENCY_SYM": "\u09f3", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": "\u00A4)", + "negSuf": "\u00a4)", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "bn-bd", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_bn-in.js b/lib/angular/i18n/angular-locale_bn-in.js index a00f9fa..0014314 100755 --- a/lib/angular/i18n/angular-locale_bn-in.js +++ b/lib/angular/i18n/angular-locale_bn-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "রবিবার", - "1": "সোমবার", - "2": "মঙ্গলবার", - "3": "বুধবার", - "4": "বৃহষ্পতিবার", - "5": "শুক্রবার", - "6": "শনিবার" - }, - "MONTH": { - "0": "জানুয়ারী", - "1": "ফেব্রুয়ারী", - "2": "মার্চ", - "3": "এপ্রিল", - "4": "মে", - "5": "জুন", - "6": "জুলাই", - "7": "আগস্ট", - "8": "সেপ্টেম্বর", - "9": "অক্টোবর", - "10": "নভেম্বর", - "11": "ডিসেম্বর" - }, - "SHORTDAY": { - "0": "রবি", - "1": "সোম", - "2": "মঙ্গল", - "3": "বুধ", - "4": "বৃহস্পতি", - "5": "শুক্র", - "6": "শনি" - }, - "SHORTMONTH": { - "0": "জানুয়ারী", - "1": "ফেব্রুয়ারী", - "2": "মার্চ", - "3": "এপ্রিল", - "4": "মে", - "5": "জুন", - "6": "জুলাই", - "7": "আগস্ট", - "8": "সেপ্টেম্বর", - "9": "অক্টোবর", - "10": "নভেম্বর", - "11": "ডিসেম্বর" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\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", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "৳", + "CURRENCY_SYM": "\u09f3", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": "\u00A4)", + "negSuf": "\u00a4)", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "bn-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_bn.js b/lib/angular/i18n/angular-locale_bn.js index 2779ae8..82fbe38 100755 --- a/lib/angular/i18n/angular-locale_bn.js +++ b/lib/angular/i18n/angular-locale_bn.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "রবিবার", - "1": "সোমবার", - "2": "মঙ্গলবার", - "3": "বুধবার", - "4": "বৃহষ্পতিবার", - "5": "শুক্রবার", - "6": "শনিবার" - }, - "MONTH": { - "0": "জানুয়ারী", - "1": "ফেব্রুয়ারী", - "2": "মার্চ", - "3": "এপ্রিল", - "4": "মে", - "5": "জুন", - "6": "জুলাই", - "7": "আগস্ট", - "8": "সেপ্টেম্বর", - "9": "অক্টোবর", - "10": "নভেম্বর", - "11": "ডিসেম্বর" - }, - "SHORTDAY": { - "0": "রবি", - "1": "সোম", - "2": "মঙ্গল", - "3": "বুধ", - "4": "বৃহস্পতি", - "5": "শুক্র", - "6": "শনি" - }, - "SHORTMONTH": { - "0": "জানুয়ারী", - "1": "ফেব্রুয়ারী", - "2": "মার্চ", - "3": "এপ্রিল", - "4": "মে", - "5": "জুন", - "6": "জুলাই", - "7": "আগস্ট", - "8": "সেপ্টেম্বর", - "9": "অক্টোবর", - "10": "নভেম্বর", - "11": "ডিসেম্বর" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\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", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "৳", + "CURRENCY_SYM": "\u09f3", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": "\u00A4)", + "negSuf": "\u00a4)", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "bn", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ca-ad.js b/lib/angular/i18n/angular-locale_ca-ad.js index 79735b1..f1cdab2 100755 --- a/lib/angular/i18n/angular-locale_ca-ad.js +++ b/lib/angular/i18n/angular-locale_ca-ad.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "diumenge", - "1": "dilluns", - "2": "dimarts", - "3": "dimecres", - "4": "dijous", - "5": "divendres", - "6": "dissabte" - }, - "MONTH": { - "0": "de gener", - "1": "de febrer", - "2": "de març", - "3": "d’abril", - "4": "de maig", - "5": "de juny", - "6": "de juliol", - "7": "d’agost", - "8": "de setembre", - "9": "d’octubre", - "10": "de novembre", - "11": "de desembre" - }, - "SHORTDAY": { - "0": "dg.", - "1": "dl.", - "2": "dt.", - "3": "dc.", - "4": "dj.", - "5": "dv.", - "6": "ds." - }, - "SHORTMONTH": { - "0": "de gen.", - "1": "de febr.", - "2": "de març", - "3": "d’abr.", - "4": "de maig", - "5": "de juny", - "6": "de jul.", - "7": "d’ag.", - "8": "de set.", - "9": "d’oct.", - "10": "de nov.", - "11": "de des." - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "MONTH": [ + "de gener", + "de febrer", + "de mar\u00e7", + "d\u2019abril", + "de maig", + "de juny", + "de juliol", + "d\u2019agost", + "de setembre", + "d\u2019octubre", + "de novembre", + "de desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "de gen.", + "de febr.", + "de mar\u00e7", + "d\u2019abr.", + "de maig", + "de juny", + "de jul.", + "d\u2019ag.", + "de set.", + "d\u2019oct.", + "de nov.", + "de des." + ], "fullDate": "EEEE d MMMM 'de' y", "longDate": "d MMMM 'de' y", "medium": "dd/MM/yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ca-ad", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ca-es.js b/lib/angular/i18n/angular-locale_ca-es.js index e8fb418..90662ed 100755 --- a/lib/angular/i18n/angular-locale_ca-es.js +++ b/lib/angular/i18n/angular-locale_ca-es.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "diumenge", - "1": "dilluns", - "2": "dimarts", - "3": "dimecres", - "4": "dijous", - "5": "divendres", - "6": "dissabte" - }, - "MONTH": { - "0": "de gener", - "1": "de febrer", - "2": "de març", - "3": "d’abril", - "4": "de maig", - "5": "de juny", - "6": "de juliol", - "7": "d’agost", - "8": "de setembre", - "9": "d’octubre", - "10": "de novembre", - "11": "de desembre" - }, - "SHORTDAY": { - "0": "dg.", - "1": "dl.", - "2": "dt.", - "3": "dc.", - "4": "dj.", - "5": "dv.", - "6": "ds." - }, - "SHORTMONTH": { - "0": "de gen.", - "1": "de febr.", - "2": "de març", - "3": "d’abr.", - "4": "de maig", - "5": "de juny", - "6": "de jul.", - "7": "d’ag.", - "8": "de set.", - "9": "d’oct.", - "10": "de nov.", - "11": "de des." - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "MONTH": [ + "de gener", + "de febrer", + "de mar\u00e7", + "d\u2019abril", + "de maig", + "de juny", + "de juliol", + "d\u2019agost", + "de setembre", + "d\u2019octubre", + "de novembre", + "de desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "de gen.", + "de febr.", + "de mar\u00e7", + "d\u2019abr.", + "de maig", + "de juny", + "de jul.", + "d\u2019ag.", + "de set.", + "d\u2019oct.", + "de nov.", + "de des." + ], "fullDate": "EEEE d MMMM 'de' y", "longDate": "d MMMM 'de' y", "medium": "dd/MM/yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ca-es", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ca.js b/lib/angular/i18n/angular-locale_ca.js index f7a027d..cf881e0 100755 --- a/lib/angular/i18n/angular-locale_ca.js +++ b/lib/angular/i18n/angular-locale_ca.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "diumenge", - "1": "dilluns", - "2": "dimarts", - "3": "dimecres", - "4": "dijous", - "5": "divendres", - "6": "dissabte" - }, - "MONTH": { - "0": "de gener", - "1": "de febrer", - "2": "de març", - "3": "d’abril", - "4": "de maig", - "5": "de juny", - "6": "de juliol", - "7": "d’agost", - "8": "de setembre", - "9": "d’octubre", - "10": "de novembre", - "11": "de desembre" - }, - "SHORTDAY": { - "0": "dg.", - "1": "dl.", - "2": "dt.", - "3": "dc.", - "4": "dj.", - "5": "dv.", - "6": "ds." - }, - "SHORTMONTH": { - "0": "de gen.", - "1": "de febr.", - "2": "de març", - "3": "d’abr.", - "4": "de maig", - "5": "de juny", - "6": "de jul.", - "7": "d’ag.", - "8": "de set.", - "9": "d’oct.", - "10": "de nov.", - "11": "de des." - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "MONTH": [ + "de gener", + "de febrer", + "de mar\u00e7", + "d\u2019abril", + "de maig", + "de juny", + "de juliol", + "d\u2019agost", + "de setembre", + "d\u2019octubre", + "de novembre", + "de desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "de gen.", + "de febr.", + "de mar\u00e7", + "d\u2019abr.", + "de maig", + "de juny", + "de jul.", + "d\u2019ag.", + "de set.", + "d\u2019oct.", + "de nov.", + "de des." + ], "fullDate": "EEEE d MMMM 'de' y", "longDate": "d MMMM 'de' y", "medium": "dd/MM/yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ca", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_cs-cz.js b/lib/angular/i18n/angular-locale_cs-cz.js index 2c211d4..b0c3dfd 100755 --- a/lib/angular/i18n/angular-locale_cs-cz.js +++ b/lib/angular/i18n/angular-locale_cs-cz.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "dop.", - "1": "odp." - }, - "DAY": { - "0": "neděle", - "1": "pondělí", - "2": "úterý", - "3": "středa", - "4": "čtvrtek", - "5": "pátek", - "6": "sobota" - }, - "MONTH": { - "0": "ledna", - "1": "února", - "2": "března", - "3": "dubna", - "4": "května", - "5": "června", - "6": "července", - "7": "srpna", - "8": "září", - "9": "října", - "10": "listopadu", - "11": "prosince" - }, - "SHORTDAY": { - "0": "ne", - "1": "po", - "2": "út", - "3": "st", - "4": "čt", - "5": "pá", - "6": "so" - }, - "SHORTMONTH": { - "0": "Led", - "1": "Úno", - "2": "Bře", - "3": "Dub", - "4": "Kvě", - "5": "Čer", - "6": "Čvc", - "7": "Srp", - "8": "Zář", - "9": "Říj", - "10": "Lis", - "11": "Pro" - }, + "AMPMS": [ + "dop.", + "odp." + ], + "DAY": [ + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota" + ], + "MONTH": [ + "ledna", + "\u00fanora", + "b\u0159ezna", + "dubna", + "kv\u011btna", + "\u010dervna", + "\u010dervence", + "srpna", + "z\u00e1\u0159\u00ed", + "\u0159\u00edjna", + "listopadu", + "prosince" + ], + "SHORTDAY": [ + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so" + ], + "SHORTMONTH": [ + "Led", + "\u00dano", + "B\u0159e", + "Dub", + "Kv\u011b", + "\u010cer", + "\u010cvc", + "Srp", + "Z\u00e1\u0159", + "\u0158\u00edj", + "Lis", + "Pro" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "d. M. yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "Kč", + "CURRENCY_SYM": "K\u010d", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "cs-cz", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_cs.js b/lib/angular/i18n/angular-locale_cs.js index 18f3727..fbe92cf 100755 --- a/lib/angular/i18n/angular-locale_cs.js +++ b/lib/angular/i18n/angular-locale_cs.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "dop.", - "1": "odp." - }, - "DAY": { - "0": "neděle", - "1": "pondělí", - "2": "úterý", - "3": "středa", - "4": "čtvrtek", - "5": "pátek", - "6": "sobota" - }, - "MONTH": { - "0": "ledna", - "1": "února", - "2": "března", - "3": "dubna", - "4": "května", - "5": "června", - "6": "července", - "7": "srpna", - "8": "září", - "9": "října", - "10": "listopadu", - "11": "prosince" - }, - "SHORTDAY": { - "0": "ne", - "1": "po", - "2": "út", - "3": "st", - "4": "čt", - "5": "pá", - "6": "so" - }, - "SHORTMONTH": { - "0": "Led", - "1": "Úno", - "2": "Bře", - "3": "Dub", - "4": "Kvě", - "5": "Čer", - "6": "Čvc", - "7": "Srp", - "8": "Zář", - "9": "Říj", - "10": "Lis", - "11": "Pro" - }, + "AMPMS": [ + "dop.", + "odp." + ], + "DAY": [ + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota" + ], + "MONTH": [ + "ledna", + "\u00fanora", + "b\u0159ezna", + "dubna", + "kv\u011btna", + "\u010dervna", + "\u010dervence", + "srpna", + "z\u00e1\u0159\u00ed", + "\u0159\u00edjna", + "listopadu", + "prosince" + ], + "SHORTDAY": [ + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so" + ], + "SHORTMONTH": [ + "Led", + "\u00dano", + "B\u0159e", + "Dub", + "Kv\u011b", + "\u010cer", + "\u010cvc", + "Srp", + "Z\u00e1\u0159", + "\u0158\u00edj", + "Lis", + "Pro" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "d. M. yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "Kč", + "CURRENCY_SYM": "K\u010d", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "cs", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_da-dk.js b/lib/angular/i18n/angular-locale_da-dk.js index 985372b..3a7afac 100755 --- a/lib/angular/i18n/angular-locale_da-dk.js +++ b/lib/angular/i18n/angular-locale_da-dk.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "f.m.", - "1": "e.m." - }, - "DAY": { - "0": "søndag", - "1": "mandag", - "2": "tirsdag", - "3": "onsdag", - "4": "torsdag", - "5": "fredag", - "6": "lørdag" - }, - "MONTH": { - "0": "januar", - "1": "februar", - "2": "marts", - "3": "april", - "4": "maj", - "5": "juni", - "6": "juli", - "7": "august", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "søn", - "1": "man", - "2": "tir", - "3": "ons", - "4": "tor", - "5": "fre", - "6": "lør" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mar.", - "3": "apr.", - "4": "maj", - "5": "jun.", - "6": "jul.", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "f.m.", + "e.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n", + "man", + "tir", + "ons", + "tor", + "fre", + "l\u00f8r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE 'den' d. MMMM y", "longDate": "d. MMM y", "medium": "dd/MM/yyyy HH.mm.ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "da-dk", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_da.js b/lib/angular/i18n/angular-locale_da.js index 2d7af4c..52c97db 100755 --- a/lib/angular/i18n/angular-locale_da.js +++ b/lib/angular/i18n/angular-locale_da.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "f.m.", - "1": "e.m." - }, - "DAY": { - "0": "søndag", - "1": "mandag", - "2": "tirsdag", - "3": "onsdag", - "4": "torsdag", - "5": "fredag", - "6": "lørdag" - }, - "MONTH": { - "0": "januar", - "1": "februar", - "2": "marts", - "3": "april", - "4": "maj", - "5": "juni", - "6": "juli", - "7": "august", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "søn", - "1": "man", - "2": "tir", - "3": "ons", - "4": "tor", - "5": "fre", - "6": "lør" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mar.", - "3": "apr.", - "4": "maj", - "5": "jun.", - "6": "jul.", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "f.m.", + "e.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n", + "man", + "tir", + "ons", + "tor", + "fre", + "l\u00f8r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE 'den' d. MMMM y", "longDate": "d. MMM y", "medium": "dd/MM/yyyy HH.mm.ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "da", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de-at.js b/lib/angular/i18n/angular-locale_de-at.js index 68a8114..9c7c455 100755 --- a/lib/angular/i18n/angular-locale_de-at.js +++ b/lib/angular/i18n/angular-locale_de-at.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Jänner", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jän", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "J\u00e4nner", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "J\u00e4n", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, dd. MMMM y", "longDate": "dd. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "de-at", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de-be.js b/lib/angular/i18n/angular-locale_de-be.js index 25e687c..63b32dc 100755 --- a/lib/angular/i18n/angular-locale_de-be.js +++ b/lib/angular/i18n/angular-locale_de-be.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "de-be", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de-ch.js b/lib/angular/i18n/angular-locale_de-ch.js index 1df9abd..178c463 100755 --- a/lib/angular/i18n/angular-locale_de-ch.js +++ b/lib/angular/i18n/angular-locale_de-ch.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "CHF", "DECIMAL_SEP": ".", "GROUP_SEP": "'", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "de-ch", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de-de.js b/lib/angular/i18n/angular-locale_de-de.js index 9da0393..404715f 100755 --- a/lib/angular/i18n/angular-locale_de-de.js +++ b/lib/angular/i18n/angular-locale_de-de.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "de-de", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de-li.js b/lib/angular/i18n/angular-locale_de-li.js index 3a18d62..8f3d2d2 100755 --- a/lib/angular/i18n/angular-locale_de-li.js +++ b/lib/angular/i18n/angular-locale_de-li.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "de-li", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de-lu.js b/lib/angular/i18n/angular-locale_de-lu.js index b72cafc..70a7582 100755 --- a/lib/angular/i18n/angular-locale_de-lu.js +++ b/lib/angular/i18n/angular-locale_de-lu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "de-lu", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_de.js b/lib/angular/i18n/angular-locale_de.js index b1f4031..ebb2853 100755 --- a/lib/angular/i18n/angular-locale_de.js +++ b/lib/angular/i18n/angular-locale_de.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nachm." - }, - "DAY": { - "0": "Sonntag", - "1": "Montag", - "2": "Dienstag", - "3": "Mittwoch", - "4": "Donnerstag", - "5": "Freitag", - "6": "Samstag" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "August", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Dezember" - }, - "SHORTDAY": { - "0": "So.", - "1": "Mo.", - "2": "Di.", - "3": "Mi.", - "4": "Do.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "de", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_el-cy.js b/lib/angular/i18n/angular-locale_el-cy.js index e94025d..1252687 100755 --- a/lib/angular/i18n/angular-locale_el-cy.js +++ b/lib/angular/i18n/angular-locale_el-cy.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "π.μ.", - "1": "μ.μ." - }, - "DAY": { - "0": "Κυριακή", - "1": "Δευτέρα", - "2": "Τρίτη", - "3": "Τετάρτη", - "4": "Πέμπτη", - "5": "Παρασκευή", - "6": "Σάββατο" - }, - "MONTH": { - "0": "Ιανουαρίου", - "1": "Φεβρουαρίου", - "2": "Μαρτίου", - "3": "Απριλίου", - "4": "Μαΐου", - "5": "Ιουνίου", - "6": "Ιουλίου", - "7": "Αυγούστου", - "8": "Σεπτεμβρίου", - "9": "Οκτωβρίου", - "10": "Νοεμβρίου", - "11": "Δεκεμβρίου" - }, - "SHORTDAY": { - "0": "Κυρ", - "1": "Δευ", - "2": "Τρι", - "3": "Τετ", - "4": "Πεμ", - "5": "Παρ", - "6": "Σαβ" - }, - "SHORTMONTH": { - "0": "Ιαν", - "1": "Φεβ", - "2": "Μαρ", - "3": "Απρ", - "4": "Μαϊ", - "5": "Ιουν", - "6": "Ιουλ", - "7": "Αυγ", - "8": "Σεπ", - "9": "Οκτ", - "10": "Νοε", - "11": "Δεκ" - }, + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03b9", + "\u03a4\u03b5\u03c4", + "\u03a0\u03b5\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03b1\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u03ca", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\u0394\u03b5\u03ba" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "el-cy", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_el-gr.js b/lib/angular/i18n/angular-locale_el-gr.js index 0b658a8..a6c045a 100755 --- a/lib/angular/i18n/angular-locale_el-gr.js +++ b/lib/angular/i18n/angular-locale_el-gr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "π.μ.", - "1": "μ.μ." - }, - "DAY": { - "0": "Κυριακή", - "1": "Δευτέρα", - "2": "Τρίτη", - "3": "Τετάρτη", - "4": "Πέμπτη", - "5": "Παρασκευή", - "6": "Σάββατο" - }, - "MONTH": { - "0": "Ιανουαρίου", - "1": "Φεβρουαρίου", - "2": "Μαρτίου", - "3": "Απριλίου", - "4": "Μαΐου", - "5": "Ιουνίου", - "6": "Ιουλίου", - "7": "Αυγούστου", - "8": "Σεπτεμβρίου", - "9": "Οκτωβρίου", - "10": "Νοεμβρίου", - "11": "Δεκεμβρίου" - }, - "SHORTDAY": { - "0": "Κυρ", - "1": "Δευ", - "2": "Τρι", - "3": "Τετ", - "4": "Πεμ", - "5": "Παρ", - "6": "Σαβ" - }, - "SHORTMONTH": { - "0": "Ιαν", - "1": "Φεβ", - "2": "Μαρ", - "3": "Απρ", - "4": "Μαϊ", - "5": "Ιουν", - "6": "Ιουλ", - "7": "Αυγ", - "8": "Σεπ", - "9": "Οκτ", - "10": "Νοε", - "11": "Δεκ" - }, + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03b9", + "\u03a4\u03b5\u03c4", + "\u03a0\u03b5\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03b1\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u03ca", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\u0394\u03b5\u03ba" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "el-gr", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_el.js b/lib/angular/i18n/angular-locale_el.js index 7f44b6a..cdecf74 100755 --- a/lib/angular/i18n/angular-locale_el.js +++ b/lib/angular/i18n/angular-locale_el.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "π.μ.", - "1": "μ.μ." - }, - "DAY": { - "0": "Κυριακή", - "1": "Δευτέρα", - "2": "Τρίτη", - "3": "Τετάρτη", - "4": "Πέμπτη", - "5": "Παρασκευή", - "6": "Σάββατο" - }, - "MONTH": { - "0": "Ιανουαρίου", - "1": "Φεβρουαρίου", - "2": "Μαρτίου", - "3": "Απριλίου", - "4": "Μαΐου", - "5": "Ιουνίου", - "6": "Ιουλίου", - "7": "Αυγούστου", - "8": "Σεπτεμβρίου", - "9": "Οκτωβρίου", - "10": "Νοεμβρίου", - "11": "Δεκεμβρίου" - }, - "SHORTDAY": { - "0": "Κυρ", - "1": "Δευ", - "2": "Τρι", - "3": "Τετ", - "4": "Πεμ", - "5": "Παρ", - "6": "Σαβ" - }, - "SHORTMONTH": { - "0": "Ιαν", - "1": "Φεβ", - "2": "Μαρ", - "3": "Απρ", - "4": "Μαϊ", - "5": "Ιουν", - "6": "Ιουλ", - "7": "Αυγ", - "8": "Σεπ", - "9": "Οκτ", - "10": "Νοε", - "11": "Δεκ" - }, + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03b9", + "\u03a4\u03b5\u03c4", + "\u03a0\u03b5\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03b1\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u03ca", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\u0394\u03b5\u03ba" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "el", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-as.js b/lib/angular/i18n/angular-locale_en-as.js index af76548..d1cab80 100755 --- a/lib/angular/i18n/angular-locale_en-as.js +++ b/lib/angular/i18n/angular-locale_en-as.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-as", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-au.js b/lib/angular/i18n/angular-locale_en-au.js index 09c874a..a0de72b 100755 --- a/lib/angular/i18n/angular-locale_en-au.js +++ b/lib/angular/i18n/angular-locale_en-au.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM y", "longDate": "d MMMM y", "medium": "dd/MM/yyyy h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-au", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-bb.js b/lib/angular/i18n/angular-locale_en-bb.js index 00a8121..91ee7ff 100755 --- a/lib/angular/i18n/angular-locale_en-bb.js +++ b/lib/angular/i18n/angular-locale_en-bb.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-bb", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-be.js b/lib/angular/i18n/angular-locale_en-be.js index 2f28965..7ec6b29 100755 --- a/lib/angular/i18n/angular-locale_en-be.js +++ b/lib/angular/i18n/angular-locale_en-be.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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 d MMMM y", "longDate": "d MMM y", "medium": "dd MMM y HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-be", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-bm.js b/lib/angular/i18n/angular-locale_en-bm.js index e9b01c6..49f670e 100755 --- a/lib/angular/i18n/angular-locale_en-bm.js +++ b/lib/angular/i18n/angular-locale_en-bm.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-bm", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-bw.js b/lib/angular/i18n/angular-locale_en-bw.js index 5105e94..c7d9855 100755 --- a/lib/angular/i18n/angular-locale_en-bw.js +++ b/lib/angular/i18n/angular-locale_en-bw.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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 dd MMMM y", "longDate": "dd MMMM y", "medium": "MMM d, y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-bw", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-bz.js b/lib/angular/i18n/angular-locale_en-bz.js index 8b17431..e40b2d5 100755 --- a/lib/angular/i18n/angular-locale_en-bz.js +++ b/lib/angular/i18n/angular-locale_en-bz.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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": "dd MMMM y", "longDate": "dd MMMM y", "medium": "dd-MMM-y HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-bz", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-ca.js b/lib/angular/i18n/angular-locale_en-ca.js index 6ab0190..cd137fb 100755 --- a/lib/angular/i18n/angular-locale_en-ca.js +++ b/lib/angular/i18n/angular-locale_en-ca.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM, y", "longDate": "d MMMM, y", "medium": "yyyy-MM-dd h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-ca", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-dsrt-us.js b/lib/angular/i18n/angular-locale_en-dsrt-us.js index c7a6271..52e9f96 100755 --- a/lib/angular/i18n/angular-locale_en-dsrt-us.js +++ b/lib/angular/i18n/angular-locale_en-dsrt-us.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "𐐈𐐣", - "1": "𐐑𐐣" - }, - "DAY": { - "0": "𐐝𐐲𐑌𐐼𐐩", - "1": "𐐣𐐲𐑌𐐼𐐩", - "2": "𐐓𐐭𐑆𐐼𐐩", - "3": "𐐎𐐯𐑌𐑆𐐼𐐩", - "4": "𐐛𐐲𐑉𐑆𐐼𐐩", - "5": "𐐙𐑉𐐴𐐼𐐩", - "6": "𐐝𐐰𐐻𐐲𐑉𐐼𐐩" - }, - "MONTH": { - "0": "𐐖𐐰𐑌𐐷𐐭𐐯𐑉𐐨", - "1": "𐐙𐐯𐐺𐑉𐐭𐐯𐑉𐐨", - "2": "𐐣𐐪𐑉𐐽", - "3": "𐐁𐐹𐑉𐐮𐑊", - "4": "𐐣𐐩", - "5": "𐐖𐐭𐑌", - "6": "𐐖𐐭𐑊𐐴", - "7": "𐐂𐑀𐐲𐑅𐐻", - "8": "𐐝𐐯𐐹𐐻𐐯𐑋𐐺𐐲𐑉", - "9": "𐐉𐐿𐐻𐐬𐐺𐐲𐑉", - "10": "𐐤𐐬𐑂𐐯𐑋𐐺𐐲𐑉", - "11": "𐐔𐐨𐑅𐐯𐑋𐐺𐐲𐑉" - }, - "SHORTDAY": { - "0": "𐐝𐐲𐑌", - "1": "𐐣𐐲𐑌", - "2": "𐐓𐐭𐑆", - "3": "𐐎𐐯𐑌", - "4": "𐐛𐐲𐑉", - "5": "𐐙𐑉𐐴", - "6": "𐐝𐐰𐐻" - }, - "SHORTMONTH": { - "0": "𐐖𐐰𐑌", - "1": "𐐙𐐯𐐺", - "2": "𐐣𐐪𐑉", - "3": "𐐁𐐹𐑉", - "4": "𐐣𐐩", - "5": "𐐖𐐭𐑌", - "6": "𐐖𐐭𐑊", - "7": "𐐂𐑀", - "8": "𐐝𐐯𐐹", - "9": "𐐉𐐿𐐻", - "10": "𐐤𐐬𐑂", - "11": "𐐔𐐨𐑅" - }, + "AMPMS": [ + "\ud801\udc08\ud801\udc23", + "\ud801\udc11\ud801\udc23" + ], + "DAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29", + "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29" + ], + "MONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d", + "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34", + "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b", + "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49" + ], + "SHORTDAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c", + "\ud801\udc23\ud801\udc32\ud801\udc4c", + "\ud801\udc13\ud801\udc2d\ud801\udc46", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c", + "\ud801\udc1b\ud801\udc32\ud801\udc49", + "\ud801\udc19\ud801\udc49\ud801\udc34", + "\ud801\udc1d\ud801\udc30\ud801\udc3b" + ], + "SHORTMONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c", + "\ud801\udc19\ud801\udc2f\ud801\udc3a", + "\ud801\udc23\ud801\udc2a\ud801\udc49", + "\ud801\udc01\ud801\udc39\ud801\udc49", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a", + "\ud801\udc02\ud801\udc40", + "\ud801\udc1d\ud801\udc2f\ud801\udc39", + "\ud801\udc09\ud801\udc3f\ud801\udc3b", + "\ud801\udc24\ud801\udc2c\ud801\udc42", + "\ud801\udc14\ud801\udc28\ud801\udc45" + ], "fullDate": "EEEE, MMMM d, y", "longDate": "MMMM d, y", "medium": "MMM d, y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-dsrt-us", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-dsrt.js b/lib/angular/i18n/angular-locale_en-dsrt.js index 53ffc19..24618aa 100755 --- a/lib/angular/i18n/angular-locale_en-dsrt.js +++ b/lib/angular/i18n/angular-locale_en-dsrt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "𐐈𐐣", - "1": "𐐑𐐣" - }, - "DAY": { - "0": "𐐝𐐲𐑌𐐼𐐩", - "1": "𐐣𐐲𐑌𐐼𐐩", - "2": "𐐓𐐭𐑆𐐼𐐩", - "3": "𐐎𐐯𐑌𐑆𐐼𐐩", - "4": "𐐛𐐲𐑉𐑆𐐼𐐩", - "5": "𐐙𐑉𐐴𐐼𐐩", - "6": "𐐝𐐰𐐻𐐲𐑉𐐼𐐩" - }, - "MONTH": { - "0": "𐐖𐐰𐑌𐐷𐐭𐐯𐑉𐐨", - "1": "𐐙𐐯𐐺𐑉𐐭𐐯𐑉𐐨", - "2": "𐐣𐐪𐑉𐐽", - "3": "𐐁𐐹𐑉𐐮𐑊", - "4": "𐐣𐐩", - "5": "𐐖𐐭𐑌", - "6": "𐐖𐐭𐑊𐐴", - "7": "𐐂𐑀𐐲𐑅𐐻", - "8": "𐐝𐐯𐐹𐐻𐐯𐑋𐐺𐐲𐑉", - "9": "𐐉𐐿𐐻𐐬𐐺𐐲𐑉", - "10": "𐐤𐐬𐑂𐐯𐑋𐐺𐐲𐑉", - "11": "𐐔𐐨𐑅𐐯𐑋𐐺𐐲𐑉" - }, - "SHORTDAY": { - "0": "𐐝𐐲𐑌", - "1": "𐐣𐐲𐑌", - "2": "𐐓𐐭𐑆", - "3": "𐐎𐐯𐑌", - "4": "𐐛𐐲𐑉", - "5": "𐐙𐑉𐐴", - "6": "𐐝𐐰𐐻" - }, - "SHORTMONTH": { - "0": "𐐖𐐰𐑌", - "1": "𐐙𐐯𐐺", - "2": "𐐣𐐪𐑉", - "3": "𐐁𐐹𐑉", - "4": "𐐣𐐩", - "5": "𐐖𐐭𐑌", - "6": "𐐖𐐭𐑊", - "7": "𐐂𐑀", - "8": "𐐝𐐯𐐹", - "9": "𐐉𐐿𐐻", - "10": "𐐤𐐬𐑂", - "11": "𐐔𐐨𐑅" - }, + "AMPMS": [ + "\ud801\udc08\ud801\udc23", + "\ud801\udc11\ud801\udc23" + ], + "DAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29", + "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29" + ], + "MONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d", + "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34", + "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b", + "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49" + ], + "SHORTDAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c", + "\ud801\udc23\ud801\udc32\ud801\udc4c", + "\ud801\udc13\ud801\udc2d\ud801\udc46", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c", + "\ud801\udc1b\ud801\udc32\ud801\udc49", + "\ud801\udc19\ud801\udc49\ud801\udc34", + "\ud801\udc1d\ud801\udc30\ud801\udc3b" + ], + "SHORTMONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c", + "\ud801\udc19\ud801\udc2f\ud801\udc3a", + "\ud801\udc23\ud801\udc2a\ud801\udc49", + "\ud801\udc01\ud801\udc39\ud801\udc49", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a", + "\ud801\udc02\ud801\udc40", + "\ud801\udc1d\ud801\udc2f\ud801\udc39", + "\ud801\udc09\ud801\udc3f\ud801\udc3b", + "\ud801\udc24\ud801\udc2c\ud801\udc42", + "\ud801\udc14\ud801\udc28\ud801\udc45" + ], "fullDate": "EEEE, MMMM d, y", "longDate": "MMMM d, y", "medium": "MMM d, y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-dsrt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-fm.js b/lib/angular/i18n/angular-locale_en-fm.js index 1b00172..565d04c 100755 --- a/lib/angular/i18n/angular-locale_en-fm.js +++ b/lib/angular/i18n/angular-locale_en-fm.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-fm", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-gb.js b/lib/angular/i18n/angular-locale_en-gb.js index f971f12..f97e342 100755 --- a/lib/angular/i18n/angular-locale_en-gb.js +++ b/lib/angular/i18n/angular-locale_en-gb.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "£", + "CURRENCY_SYM": "\u00a3", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-gb", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-gu.js b/lib/angular/i18n/angular-locale_en-gu.js index 0f23f51..06f5a86 100755 --- a/lib/angular/i18n/angular-locale_en-gu.js +++ b/lib/angular/i18n/angular-locale_en-gu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-gu", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-gy.js b/lib/angular/i18n/angular-locale_en-gy.js index f834fd2..b4acc07 100755 --- a/lib/angular/i18n/angular-locale_en-gy.js +++ b/lib/angular/i18n/angular-locale_en-gy.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-gy", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-hk.js b/lib/angular/i18n/angular-locale_en-hk.js index 63c1fd2..4c2c8d3 100755 --- a/lib/angular/i18n/angular-locale_en-hk.js +++ b/lib/angular/i18n/angular-locale_en-hk.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-hk", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-ie.js b/lib/angular/i18n/angular-locale_en-ie.js index 670f808..dc559f7 100755 --- a/lib/angular/i18n/angular-locale_en-ie.js +++ b/lib/angular/i18n/angular-locale_en-ie.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "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 d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-ie", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-in.js b/lib/angular/i18n/angular-locale_en-in.js index 4092878..6be8b88 100755 --- a/lib/angular/i18n/angular-locale_en-in.js +++ b/lib/angular/i18n/angular-locale_en-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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 d MMMM y", "longDate": "d MMMM y", "medium": "dd-MMM-y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "en-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-iso.js b/lib/angular/i18n/angular-locale_en-iso.js index 720bca2..23500ed 100755 --- a/lib/angular/i18n/angular-locale_en-iso.js +++ b/lib/angular/i18n/angular-locale_en-iso.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, y MMMM dd", "longDate": "y MMMM d", "medium": "y MMM d HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-iso", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-jm.js b/lib/angular/i18n/angular-locale_en-jm.js index bad985a..6845afe 100755 --- a/lib/angular/i18n/angular-locale_en-jm.js +++ b/lib/angular/i18n/angular-locale_en-jm.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-jm", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-mh.js b/lib/angular/i18n/angular-locale_en-mh.js index a0d0d7c..91ca264 100755 --- a/lib/angular/i18n/angular-locale_en-mh.js +++ b/lib/angular/i18n/angular-locale_en-mh.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-mh", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-mp.js b/lib/angular/i18n/angular-locale_en-mp.js index a9f5a1c..e3d0d05 100755 --- a/lib/angular/i18n/angular-locale_en-mp.js +++ b/lib/angular/i18n/angular-locale_en-mp.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-mp", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-mt.js b/lib/angular/i18n/angular-locale_en-mt.js index 313bc0d..0c87da0 100755 --- a/lib/angular/i18n/angular-locale_en-mt.js +++ b/lib/angular/i18n/angular-locale_en-mt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM y", "longDate": "dd MMMM y", "medium": "dd MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-mt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-mu.js b/lib/angular/i18n/angular-locale_en-mu.js index 49a3407..50352c6 100755 --- a/lib/angular/i18n/angular-locale_en-mu.js +++ b/lib/angular/i18n/angular-locale_en-mu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-mu", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-na.js b/lib/angular/i18n/angular-locale_en-na.js index 13235ac..1bf61fe 100755 --- a/lib/angular/i18n/angular-locale_en-na.js +++ b/lib/angular/i18n/angular-locale_en-na.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-na", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-nz.js b/lib/angular/i18n/angular-locale_en-nz.js index f4d3999..50858e0 100755 --- a/lib/angular/i18n/angular-locale_en-nz.js +++ b/lib/angular/i18n/angular-locale_en-nz.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM y", "longDate": "d MMMM y", "medium": "d/MM/yyyy h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-nz", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-ph.js b/lib/angular/i18n/angular-locale_en-ph.js index 57abb82..f1e7411 100755 --- a/lib/angular/i18n/angular-locale_en-ph.js +++ b/lib/angular/i18n/angular-locale_en-ph.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-ph", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-pk.js b/lib/angular/i18n/angular-locale_en-pk.js index 9d9e906..46411ec 100755 --- a/lib/angular/i18n/angular-locale_en-pk.js +++ b/lib/angular/i18n/angular-locale_en-pk.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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 d MMMM y", "longDate": "d MMMM y", "medium": "dd-MMM-y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-pk", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-pr.js b/lib/angular/i18n/angular-locale_en-pr.js index 36b2491..de5ed1f 100755 --- a/lib/angular/i18n/angular-locale_en-pr.js +++ b/lib/angular/i18n/angular-locale_en-pr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-pr", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-pw.js b/lib/angular/i18n/angular-locale_en-pw.js index 188451f..4f1e259 100755 --- a/lib/angular/i18n/angular-locale_en-pw.js +++ b/lib/angular/i18n/angular-locale_en-pw.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-pw", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-sg.js b/lib/angular/i18n/angular-locale_en-sg.js index fd37a1f..8e26c89 100755 --- a/lib/angular/i18n/angular-locale_en-sg.js +++ b/lib/angular/i18n/angular-locale_en-sg.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-sg", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-tc.js b/lib/angular/i18n/angular-locale_en-tc.js index 86b6992..38757ed 100755 --- a/lib/angular/i18n/angular-locale_en-tc.js +++ b/lib/angular/i18n/angular-locale_en-tc.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-tc", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-tt.js b/lib/angular/i18n/angular-locale_en-tt.js index 285e17c..bdfbc0e 100755 --- a/lib/angular/i18n/angular-locale_en-tt.js +++ b/lib/angular/i18n/angular-locale_en-tt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-tt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-um.js b/lib/angular/i18n/angular-locale_en-um.js index 0004f19..295795a 100755 --- a/lib/angular/i18n/angular-locale_en-um.js +++ b/lib/angular/i18n/angular-locale_en-um.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-um", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-us.js b/lib/angular/i18n/angular-locale_en-us.js index 19eda94..e5e8a6d 100755 --- a/lib/angular/i18n/angular-locale_en-us.js +++ b/lib/angular/i18n/angular-locale_en-us.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-us", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-vg.js b/lib/angular/i18n/angular-locale_en-vg.js index 1649572..8dda345 100755 --- a/lib/angular/i18n/angular-locale_en-vg.js +++ b/lib/angular/i18n/angular-locale_en-vg.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-vg", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-vi.js b/lib/angular/i18n/angular-locale_en-vi.js index 6f1c95d..d5b778b 100755 --- a/lib/angular/i18n/angular-locale_en-vi.js +++ b/lib/angular/i18n/angular-locale_en-vi.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-vi", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-za.js b/lib/angular/i18n/angular-locale_en-za.js index 9b54310..a3db4c3 100755 --- a/lib/angular/i18n/angular-locale_en-za.js +++ b/lib/angular/i18n/angular-locale_en-za.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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 dd MMMM y", "longDate": "dd MMMM y", "medium": "dd MMM y h:mm:ss a", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "R", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-za", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en-zw.js b/lib/angular/i18n/angular-locale_en-zw.js index 220938f..4aabe4f 100755 --- a/lib/angular/i18n/angular-locale_en-zw.js +++ b/lib/angular/i18n/angular-locale_en-zw.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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 dd MMMM y", "longDate": "dd MMMM y", "medium": "dd MMM,y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en-zw", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_en.js b/lib/angular/i18n/angular-locale_en.js index c2a3a9e..60fb427 100755 --- a/lib/angular/i18n/angular-locale_en.js +++ b/lib/angular/i18n/angular-locale_en.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "MONTH": { - "0": "January", - "1": "February", - "2": "March", - "3": "April", - "4": "May", - "5": "June", - "6": "July", - "7": "August", - "8": "September", - "9": "October", - "10": "November", - "11": "December" - }, - "SHORTDAY": { - "0": "Sun", - "1": "Mon", - "2": "Tue", - "3": "Wed", - "4": "Thu", - "5": "Fri", - "6": "Sat" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "May", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Oct", - "10": "Nov", - "11": "Dec" - }, + "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", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "en", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-419.js b/lib/angular/i18n/angular-locale_es-419.js index 85e6be0..10d94b3 100755 --- a/lib/angular/i18n/angular-locale_es-419.js +++ b/lib/angular/i18n/angular-locale_es-419.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "es-419", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-ar.js b/lib/angular/i18n/angular-locale_es-ar.js index 87dfbdb..7b489a9 100755 --- a/lib/angular/i18n/angular-locale_es-ar.js +++ b/lib/angular/i18n/angular-locale_es-ar.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-ar", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-bo.js b/lib/angular/i18n/angular-locale_es-bo.js index 2044508..62af267 100755 --- a/lib/angular/i18n/angular-locale_es-bo.js +++ b/lib/angular/i18n/angular-locale_es-bo.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-bo", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-cl.js b/lib/angular/i18n/angular-locale_es-cl.js index b23e0e3..4521eea 100755 --- a/lib/angular/i18n/angular-locale_es-cl.js +++ b/lib/angular/i18n/angular-locale_es-cl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd-MM-yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-cl", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-co.js b/lib/angular/i18n/angular-locale_es-co.js index 6ae6eec..be6f56c 100755 --- a/lib/angular/i18n/angular-locale_es-co.js +++ b/lib/angular/i18n/angular-locale_es-co.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "d/MM/yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-co", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-cr.js b/lib/angular/i18n/angular-locale_es-cr.js index 266ed0c..809701b 100755 --- a/lib/angular/i18n/angular-locale_es-cr.js +++ b/lib/angular/i18n/angular-locale_es-cr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-cr", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-do.js b/lib/angular/i18n/angular-locale_es-do.js index dc8682a..b672a85 100755 --- a/lib/angular/i18n/angular-locale_es-do.js +++ b/lib/angular/i18n/angular-locale_es-do.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-do", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-ea.js b/lib/angular/i18n/angular-locale_es-ea.js index c14edb6..e2f9da2 100755 --- a/lib/angular/i18n/angular-locale_es-ea.js +++ b/lib/angular/i18n/angular-locale_es-ea.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-ea", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-ec.js b/lib/angular/i18n/angular-locale_es-ec.js index 0b53f79..ba7a370 100755 --- a/lib/angular/i18n/angular-locale_es-ec.js +++ b/lib/angular/i18n/angular-locale_es-ec.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-ec", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-es.js b/lib/angular/i18n/angular-locale_es-es.js index 128af45..99c972e 100755 --- a/lib/angular/i18n/angular-locale_es-es.js +++ b/lib/angular/i18n/angular-locale_es-es.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-es", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-gq.js b/lib/angular/i18n/angular-locale_es-gq.js index f7d3155..837379e 100755 --- a/lib/angular/i18n/angular-locale_es-gq.js +++ b/lib/angular/i18n/angular-locale_es-gq.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-gq", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-gt.js b/lib/angular/i18n/angular-locale_es-gt.js index af936da..f6cc8cf 100755 --- a/lib/angular/i18n/angular-locale_es-gt.js +++ b/lib/angular/i18n/angular-locale_es-gt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "d/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-gt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-hn.js b/lib/angular/i18n/angular-locale_es-hn.js index f9bc47f..d314fcd 100755 --- a/lib/angular/i18n/angular-locale_es-hn.js +++ b/lib/angular/i18n/angular-locale_es-hn.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE dd 'de' MMMM 'de' y", "longDate": "dd 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-hn", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-ic.js b/lib/angular/i18n/angular-locale_es-ic.js index 6600b89..bf69156 100755 --- a/lib/angular/i18n/angular-locale_es-ic.js +++ b/lib/angular/i18n/angular-locale_es-ic.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-ic", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-mx.js b/lib/angular/i18n/angular-locale_es-mx.js index 33e3ec4..6991c52 100755 --- a/lib/angular/i18n/angular-locale_es-mx.js +++ b/lib/angular/i18n/angular-locale_es-mx.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-mx", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-ni.js b/lib/angular/i18n/angular-locale_es-ni.js index 3c3e7ed..9be77df 100755 --- a/lib/angular/i18n/angular-locale_es-ni.js +++ b/lib/angular/i18n/angular-locale_es-ni.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-ni", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-pa.js b/lib/angular/i18n/angular-locale_es-pa.js index fa82a6e..64a4c17 100755 --- a/lib/angular/i18n/angular-locale_es-pa.js +++ b/lib/angular/i18n/angular-locale_es-pa.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "MM/dd/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-pa", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-pe.js b/lib/angular/i18n/angular-locale_es-pe.js index 58fba5a..174e421 100755 --- a/lib/angular/i18n/angular-locale_es-pe.js +++ b/lib/angular/i18n/angular-locale_es-pe.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-pe", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-pr.js b/lib/angular/i18n/angular-locale_es-pr.js index d9a12b4..e876209 100755 --- a/lib/angular/i18n/angular-locale_es-pr.js +++ b/lib/angular/i18n/angular-locale_es-pr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "MM/dd/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-pr", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-py.js b/lib/angular/i18n/angular-locale_es-py.js index b0a9be0..691099e 100755 --- a/lib/angular/i18n/angular-locale_es-py.js +++ b/lib/angular/i18n/angular-locale_es-py.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-py", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-sv.js b/lib/angular/i18n/angular-locale_es-sv.js index cdc2c38..7bbb8a5 100755 --- a/lib/angular/i18n/angular-locale_es-sv.js +++ b/lib/angular/i18n/angular-locale_es-sv.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-sv", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-us.js b/lib/angular/i18n/angular-locale_es-us.js index 6bb08e0..3b7fbce 100755 --- a/lib/angular/i18n/angular-locale_es-us.js +++ b/lib/angular/i18n/angular-locale_es-us.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "MMM d, y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-us", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-uy.js b/lib/angular/i18n/angular-locale_es-uy.js index ebcba14..c304ba8 100755 --- a/lib/angular/i18n/angular-locale_es-uy.js +++ b/lib/angular/i18n/angular-locale_es-uy.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-uy", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es-ve.js b/lib/angular/i18n/angular-locale_es-ve.js index 0869275..9e46788 100755 --- a/lib/angular/i18n/angular-locale_es-ve.js +++ b/lib/angular/i18n/angular-locale_es-ve.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es-ve", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_es.js b/lib/angular/i18n/angular-locale_es.js index 3a8d7c5..9591401 100755 --- a/lib/angular/i18n/angular-locale_es.js +++ b/lib/angular/i18n/angular-locale_es.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "domingo", - "1": "lunes", - "2": "martes", - "3": "miércoles", - "4": "jueves", - "5": "viernes", - "6": "sábado" - }, - "MONTH": { - "0": "enero", - "1": "febrero", - "2": "marzo", - "3": "abril", - "4": "mayo", - "5": "junio", - "6": "julio", - "7": "agosto", - "8": "septiembre", - "9": "octubre", - "10": "noviembre", - "11": "diciembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mié", - "4": "jue", - "5": "vie", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "ene", - "1": "feb", - "2": "mar", - "3": "abr", - "4": "may", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "sep", - "9": "oct", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "es", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_et-ee.js b/lib/angular/i18n/angular-locale_et-ee.js index 53e88ae..d941b67 100755 --- a/lib/angular/i18n/angular-locale_et-ee.js +++ b/lib/angular/i18n/angular-locale_et-ee.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "enne keskpäeva", - "1": "pärast keskpäeva" - }, - "DAY": { - "0": "pühapäev", - "1": "esmaspäev", - "2": "teisipäev", - "3": "kolmapäev", - "4": "neljapäev", - "5": "reede", - "6": "laupäev" - }, - "MONTH": { - "0": "jaanuar", - "1": "veebruar", - "2": "märts", - "3": "aprill", - "4": "mai", - "5": "juuni", - "6": "juuli", - "7": "august", - "8": "september", - "9": "oktoober", - "10": "november", - "11": "detsember" - }, - "SHORTDAY": { - "0": "P", - "1": "E", - "2": "T", - "3": "K", - "4": "N", - "5": "R", - "6": "L" - }, - "SHORTMONTH": { - "0": "jaan", - "1": "veebr", - "2": "märts", - "3": "apr", - "4": "mai", - "5": "juuni", - "6": "juuli", - "7": "aug", - "8": "sept", - "9": "okt", - "10": "nov", - "11": "dets" - }, + "AMPMS": [ + "enne keskp\u00e4eva", + "p\u00e4rast keskp\u00e4eva" + ], + "DAY": [ + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev" + ], + "MONTH": [ + "jaanuar", + "veebruar", + "m\u00e4rts", + "aprill", + "mai", + "juuni", + "juuli", + "august", + "september", + "oktoober", + "november", + "detsember" + ], + "SHORTDAY": [ + "P", + "E", + "T", + "K", + "N", + "R", + "L" + ], + "SHORTMONTH": [ + "jaan", + "veebr", + "m\u00e4rts", + "apr", + "mai", + "juuni", + "juuli", + "aug", + "sept", + "okt", + "nov", + "dets" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy H:mm.ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": "\u00A4)", + "negSuf": "\u00a4)", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "et-ee", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_et.js b/lib/angular/i18n/angular-locale_et.js index bbc4375..79ebb3e 100755 --- a/lib/angular/i18n/angular-locale_et.js +++ b/lib/angular/i18n/angular-locale_et.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "enne keskpäeva", - "1": "pärast keskpäeva" - }, - "DAY": { - "0": "pühapäev", - "1": "esmaspäev", - "2": "teisipäev", - "3": "kolmapäev", - "4": "neljapäev", - "5": "reede", - "6": "laupäev" - }, - "MONTH": { - "0": "jaanuar", - "1": "veebruar", - "2": "märts", - "3": "aprill", - "4": "mai", - "5": "juuni", - "6": "juuli", - "7": "august", - "8": "september", - "9": "oktoober", - "10": "november", - "11": "detsember" - }, - "SHORTDAY": { - "0": "P", - "1": "E", - "2": "T", - "3": "K", - "4": "N", - "5": "R", - "6": "L" - }, - "SHORTMONTH": { - "0": "jaan", - "1": "veebr", - "2": "märts", - "3": "apr", - "4": "mai", - "5": "juuni", - "6": "juuli", - "7": "aug", - "8": "sept", - "9": "okt", - "10": "nov", - "11": "dets" - }, + "AMPMS": [ + "enne keskp\u00e4eva", + "p\u00e4rast keskp\u00e4eva" + ], + "DAY": [ + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev" + ], + "MONTH": [ + "jaanuar", + "veebruar", + "m\u00e4rts", + "aprill", + "mai", + "juuni", + "juuli", + "august", + "september", + "oktoober", + "november", + "detsember" + ], + "SHORTDAY": [ + "P", + "E", + "T", + "K", + "N", + "R", + "L" + ], + "SHORTMONTH": [ + "jaan", + "veebr", + "m\u00e4rts", + "apr", + "mai", + "juuni", + "juuli", + "aug", + "sept", + "okt", + "nov", + "dets" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy H:mm.ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 0, "lgSize": 0, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": "\u00A4)", + "negSuf": "\u00a4)", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "et", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_eu-es.js b/lib/angular/i18n/angular-locale_eu-es.js index 56e6cc2..0b51823 100755 --- a/lib/angular/i18n/angular-locale_eu-es.js +++ b/lib/angular/i18n/angular-locale_eu-es.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "igandea", - "1": "astelehena", - "2": "asteartea", - "3": "asteazkena", - "4": "osteguna", - "5": "ostirala", - "6": "larunbata" - }, - "MONTH": { - "0": "urtarrila", - "1": "otsaila", - "2": "martxoa", - "3": "apirila", - "4": "maiatza", - "5": "ekaina", - "6": "uztaila", - "7": "abuztua", - "8": "iraila", - "9": "urria", - "10": "azaroa", - "11": "abendua" - }, - "SHORTDAY": { - "0": "ig", - "1": "al", - "2": "as", - "3": "az", - "4": "og", - "5": "or", - "6": "lr" - }, - "SHORTMONTH": { - "0": "urt", - "1": "ots", - "2": "mar", - "3": "api", - "4": "mai", - "5": "eka", - "6": "uzt", - "7": "abu", - "8": "ira", - "9": "urr", - "10": "aza", - "11": "abe" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "igandea", + "astelehena", + "asteartea", + "asteazkena", + "osteguna", + "ostirala", + "larunbata" + ], + "MONTH": [ + "urtarrila", + "otsaila", + "martxoa", + "apirila", + "maiatza", + "ekaina", + "uztaila", + "abuztua", + "iraila", + "urria", + "azaroa", + "abendua" + ], + "SHORTDAY": [ + "ig", + "al", + "as", + "az", + "og", + "or", + "lr" + ], + "SHORTMONTH": [ + "urt", + "ots", + "mar", + "api", + "mai", + "eka", + "uzt", + "abu", + "ira", + "urr", + "aza", + "abe" + ], "fullDate": "EEEE, y'eko' MMMM'ren' dd'a'", "longDate": "y'eko' MMM'ren' dd'a'", "medium": "y MMM d HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "eu-es", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_eu.js b/lib/angular/i18n/angular-locale_eu.js index 33ee752..7240010 100755 --- a/lib/angular/i18n/angular-locale_eu.js +++ b/lib/angular/i18n/angular-locale_eu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "igandea", - "1": "astelehena", - "2": "asteartea", - "3": "asteazkena", - "4": "osteguna", - "5": "ostirala", - "6": "larunbata" - }, - "MONTH": { - "0": "urtarrila", - "1": "otsaila", - "2": "martxoa", - "3": "apirila", - "4": "maiatza", - "5": "ekaina", - "6": "uztaila", - "7": "abuztua", - "8": "iraila", - "9": "urria", - "10": "azaroa", - "11": "abendua" - }, - "SHORTDAY": { - "0": "ig", - "1": "al", - "2": "as", - "3": "az", - "4": "og", - "5": "or", - "6": "lr" - }, - "SHORTMONTH": { - "0": "urt", - "1": "ots", - "2": "mar", - "3": "api", - "4": "mai", - "5": "eka", - "6": "uzt", - "7": "abu", - "8": "ira", - "9": "urr", - "10": "aza", - "11": "abe" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "igandea", + "astelehena", + "asteartea", + "asteazkena", + "osteguna", + "ostirala", + "larunbata" + ], + "MONTH": [ + "urtarrila", + "otsaila", + "martxoa", + "apirila", + "maiatza", + "ekaina", + "uztaila", + "abuztua", + "iraila", + "urria", + "azaroa", + "abendua" + ], + "SHORTDAY": [ + "ig", + "al", + "as", + "az", + "og", + "or", + "lr" + ], + "SHORTMONTH": [ + "urt", + "ots", + "mar", + "api", + "mai", + "eka", + "uzt", + "abu", + "ira", + "urr", + "aza", + "abe" + ], "fullDate": "EEEE, y'eko' MMMM'ren' dd'a'", "longDate": "y'eko' MMM'ren' dd'a'", "medium": "y MMM d HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "eu", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fa-af.js b/lib/angular/i18n/angular-locale_fa-af.js index 8f8046e..21ec56e 100755 --- a/lib/angular/i18n/angular-locale_fa-af.js +++ b/lib/angular/i18n/angular-locale_fa-af.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "قبل‌ازظهر", - "1": "بعدازظهر" - }, - "DAY": { - "0": "یکشنبه", - "1": "دوشنبه", - "2": "سه‌شنبه", - "3": "چهارشنبه", - "4": "پنجشنبه", - "5": "جمعه", - "6": "شنبه" - }, - "MONTH": { - "0": "جنوری", - "1": "فبروری", - "2": "مارچ", - "3": "اپریل", - "4": "می", - "5": "جون", - "6": "جولای", - "7": "اگست", - "8": "سپتمبر", - "9": "اکتوبر", - "10": "نومبر", - "11": "دسمبر" - }, - "SHORTDAY": { - "0": "یکشنبه", - "1": "دوشنبه", - "2": "سه‌شنبه", - "3": "چهارشنبه", - "4": "پنجشنبه", - "5": "جمعه", - "6": "شنبه" - }, - "SHORTMONTH": { - "0": "جنو", - "1": "فوریهٔ", - "2": "مارس", - "3": "آوریل", - "4": "مـی", - "5": "ژوئن", - "6": "جول", - "7": "اوت", - "8": "سپتامبر", - "9": "اکتبر", - "10": "نوامبر", - "11": "دسم" - }, + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0628\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0640\u06cc", + "\u0698\u0648\u0626\u0646", + "\u062c\u0648\u0644", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0645" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y H:mm:ss", @@ -63,10 +63,10 @@ $provide.value("$locale", { }, "NUMBER_FORMATS": { "CURRENCY_SYM": "Rial", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "‎(\u00A4", + "negPre": "\u200e(\u00a4", "negSuf": ")", - "posPre": "‎\u00A4", + "posPre": "\u200e\u00a4", "posSuf": "" } - } + ] }, "id": "fa-af", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fa-ir.js b/lib/angular/i18n/angular-locale_fa-ir.js index f876c54..eaf18ef 100755 --- a/lib/angular/i18n/angular-locale_fa-ir.js +++ b/lib/angular/i18n/angular-locale_fa-ir.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "قبل‌ازظهر", - "1": "بعدازظهر" - }, - "DAY": { - "0": "یکشنبه", - "1": "دوشنبه", - "2": "سه‌شنبه", - "3": "چهارشنبه", - "4": "پنجشنبه", - "5": "جمعه", - "6": "شنبه" - }, - "MONTH": { - "0": "ژانویهٔ", - "1": "فوریهٔ", - "2": "مارس", - "3": "آوریل", - "4": "مهٔ", - "5": "ژوئن", - "6": "ژوئیهٔ", - "7": "اوت", - "8": "سپتامبر", - "9": "اکتبر", - "10": "نوامبر", - "11": "دسامبر" - }, - "SHORTDAY": { - "0": "یکشنبه", - "1": "دوشنبه", - "2": "سه‌شنبه", - "3": "چهارشنبه", - "4": "پنجشنبه", - "5": "جمعه", - "6": "شنبه" - }, - "SHORTMONTH": { - "0": "ژانویهٔ", - "1": "فوریهٔ", - "2": "مارس", - "3": "آوریل", - "4": "مهٔ", - "5": "ژوئن", - "6": "ژوئیهٔ", - "7": "اوت", - "8": "سپتامبر", - "9": "اکتبر", - "10": "نوامبر", - "11": "دسامبر" - }, + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "MONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y H:mm:ss", @@ -63,10 +63,10 @@ $provide.value("$locale", { }, "NUMBER_FORMATS": { "CURRENCY_SYM": "Rial", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "‎(\u00A4", + "negPre": "\u200e(\u00a4", "negSuf": ")", - "posPre": "‎\u00A4", + "posPre": "\u200e\u00a4", "posSuf": "" } - } + ] }, "id": "fa-ir", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fa.js b/lib/angular/i18n/angular-locale_fa.js index 6c3a06b..2677027 100755 --- a/lib/angular/i18n/angular-locale_fa.js +++ b/lib/angular/i18n/angular-locale_fa.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "قبل‌ازظهر", - "1": "بعدازظهر" - }, - "DAY": { - "0": "یکشنبه", - "1": "دوشنبه", - "2": "سه‌شنبه", - "3": "چهارشنبه", - "4": "پنجشنبه", - "5": "جمعه", - "6": "شنبه" - }, - "MONTH": { - "0": "ژانویهٔ", - "1": "فوریهٔ", - "2": "مارس", - "3": "آوریل", - "4": "مهٔ", - "5": "ژوئن", - "6": "ژوئیهٔ", - "7": "اوت", - "8": "سپتامبر", - "9": "اکتبر", - "10": "نوامبر", - "11": "دسامبر" - }, - "SHORTDAY": { - "0": "یکشنبه", - "1": "دوشنبه", - "2": "سه‌شنبه", - "3": "چهارشنبه", - "4": "پنجشنبه", - "5": "جمعه", - "6": "شنبه" - }, - "SHORTMONTH": { - "0": "ژانویهٔ", - "1": "فوریهٔ", - "2": "مارس", - "3": "آوریل", - "4": "مهٔ", - "5": "ژوئن", - "6": "ژوئیهٔ", - "7": "اوت", - "8": "سپتامبر", - "9": "اکتبر", - "10": "نوامبر", - "11": "دسامبر" - }, + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "MONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y H:mm:ss", @@ -63,10 +63,10 @@ $provide.value("$locale", { }, "NUMBER_FORMATS": { "CURRENCY_SYM": "Rial", - "DECIMAL_SEP": "٫", - "GROUP_SEP": "٬", - "PATTERNS": { - "0": { + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "‎(\u00A4", + "negPre": "\u200e(\u00a4", "negSuf": ")", - "posPre": "‎\u00A4", + "posPre": "\u200e\u00a4", "posSuf": "" } - } + ] }, "id": "fa", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fi-fi.js b/lib/angular/i18n/angular-locale_fi-fi.js index 44144ff..b33062f 100755 --- a/lib/angular/i18n/angular-locale_fi-fi.js +++ b/lib/angular/i18n/angular-locale_fi-fi.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ap.", - "1": "ip." - }, - "DAY": { - "0": "sunnuntaina", - "1": "maanantaina", - "2": "tiistaina", - "3": "keskiviikkona", - "4": "torstaina", - "5": "perjantaina", - "6": "lauantaina" - }, - "MONTH": { - "0": "tammikuuta", - "1": "helmikuuta", - "2": "maaliskuuta", - "3": "huhtikuuta", - "4": "toukokuuta", - "5": "kesäkuuta", - "6": "heinäkuuta", - "7": "elokuuta", - "8": "syyskuuta", - "9": "lokakuuta", - "10": "marraskuuta", - "11": "joulukuuta" - }, - "SHORTDAY": { - "0": "su", - "1": "ma", - "2": "ti", - "3": "ke", - "4": "to", - "5": "pe", - "6": "la" - }, - "SHORTMONTH": { - "0": "tammikuuta", - "1": "helmikuuta", - "2": "maaliskuuta", - "3": "huhtikuuta", - "4": "toukokuuta", - "5": "kesäkuuta", - "6": "heinäkuuta", - "7": "elokuuta", - "8": "syyskuuta", - "9": "lokakuuta", - "10": "marraskuuta", - "11": "joulukuuta" - }, + "AMPMS": [ + "ap.", + "ip." + ], + "DAY": [ + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina" + ], + "MONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "SHORTDAY": [ + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la" + ], + "SHORTMONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], "fullDate": "cccc, d. MMMM y", "longDate": "d. MMMM y", "medium": "d.M.yyyy H.mm.ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H.mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fi-fi", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fi.js b/lib/angular/i18n/angular-locale_fi.js index ee9ff92..06a42fd 100755 --- a/lib/angular/i18n/angular-locale_fi.js +++ b/lib/angular/i18n/angular-locale_fi.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ap.", - "1": "ip." - }, - "DAY": { - "0": "sunnuntaina", - "1": "maanantaina", - "2": "tiistaina", - "3": "keskiviikkona", - "4": "torstaina", - "5": "perjantaina", - "6": "lauantaina" - }, - "MONTH": { - "0": "tammikuuta", - "1": "helmikuuta", - "2": "maaliskuuta", - "3": "huhtikuuta", - "4": "toukokuuta", - "5": "kesäkuuta", - "6": "heinäkuuta", - "7": "elokuuta", - "8": "syyskuuta", - "9": "lokakuuta", - "10": "marraskuuta", - "11": "joulukuuta" - }, - "SHORTDAY": { - "0": "su", - "1": "ma", - "2": "ti", - "3": "ke", - "4": "to", - "5": "pe", - "6": "la" - }, - "SHORTMONTH": { - "0": "tammikuuta", - "1": "helmikuuta", - "2": "maaliskuuta", - "3": "huhtikuuta", - "4": "toukokuuta", - "5": "kesäkuuta", - "6": "heinäkuuta", - "7": "elokuuta", - "8": "syyskuuta", - "9": "lokakuuta", - "10": "marraskuuta", - "11": "joulukuuta" - }, + "AMPMS": [ + "ap.", + "ip." + ], + "DAY": [ + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina" + ], + "MONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "SHORTDAY": [ + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la" + ], + "SHORTMONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], "fullDate": "cccc, d. MMMM y", "longDate": "d. MMMM y", "medium": "d.M.yyyy H.mm.ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H.mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fi", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fil-ph.js b/lib/angular/i18n/angular-locale_fil-ph.js index c80997c..849cede 100755 --- a/lib/angular/i18n/angular-locale_fil-ph.js +++ b/lib/angular/i18n/angular-locale_fil-ph.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Linggo", - "1": "Lunes", - "2": "Martes", - "3": "Miyerkules", - "4": "Huwebes", - "5": "Biyernes", - "6": "Sabado" - }, - "MONTH": { - "0": "Enero", - "1": "Pebrero", - "2": "Marso", - "3": "Abril", - "4": "Mayo", - "5": "Hunyo", - "6": "Hulyo", - "7": "Agosto", - "8": "Setyembre", - "9": "Oktubre", - "10": "Nobyembre", - "11": "Disyembre" - }, - "SHORTDAY": { - "0": "Lin", - "1": "Lun", - "2": "Mar", - "3": "Mye", - "4": "Huw", - "5": "Bye", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Ene", - "1": "Peb", - "2": "Mar", - "3": "Abr", - "4": "May", - "5": "Hun", - "6": "Hul", - "7": "Ago", - "8": "Set", - "9": "Okt", - "10": "Nob", - "11": "Dis" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Mye", + "Huw", + "Bye", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "Dis" + ], "fullDate": "EEEE, MMMM dd y", "longDate": "MMMM d, y", "medium": "MMM d, y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₱", + "CURRENCY_SYM": "\u20b1", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "fil-ph", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fil.js b/lib/angular/i18n/angular-locale_fil.js index d9a7ed8..c9cb7ca 100755 --- a/lib/angular/i18n/angular-locale_fil.js +++ b/lib/angular/i18n/angular-locale_fil.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Linggo", - "1": "Lunes", - "2": "Martes", - "3": "Miyerkules", - "4": "Huwebes", - "5": "Biyernes", - "6": "Sabado" - }, - "MONTH": { - "0": "Enero", - "1": "Pebrero", - "2": "Marso", - "3": "Abril", - "4": "Mayo", - "5": "Hunyo", - "6": "Hulyo", - "7": "Agosto", - "8": "Setyembre", - "9": "Oktubre", - "10": "Nobyembre", - "11": "Disyembre" - }, - "SHORTDAY": { - "0": "Lin", - "1": "Lun", - "2": "Mar", - "3": "Mye", - "4": "Huw", - "5": "Bye", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Ene", - "1": "Peb", - "2": "Mar", - "3": "Abr", - "4": "May", - "5": "Hun", - "6": "Hul", - "7": "Ago", - "8": "Set", - "9": "Okt", - "10": "Nob", - "11": "Dis" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Mye", + "Huw", + "Bye", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "Dis" + ], "fullDate": "EEEE, MMMM dd y", "longDate": "MMMM d, y", "medium": "MMM d, y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₱", + "CURRENCY_SYM": "\u20b1", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "fil", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-be.js b/lib/angular/i18n/angular-locale_fr-be.js index e896436..ca7d3ac 100755 --- a/lib/angular/i18n/angular-locale_fr-be.js +++ b/lib/angular/i18n/angular-locale_fr-be.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-be", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-bf.js b/lib/angular/i18n/angular-locale_fr-bf.js index eea1c2c..6717958 100755 --- a/lib/angular/i18n/angular-locale_fr-bf.js +++ b/lib/angular/i18n/angular-locale_fr-bf.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-bf", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-bi.js b/lib/angular/i18n/angular-locale_fr-bi.js index 084d064..dad30c0 100755 --- a/lib/angular/i18n/angular-locale_fr-bi.js +++ b/lib/angular/i18n/angular-locale_fr-bi.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-bi", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-bj.js b/lib/angular/i18n/angular-locale_fr-bj.js index a800742..b16c69a 100755 --- a/lib/angular/i18n/angular-locale_fr-bj.js +++ b/lib/angular/i18n/angular-locale_fr-bj.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-bj", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-bl.js b/lib/angular/i18n/angular-locale_fr-bl.js index e59143d..a963168 100755 --- a/lib/angular/i18n/angular-locale_fr-bl.js +++ b/lib/angular/i18n/angular-locale_fr-bl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-bl", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-ca.js b/lib/angular/i18n/angular-locale_fr-ca.js index 3142e12..ff3ef40 100755 --- a/lib/angular/i18n/angular-locale_fr-ca.js +++ b/lib/angular/i18n/angular-locale_fr-ca.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "yyyy-MM-dd HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "$", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-ca", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-cd.js b/lib/angular/i18n/angular-locale_fr-cd.js index fe8e856..7afc950 100755 --- a/lib/angular/i18n/angular-locale_fr-cd.js +++ b/lib/angular/i18n/angular-locale_fr-cd.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-cd", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-cf.js b/lib/angular/i18n/angular-locale_fr-cf.js index c16122e..fe7f1f9 100755 --- a/lib/angular/i18n/angular-locale_fr-cf.js +++ b/lib/angular/i18n/angular-locale_fr-cf.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-cf", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-cg.js b/lib/angular/i18n/angular-locale_fr-cg.js index 1c57b79..e5360f5 100755 --- a/lib/angular/i18n/angular-locale_fr-cg.js +++ b/lib/angular/i18n/angular-locale_fr-cg.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-cg", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-ch.js b/lib/angular/i18n/angular-locale_fr-ch.js index 20e7a59..0257ebd 100755 --- a/lib/angular/i18n/angular-locale_fr-ch.js +++ b/lib/angular/i18n/angular-locale_fr-ch.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-ch", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-ci.js b/lib/angular/i18n/angular-locale_fr-ci.js index 9c2f774..d8d7f9a 100755 --- a/lib/angular/i18n/angular-locale_fr-ci.js +++ b/lib/angular/i18n/angular-locale_fr-ci.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-ci", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-cm.js b/lib/angular/i18n/angular-locale_fr-cm.js index f8c85c7..1026a50 100755 --- a/lib/angular/i18n/angular-locale_fr-cm.js +++ b/lib/angular/i18n/angular-locale_fr-cm.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-cm", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-dj.js b/lib/angular/i18n/angular-locale_fr-dj.js index 0faa094..2f9cf4c 100755 --- a/lib/angular/i18n/angular-locale_fr-dj.js +++ b/lib/angular/i18n/angular-locale_fr-dj.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-dj", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-fr.js b/lib/angular/i18n/angular-locale_fr-fr.js index a466709..6a41fc0 100755 --- a/lib/angular/i18n/angular-locale_fr-fr.js +++ b/lib/angular/i18n/angular-locale_fr-fr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-fr", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-ga.js b/lib/angular/i18n/angular-locale_fr-ga.js index 77fa0b3..5f444e0 100755 --- a/lib/angular/i18n/angular-locale_fr-ga.js +++ b/lib/angular/i18n/angular-locale_fr-ga.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-ga", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-gf.js b/lib/angular/i18n/angular-locale_fr-gf.js index d9204f9..249ff7c 100755 --- a/lib/angular/i18n/angular-locale_fr-gf.js +++ b/lib/angular/i18n/angular-locale_fr-gf.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-gf", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-gn.js b/lib/angular/i18n/angular-locale_fr-gn.js index be1dfff..44786d7 100755 --- a/lib/angular/i18n/angular-locale_fr-gn.js +++ b/lib/angular/i18n/angular-locale_fr-gn.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-gn", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-gp.js b/lib/angular/i18n/angular-locale_fr-gp.js index 8334b52..8c02ea5 100755 --- a/lib/angular/i18n/angular-locale_fr-gp.js +++ b/lib/angular/i18n/angular-locale_fr-gp.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-gp", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-gq.js b/lib/angular/i18n/angular-locale_fr-gq.js index fcec538..58e6481 100755 --- a/lib/angular/i18n/angular-locale_fr-gq.js +++ b/lib/angular/i18n/angular-locale_fr-gq.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-gq", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-km.js b/lib/angular/i18n/angular-locale_fr-km.js index dca8c34..0376649 100755 --- a/lib/angular/i18n/angular-locale_fr-km.js +++ b/lib/angular/i18n/angular-locale_fr-km.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-km", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-lu.js b/lib/angular/i18n/angular-locale_fr-lu.js index bd786bc..e9aec05 100755 --- a/lib/angular/i18n/angular-locale_fr-lu.js +++ b/lib/angular/i18n/angular-locale_fr-lu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-lu", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-mc.js b/lib/angular/i18n/angular-locale_fr-mc.js index 9ab8525..db1150e 100755 --- a/lib/angular/i18n/angular-locale_fr-mc.js +++ b/lib/angular/i18n/angular-locale_fr-mc.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-mc", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-mf.js b/lib/angular/i18n/angular-locale_fr-mf.js index 9394ec7..f6f48c9 100755 --- a/lib/angular/i18n/angular-locale_fr-mf.js +++ b/lib/angular/i18n/angular-locale_fr-mf.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-mf", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-mg.js b/lib/angular/i18n/angular-locale_fr-mg.js index 6b4b139..5706df2 100755 --- a/lib/angular/i18n/angular-locale_fr-mg.js +++ b/lib/angular/i18n/angular-locale_fr-mg.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-mg", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-ml.js b/lib/angular/i18n/angular-locale_fr-ml.js index 0e9f822..6a8b568 100755 --- a/lib/angular/i18n/angular-locale_fr-ml.js +++ b/lib/angular/i18n/angular-locale_fr-ml.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-ml", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-mq.js b/lib/angular/i18n/angular-locale_fr-mq.js index e94bc1a..d7d41ad 100755 --- a/lib/angular/i18n/angular-locale_fr-mq.js +++ b/lib/angular/i18n/angular-locale_fr-mq.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-mq", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-ne.js b/lib/angular/i18n/angular-locale_fr-ne.js index 2ce6cde..ce20c08 100755 --- a/lib/angular/i18n/angular-locale_fr-ne.js +++ b/lib/angular/i18n/angular-locale_fr-ne.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-ne", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-re.js b/lib/angular/i18n/angular-locale_fr-re.js index 64f4e18..442f690 100755 --- a/lib/angular/i18n/angular-locale_fr-re.js +++ b/lib/angular/i18n/angular-locale_fr-re.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-re", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr-rw.js b/lib/angular/i18n/angular-locale_fr-rw.js index 3164315..ef84535 100755 --- a/lib/angular/i18n/angular-locale_fr-rw.js +++ b/lib/angular/i18n/angular-locale_fr-rw.js @@ -17,17 +17,17 @@ $provide.value("$locale", { }, "MONTH": { "0": "janvier", - "1": "février", + "1": "f\u00e9vrier", "2": "mars", "3": "avril", "4": "mai", "5": "juin", "6": "juillet", - "7": "août", + "7": "ao\u00fbt", "8": "septembre", "9": "octobre", "10": "novembre", - "11": "décembre" + "11": "d\u00e9cembre" }, "SHORTDAY": { "0": "dim.", @@ -40,17 +40,17 @@ $provide.value("$locale", { }, "SHORTMONTH": { "0": "janv.", - "1": "févr.", + "1": "f\u00e9vr.", "2": "mars", "3": "avr.", "4": "mai", "5": "juin", "6": "juil.", - "7": "août", + "7": "ao\u00fbt", "8": "sept.", "9": "oct.", "10": "nov.", - "11": "déc." + "11": "d\u00e9c." }, "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", @@ -62,9 +62,9 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", + "GROUP_SEP": "\u00a0", "PATTERNS": { "0": { "gSize": 3, @@ -86,9 +86,9 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } } }, diff --git a/lib/angular/i18n/angular-locale_fr-sn.js b/lib/angular/i18n/angular-locale_fr-sn.js index 2ec8bec..ca496da 100755 --- a/lib/angular/i18n/angular-locale_fr-sn.js +++ b/lib/angular/i18n/angular-locale_fr-sn.js @@ -17,17 +17,17 @@ $provide.value("$locale", { }, "MONTH": { "0": "janvier", - "1": "février", + "1": "f\u00e9vrier", "2": "mars", "3": "avril", "4": "mai", "5": "juin", "6": "juillet", - "7": "août", + "7": "ao\u00fbt", "8": "septembre", "9": "octobre", "10": "novembre", - "11": "décembre" + "11": "d\u00e9cembre" }, "SHORTDAY": { "0": "dim.", @@ -40,17 +40,17 @@ $provide.value("$locale", { }, "SHORTMONTH": { "0": "janv.", - "1": "févr.", + "1": "f\u00e9vr.", "2": "mars", "3": "avr.", "4": "mai", "5": "juin", "6": "juil.", - "7": "août", + "7": "ao\u00fbt", "8": "sept.", "9": "oct.", "10": "nov.", - "11": "déc." + "11": "d\u00e9c." }, "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", @@ -62,9 +62,9 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", + "GROUP_SEP": "\u00a0", "PATTERNS": { "0": { "gSize": 3, @@ -86,9 +86,9 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } } }, diff --git a/lib/angular/i18n/angular-locale_fr-td.js b/lib/angular/i18n/angular-locale_fr-td.js index 0b5d0a3..4efa433 100755 --- a/lib/angular/i18n/angular-locale_fr-td.js +++ b/lib/angular/i18n/angular-locale_fr-td.js @@ -17,17 +17,17 @@ $provide.value("$locale", { }, "MONTH": { "0": "janvier", - "1": "février", + "1": "f\u00e9vrier", "2": "mars", "3": "avril", "4": "mai", "5": "juin", "6": "juillet", - "7": "août", + "7": "ao\u00fbt", "8": "septembre", "9": "octobre", "10": "novembre", - "11": "décembre" + "11": "d\u00e9cembre" }, "SHORTDAY": { "0": "dim.", @@ -40,17 +40,17 @@ $provide.value("$locale", { }, "SHORTMONTH": { "0": "janv.", - "1": "févr.", + "1": "f\u00e9vr.", "2": "mars", "3": "avr.", "4": "mai", "5": "juin", "6": "juil.", - "7": "août", + "7": "ao\u00fbt", "8": "sept.", "9": "oct.", "10": "nov.", - "11": "déc." + "11": "d\u00e9c." }, "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", @@ -62,9 +62,9 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", + "GROUP_SEP": "\u00a0", "PATTERNS": { "0": { "gSize": 3, @@ -86,9 +86,9 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } } }, diff --git a/lib/angular/i18n/angular-locale_fr-yt.js b/lib/angular/i18n/angular-locale_fr-yt.js index 9e71b41..22240bb 100755 --- a/lib/angular/i18n/angular-locale_fr-yt.js +++ b/lib/angular/i18n/angular-locale_fr-yt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr-yt", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_fr.js b/lib/angular/i18n/angular-locale_fr.js index ac2283f..6f3a4bc 100755 --- a/lib/angular/i18n/angular-locale_fr.js +++ b/lib/angular/i18n/angular-locale_fr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "dimanche", - "1": "lundi", - "2": "mardi", - "3": "mercredi", - "4": "jeudi", - "5": "vendredi", - "6": "samedi" - }, - "MONTH": { - "0": "janvier", - "1": "février", - "2": "mars", - "3": "avril", - "4": "mai", - "5": "juin", - "6": "juillet", - "7": "août", - "8": "septembre", - "9": "octobre", - "10": "novembre", - "11": "décembre" - }, - "SHORTDAY": { - "0": "dim.", - "1": "lun.", - "2": "mar.", - "3": "mer.", - "4": "jeu.", - "5": "ven.", - "6": "sam." - }, - "SHORTMONTH": { - "0": "janv.", - "1": "févr.", - "2": "mars", - "3": "avr.", - "4": "mai", - "5": "juin", - "6": "juil.", - "7": "août", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "déc." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "fr", "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_gl-es.js b/lib/angular/i18n/angular-locale_gl-es.js index 7d85727..bf456ce 100755 --- a/lib/angular/i18n/angular-locale_gl-es.js +++ b/lib/angular/i18n/angular-locale_gl-es.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "Domingo", - "1": "Luns", - "2": "Martes", - "3": "Mércores", - "4": "Xoves", - "5": "Venres", - "6": "Sábado" - }, - "MONTH": { - "0": "Xaneiro", - "1": "Febreiro", - "2": "Marzo", - "3": "Abril", - "4": "Maio", - "5": "Xuño", - "6": "Xullo", - "7": "Agosto", - "8": "Setembro", - "9": "Outubro", - "10": "Novembro", - "11": "Decembro" - }, - "SHORTDAY": { - "0": "Dom", - "1": "Lun", - "2": "Mar", - "3": "Mér", - "4": "Xov", - "5": "Ven", - "6": "Sáb" - }, - "SHORTMONTH": { - "0": "Xan", - "1": "Feb", - "2": "Mar", - "3": "Abr", - "4": "Mai", - "5": "Xuñ", - "6": "Xul", - "7": "Ago", - "8": "Set", - "9": "Out", - "10": "Nov", - "11": "Dec" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Luns", + "Martes", + "M\u00e9rcores", + "Xoves", + "Venres", + "S\u00e1bado" + ], + "MONTH": [ + "Xaneiro", + "Febreiro", + "Marzo", + "Abril", + "Maio", + "Xu\u00f1o", + "Xullo", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Decembro" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "M\u00e9r", + "Xov", + "Ven", + "S\u00e1b" + ], + "SHORTMONTH": [ + "Xan", + "Feb", + "Mar", + "Abr", + "Mai", + "Xu\u00f1", + "Xul", + "Ago", + "Set", + "Out", + "Nov", + "Dec" + ], "fullDate": "EEEE dd MMMM y", "longDate": "dd MMMM y", "medium": "d MMM, y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "gl-es", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_gl.js b/lib/angular/i18n/angular-locale_gl.js index b99b780..a953529 100755 --- a/lib/angular/i18n/angular-locale_gl.js +++ b/lib/angular/i18n/angular-locale_gl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "Domingo", - "1": "Luns", - "2": "Martes", - "3": "Mércores", - "4": "Xoves", - "5": "Venres", - "6": "Sábado" - }, - "MONTH": { - "0": "Xaneiro", - "1": "Febreiro", - "2": "Marzo", - "3": "Abril", - "4": "Maio", - "5": "Xuño", - "6": "Xullo", - "7": "Agosto", - "8": "Setembro", - "9": "Outubro", - "10": "Novembro", - "11": "Decembro" - }, - "SHORTDAY": { - "0": "Dom", - "1": "Lun", - "2": "Mar", - "3": "Mér", - "4": "Xov", - "5": "Ven", - "6": "Sáb" - }, - "SHORTMONTH": { - "0": "Xan", - "1": "Feb", - "2": "Mar", - "3": "Abr", - "4": "Mai", - "5": "Xuñ", - "6": "Xul", - "7": "Ago", - "8": "Set", - "9": "Out", - "10": "Nov", - "11": "Dec" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Luns", + "Martes", + "M\u00e9rcores", + "Xoves", + "Venres", + "S\u00e1bado" + ], + "MONTH": [ + "Xaneiro", + "Febreiro", + "Marzo", + "Abril", + "Maio", + "Xu\u00f1o", + "Xullo", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Decembro" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "M\u00e9r", + "Xov", + "Ven", + "S\u00e1b" + ], + "SHORTMONTH": [ + "Xan", + "Feb", + "Mar", + "Abr", + "Mai", + "Xu\u00f1", + "Xul", + "Ago", + "Set", + "Out", + "Nov", + "Dec" + ], "fullDate": "EEEE dd MMMM y", "longDate": "dd MMMM y", "medium": "d MMM, y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "gl", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_gsw-ch.js b/lib/angular/i18n/angular-locale_gsw-ch.js index 58b2a49..c013912 100755 --- a/lib/angular/i18n/angular-locale_gsw-ch.js +++ b/lib/angular/i18n/angular-locale_gsw-ch.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nam." - }, - "DAY": { - "0": "Sunntig", - "1": "Määntig", - "2": "Ziischtig", - "3": "Mittwuch", - "4": "Dunschtig", - "5": "Friitig", - "6": "Samschtig" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "Auguscht", - "8": "Septämber", - "9": "Oktoober", - "10": "Novämber", - "11": "Dezämber" - }, - "SHORTDAY": { - "0": "Su.", - "1": "Mä.", - "2": "Zi.", - "3": "Mi.", - "4": "Du.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "CHF", "DECIMAL_SEP": ".", - "GROUP_SEP": "’", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "gsw-ch", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_gsw.js b/lib/angular/i18n/angular-locale_gsw.js index 3a7c056..553602c 100755 --- a/lib/angular/i18n/angular-locale_gsw.js +++ b/lib/angular/i18n/angular-locale_gsw.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "vorm.", - "1": "nam." - }, - "DAY": { - "0": "Sunntig", - "1": "Määntig", - "2": "Ziischtig", - "3": "Mittwuch", - "4": "Dunschtig", - "5": "Friitig", - "6": "Samschtig" - }, - "MONTH": { - "0": "Januar", - "1": "Februar", - "2": "März", - "3": "April", - "4": "Mai", - "5": "Juni", - "6": "Juli", - "7": "Auguscht", - "8": "Septämber", - "9": "Oktoober", - "10": "Novämber", - "11": "Dezämber" - }, - "SHORTDAY": { - "0": "Su.", - "1": "Mä.", - "2": "Zi.", - "3": "Mi.", - "4": "Du.", - "5": "Fr.", - "6": "Sa." - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mär", - "3": "Apr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Aug", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "CHF", "DECIMAL_SEP": ".", - "GROUP_SEP": "’", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "gsw", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_gu-in.js b/lib/angular/i18n/angular-locale_gu-in.js index 39402c4..a82bfe9 100755 --- a/lib/angular/i18n/angular-locale_gu-in.js +++ b/lib/angular/i18n/angular-locale_gu-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "રવિવાર", - "1": "સોમવાર", - "2": "મંગળવાર", - "3": "બુધવાર", - "4": "ગુરુવાર", - "5": "શુક્રવાર", - "6": "શનિવાર" - }, - "MONTH": { - "0": "જાન્યુઆરી", - "1": "ફેબ્રુઆરી", - "2": "માર્ચ", - "3": "એપ્રિલ", - "4": "મે", - "5": "જૂન", - "6": "જુલાઈ", - "7": "ઑગસ્ટ", - "8": "સપ્ટેમ્બર", - "9": "ઑક્ટોબર", - "10": "નવેમ્બર", - "11": "ડિસેમ્બર" - }, - "SHORTDAY": { - "0": "રવિ", - "1": "સોમ", - "2": "મંગળ", - "3": "બુધ", - "4": "ગુરુ", - "5": "શુક્ર", - "6": "શનિ" - }, - "SHORTMONTH": { - "0": "જાન્યુ", - "1": "ફેબ્રુ", - "2": "માર્ચ", - "3": "એપ્રિલ", - "4": "મે", - "5": "જૂન", - "6": "જુલાઈ", - "7": "ઑગસ્ટ", - "8": "સપ્ટે", - "9": "ઑક્ટો", - "10": "નવે", - "11": "ડિસે" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", + "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", + "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", + "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", + "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", + "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0" + ], + "MONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", + "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0" + ], + "SHORTDAY": [ + "\u0ab0\u0ab5\u0abf", + "\u0ab8\u0acb\u0aae", + "\u0aae\u0a82\u0a97\u0ab3", + "\u0aac\u0ac1\u0aa7", + "\u0a97\u0ac1\u0ab0\u0ac1", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", + "\u0ab6\u0aa8\u0abf" + ], + "SHORTMONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", + "\u0a91\u0a95\u0acd\u0a9f\u0acb", + "\u0aa8\u0ab5\u0ac7", + "\u0aa1\u0abf\u0ab8\u0ac7" + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y hh:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "hh:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "gu-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_gu.js b/lib/angular/i18n/angular-locale_gu.js index c60d763..864cc5d 100755 --- a/lib/angular/i18n/angular-locale_gu.js +++ b/lib/angular/i18n/angular-locale_gu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "રવિવાર", - "1": "સોમવાર", - "2": "મંગળવાર", - "3": "બુધવાર", - "4": "ગુરુવાર", - "5": "શુક્રવાર", - "6": "શનિવાર" - }, - "MONTH": { - "0": "જાન્યુઆરી", - "1": "ફેબ્રુઆરી", - "2": "માર્ચ", - "3": "એપ્રિલ", - "4": "મે", - "5": "જૂન", - "6": "જુલાઈ", - "7": "ઑગસ્ટ", - "8": "સપ્ટેમ્બર", - "9": "ઑક્ટોબર", - "10": "નવેમ્બર", - "11": "ડિસેમ્બર" - }, - "SHORTDAY": { - "0": "રવિ", - "1": "સોમ", - "2": "મંગળ", - "3": "બુધ", - "4": "ગુરુ", - "5": "શુક્ર", - "6": "શનિ" - }, - "SHORTMONTH": { - "0": "જાન્યુ", - "1": "ફેબ્રુ", - "2": "માર્ચ", - "3": "એપ્રિલ", - "4": "મે", - "5": "જૂન", - "6": "જુલાઈ", - "7": "ઑગસ્ટ", - "8": "સપ્ટે", - "9": "ઑક્ટો", - "10": "નવે", - "11": "ડિસે" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", + "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", + "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", + "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", + "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", + "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0" + ], + "MONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", + "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0" + ], + "SHORTDAY": [ + "\u0ab0\u0ab5\u0abf", + "\u0ab8\u0acb\u0aae", + "\u0aae\u0a82\u0a97\u0ab3", + "\u0aac\u0ac1\u0aa7", + "\u0a97\u0ac1\u0ab0\u0ac1", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", + "\u0ab6\u0aa8\u0abf" + ], + "SHORTMONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", + "\u0a91\u0a95\u0acd\u0a9f\u0acb", + "\u0aa8\u0ab5\u0ac7", + "\u0aa1\u0abf\u0ab8\u0ac7" + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y hh:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "hh:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "gu", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_he-il.js b/lib/angular/i18n/angular-locale_he-il.js index 84db809..cd59f54 100755 --- a/lib/angular/i18n/angular-locale_he-il.js +++ b/lib/angular/i18n/angular-locale_he-il.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "לפנה״צ", - "1": "אחה״צ" - }, - "DAY": { - "0": "יום ראשון", - "1": "יום שני", - "2": "יום שלישי", - "3": "יום רביעי", - "4": "יום חמישי", - "5": "יום שישי", - "6": "יום שבת" - }, - "MONTH": { - "0": "ינואר", - "1": "פברואר", - "2": "מרץ", - "3": "אפריל", - "4": "מאי", - "5": "יוני", - "6": "יולי", - "7": "אוגוסט", - "8": "ספטמבר", - "9": "אוקטובר", - "10": "נובמבר", - "11": "דצמבר" - }, - "SHORTDAY": { - "0": "יום א׳", - "1": "יום ב׳", - "2": "יום ג׳", - "3": "יום ד׳", - "4": "יום ה׳", - "5": "יום ו׳", - "6": "שבת" - }, - "SHORTMONTH": { - "0": "ינו", - "1": "פבר", - "2": "מרץ", - "3": "אפר", - "4": "מאי", - "5": "יונ", - "6": "יול", - "7": "אוג", - "8": "ספט", - "9": "אוק", - "10": "נוב", - "11": "דצמ" - }, - "fullDate": "EEEE, d בMMMM y", - "longDate": "d בMMMM y", - "medium": "d בMMM yyyy HH:mm:ss", - "mediumDate": "d בMMM yyyy", + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5", + "\u05e4\u05d1\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0", + "\u05d9\u05d5\u05dc", + "\u05d0\u05d5\u05d2", + "\u05e1\u05e4\u05d8", + "\u05d0\u05d5\u05e7", + "\u05e0\u05d5\u05d1", + "\u05d3\u05e6\u05de" + ], + "fullDate": "EEEE, d \u05d1MMMM y", + "longDate": "d \u05d1MMMM y", + "medium": "d \u05d1MMM yyyy HH:mm:ss", + "mediumDate": "d \u05d1MMM yyyy", "mediumTime": "HH:mm:ss", "short": "dd/MM/yy HH:mm", "shortDate": "dd/MM/yy", "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₪", + "CURRENCY_SYM": "\u20aa", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "he-il", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_he.js b/lib/angular/i18n/angular-locale_he.js index 27022f5..23d1cbc 100755 --- a/lib/angular/i18n/angular-locale_he.js +++ b/lib/angular/i18n/angular-locale_he.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "לפנה״צ", - "1": "אחה״צ" - }, - "DAY": { - "0": "יום ראשון", - "1": "יום שני", - "2": "יום שלישי", - "3": "יום רביעי", - "4": "יום חמישי", - "5": "יום שישי", - "6": "יום שבת" - }, - "MONTH": { - "0": "ינואר", - "1": "פברואר", - "2": "מרץ", - "3": "אפריל", - "4": "מאי", - "5": "יוני", - "6": "יולי", - "7": "אוגוסט", - "8": "ספטמבר", - "9": "אוקטובר", - "10": "נובמבר", - "11": "דצמבר" - }, - "SHORTDAY": { - "0": "יום א׳", - "1": "יום ב׳", - "2": "יום ג׳", - "3": "יום ד׳", - "4": "יום ה׳", - "5": "יום ו׳", - "6": "שבת" - }, - "SHORTMONTH": { - "0": "ינו", - "1": "פבר", - "2": "מרץ", - "3": "אפר", - "4": "מאי", - "5": "יונ", - "6": "יול", - "7": "אוג", - "8": "ספט", - "9": "אוק", - "10": "נוב", - "11": "דצמ" - }, - "fullDate": "EEEE, d בMMMM y", - "longDate": "d בMMMM y", - "medium": "d בMMM yyyy HH:mm:ss", - "mediumDate": "d בMMM yyyy", + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5", + "\u05e4\u05d1\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0", + "\u05d9\u05d5\u05dc", + "\u05d0\u05d5\u05d2", + "\u05e1\u05e4\u05d8", + "\u05d0\u05d5\u05e7", + "\u05e0\u05d5\u05d1", + "\u05d3\u05e6\u05de" + ], + "fullDate": "EEEE, d \u05d1MMMM y", + "longDate": "d \u05d1MMMM y", + "medium": "d \u05d1MMM yyyy HH:mm:ss", + "mediumDate": "d \u05d1MMM yyyy", "mediumTime": "HH:mm:ss", "short": "dd/MM/yy HH:mm", "shortDate": "dd/MM/yy", "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₪", + "CURRENCY_SYM": "\u20aa", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "he", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_hi-in.js b/lib/angular/i18n/angular-locale_hi-in.js index 92a722f..d9b0029 100755 --- a/lib/angular/i18n/angular-locale_hi-in.js +++ b/lib/angular/i18n/angular-locale_hi-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "रविवार", - "1": "सोमवार", - "2": "मंगलवार", - "3": "बुधवार", - "4": "बृहस्पतिवार", - "5": "शुक्रवार", - "6": "शनिवार" - }, - "MONTH": { - "0": "जनवरी", - "1": "फरवरी", - "2": "मार्च", - "3": "अप्रैल", - "4": "मई", - "5": "जून", - "6": "जुलाई", - "7": "अगस्त", - "8": "सितम्बर", - "9": "अक्तूबर", - "10": "नवम्बर", - "11": "दिसम्बर" - }, - "SHORTDAY": { - "0": "रवि.", - "1": "सोम.", - "2": "मंगल.", - "3": "बुध.", - "4": "बृह.", - "5": "शुक्र.", - "6": "शनि." - }, - "SHORTMONTH": { - "0": "जनवरी", - "1": "फरवरी", - "2": "मार्च", - "3": "अप्रैल", - "4": "मई", - "5": "जून", - "6": "जुलाई", - "7": "अगस्त", - "8": "सितम्बर", - "9": "अक्तूबर", - "10": "नवम्बर", - "11": "दिसम्बर" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f.", + "\u0938\u094b\u092e.", + "\u092e\u0902\u0917\u0932.", + "\u092c\u0941\u0927.", + "\u092c\u0943\u0939.", + "\u0936\u0941\u0915\u094d\u0930.", + "\u0936\u0928\u093f." + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "dd-MM-yyyy h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "hi-in", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_hi.js b/lib/angular/i18n/angular-locale_hi.js index 54446ce..c9258b8 100755 --- a/lib/angular/i18n/angular-locale_hi.js +++ b/lib/angular/i18n/angular-locale_hi.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "रविवार", - "1": "सोमवार", - "2": "मंगलवार", - "3": "बुधवार", - "4": "बृहस्पतिवार", - "5": "शुक्रवार", - "6": "शनिवार" - }, - "MONTH": { - "0": "जनवरी", - "1": "फरवरी", - "2": "मार्च", - "3": "अप्रैल", - "4": "मई", - "5": "जून", - "6": "जुलाई", - "7": "अगस्त", - "8": "सितम्बर", - "9": "अक्तूबर", - "10": "नवम्बर", - "11": "दिसम्बर" - }, - "SHORTDAY": { - "0": "रवि.", - "1": "सोम.", - "2": "मंगल.", - "3": "बुध.", - "4": "बृह.", - "5": "शुक्र.", - "6": "शनि." - }, - "SHORTMONTH": { - "0": "जनवरी", - "1": "फरवरी", - "2": "मार्च", - "3": "अप्रैल", - "4": "मई", - "5": "जून", - "6": "जुलाई", - "7": "अगस्त", - "8": "सितम्बर", - "9": "अक्तूबर", - "10": "नवम्बर", - "11": "दिसम्बर" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f.", + "\u0938\u094b\u092e.", + "\u092e\u0902\u0917\u0932.", + "\u092c\u0941\u0927.", + "\u092c\u0943\u0939.", + "\u0936\u0941\u0915\u094d\u0930.", + "\u0936\u0928\u093f." + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "dd-MM-yyyy h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "hi", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_hr-hr.js b/lib/angular/i18n/angular-locale_hr-hr.js index 20b9b1f..865d756 100755 --- a/lib/angular/i18n/angular-locale_hr-hr.js +++ b/lib/angular/i18n/angular-locale_hr-hr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "nedjelja", - "1": "ponedjeljak", - "2": "utorak", - "3": "srijeda", - "4": "četvrtak", - "5": "petak", - "6": "subota" - }, - "MONTH": { - "0": "siječnja", - "1": "veljače", - "2": "ožujka", - "3": "travnja", - "4": "svibnja", - "5": "lipnja", - "6": "srpnja", - "7": "kolovoza", - "8": "rujna", - "9": "listopada", - "10": "studenoga", - "11": "prosinca" - }, - "SHORTDAY": { - "0": "ned", - "1": "pon", - "2": "uto", - "3": "sri", - "4": "čet", - "5": "pet", - "6": "sub" - }, - "SHORTMONTH": { - "0": "sij", - "1": "velj", - "2": "ožu", - "3": "tra", - "4": "svi", - "5": "lip", - "6": "srp", - "7": "kol", - "8": "ruj", - "9": "lis", - "10": "stu", - "11": "pro" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "pro" + ], "fullDate": "EEEE, d. MMMM y.", "longDate": "d. MMMM y.", "medium": "d. M. y. HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "kn", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "hr-hr", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_hr.js b/lib/angular/i18n/angular-locale_hr.js index 72ef511..ed4223e 100755 --- a/lib/angular/i18n/angular-locale_hr.js +++ b/lib/angular/i18n/angular-locale_hr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "nedjelja", - "1": "ponedjeljak", - "2": "utorak", - "3": "srijeda", - "4": "četvrtak", - "5": "petak", - "6": "subota" - }, - "MONTH": { - "0": "siječnja", - "1": "veljače", - "2": "ožujka", - "3": "travnja", - "4": "svibnja", - "5": "lipnja", - "6": "srpnja", - "7": "kolovoza", - "8": "rujna", - "9": "listopada", - "10": "studenoga", - "11": "prosinca" - }, - "SHORTDAY": { - "0": "ned", - "1": "pon", - "2": "uto", - "3": "sri", - "4": "čet", - "5": "pet", - "6": "sub" - }, - "SHORTMONTH": { - "0": "sij", - "1": "velj", - "2": "ožu", - "3": "tra", - "4": "svi", - "5": "lip", - "6": "srp", - "7": "kol", - "8": "ruj", - "9": "lis", - "10": "stu", - "11": "pro" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "pro" + ], "fullDate": "EEEE, d. MMMM y.", "longDate": "d. MMMM y.", "medium": "d. M. y. HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "kn", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "hr", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_hu-hu.js b/lib/angular/i18n/angular-locale_hu-hu.js index d56ad38..ae33eb0 100755 --- a/lib/angular/i18n/angular-locale_hu-hu.js +++ b/lib/angular/i18n/angular-locale_hu-hu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "de.", - "1": "du." - }, - "DAY": { - "0": "vasárnap", - "1": "hétfő", - "2": "kedd", - "3": "szerda", - "4": "csütörtök", - "5": "péntek", - "6": "szombat" - }, - "MONTH": { - "0": "január", - "1": "február", - "2": "március", - "3": "április", - "4": "május", - "5": "június", - "6": "július", - "7": "augusztus", - "8": "szeptember", - "9": "október", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "V", - "1": "H", - "2": "K", - "3": "Sze", - "4": "Cs", - "5": "P", - "6": "Szo" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "febr.", - "2": "márc.", - "3": "ápr.", - "4": "máj.", - "5": "jún.", - "6": "júl.", - "7": "aug.", - "8": "szept.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "de.", + "du." + ], + "DAY": [ + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat" + ], + "MONTH": [ + "janu\u00e1r", + "febru\u00e1r", + "m\u00e1rcius", + "\u00e1prilis", + "m\u00e1jus", + "j\u00fanius", + "j\u00falius", + "augusztus", + "szeptember", + "okt\u00f3ber", + "november", + "december" + ], + "SHORTDAY": [ + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo" + ], + "SHORTMONTH": [ + "jan.", + "febr.", + "m\u00e1rc.", + "\u00e1pr.", + "m\u00e1j.", + "j\u00fan.", + "j\u00fal.", + "aug.", + "szept.", + "okt.", + "nov.", + "dec." + ], "fullDate": "y. MMMM d., EEEE", "longDate": "y. MMMM d.", "medium": "yyyy.MM.dd. H:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Ft", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "hu-hu", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_hu.js b/lib/angular/i18n/angular-locale_hu.js index 6403a97..beb1619 100755 --- a/lib/angular/i18n/angular-locale_hu.js +++ b/lib/angular/i18n/angular-locale_hu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "de.", - "1": "du." - }, - "DAY": { - "0": "vasárnap", - "1": "hétfő", - "2": "kedd", - "3": "szerda", - "4": "csütörtök", - "5": "péntek", - "6": "szombat" - }, - "MONTH": { - "0": "január", - "1": "február", - "2": "március", - "3": "április", - "4": "május", - "5": "június", - "6": "július", - "7": "augusztus", - "8": "szeptember", - "9": "október", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "V", - "1": "H", - "2": "K", - "3": "Sze", - "4": "Cs", - "5": "P", - "6": "Szo" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "febr.", - "2": "márc.", - "3": "ápr.", - "4": "máj.", - "5": "jún.", - "6": "júl.", - "7": "aug.", - "8": "szept.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "de.", + "du." + ], + "DAY": [ + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat" + ], + "MONTH": [ + "janu\u00e1r", + "febru\u00e1r", + "m\u00e1rcius", + "\u00e1prilis", + "m\u00e1jus", + "j\u00fanius", + "j\u00falius", + "augusztus", + "szeptember", + "okt\u00f3ber", + "november", + "december" + ], + "SHORTDAY": [ + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo" + ], + "SHORTMONTH": [ + "jan.", + "febr.", + "m\u00e1rc.", + "\u00e1pr.", + "m\u00e1j.", + "j\u00fan.", + "j\u00fal.", + "aug.", + "szept.", + "okt.", + "nov.", + "dec." + ], "fullDate": "y. MMMM d., EEEE", "longDate": "y. MMMM d.", "medium": "yyyy.MM.dd. H:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Ft", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "hu", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_id-id.js b/lib/angular/i18n/angular-locale_id-id.js index 69cc491..5d02831 100755 --- a/lib/angular/i18n/angular-locale_id-id.js +++ b/lib/angular/i18n/angular-locale_id-id.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Minggu", - "1": "Senin", - "2": "Selasa", - "3": "Rabu", - "4": "Kamis", - "5": "Jumat", - "6": "Sabtu" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Maret", - "3": "April", - "4": "Mei", - "5": "Juni", - "6": "Juli", - "7": "Agustus", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Desember" - }, - "SHORTDAY": { - "0": "Min", - "1": "Sen", - "2": "Sel", - "3": "Rab", - "4": "Kam", - "5": "Jum", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Agt", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE, dd MMMM yyyy", "longDate": "d MMMM yyyy", "medium": "d MMM yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Rp", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "id-id", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_id.js b/lib/angular/i18n/angular-locale_id.js index 6f5f61a..a5aa3fc 100755 --- a/lib/angular/i18n/angular-locale_id.js +++ b/lib/angular/i18n/angular-locale_id.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Minggu", - "1": "Senin", - "2": "Selasa", - "3": "Rabu", - "4": "Kamis", - "5": "Jumat", - "6": "Sabtu" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Maret", - "3": "April", - "4": "Mei", - "5": "Juni", - "6": "Juli", - "7": "Agustus", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Desember" - }, - "SHORTDAY": { - "0": "Min", - "1": "Sen", - "2": "Sel", - "3": "Rab", - "4": "Kam", - "5": "Jum", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Agt", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE, dd MMMM yyyy", "longDate": "d MMMM yyyy", "medium": "d MMM yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Rp", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "id", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_in.js b/lib/angular/i18n/angular-locale_in.js index 90fb4a2..5eed1c1 100755 --- a/lib/angular/i18n/angular-locale_in.js +++ b/lib/angular/i18n/angular-locale_in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Minggu", - "1": "Senin", - "2": "Selasa", - "3": "Rabu", - "4": "Kamis", - "5": "Jumat", - "6": "Sabtu" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Maret", - "3": "April", - "4": "Mei", - "5": "Juni", - "6": "Juli", - "7": "Agustus", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Desember" - }, - "SHORTDAY": { - "0": "Min", - "1": "Sen", - "2": "Sel", - "3": "Rab", - "4": "Kam", - "5": "Jum", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mar", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Agt", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE, dd MMMM yyyy", "longDate": "d MMMM yyyy", "medium": "d MMM yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Rp", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "in", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_is-is.js b/lib/angular/i18n/angular-locale_is-is.js index b63a409..e6f8cbb 100755 --- a/lib/angular/i18n/angular-locale_is-is.js +++ b/lib/angular/i18n/angular-locale_is-is.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "f.h.", - "1": "e.h." - }, - "DAY": { - "0": "sunnudagur", - "1": "mánudagur", - "2": "þriðjudagur", - "3": "miðvikudagur", - "4": "fimmtudagur", - "5": "föstudagur", - "6": "laugardagur" - }, - "MONTH": { - "0": "janúar", - "1": "febrúar", - "2": "mars", - "3": "apríl", - "4": "maí", - "5": "júní", - "6": "júlí", - "7": "ágúst", - "8": "september", - "9": "október", - "10": "nóvember", - "11": "desember" - }, - "SHORTDAY": { - "0": "sun", - "1": "mán", - "2": "þri", - "3": "mið", - "4": "fim", - "5": "fös", - "6": "lau" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "maí", - "5": "jún", - "6": "júl", - "7": "ágú", - "8": "sep", - "9": "okt", - "10": "nóv", - "11": "des" - }, + "AMPMS": [ + "f.h.", + "e.h." + ], + "DAY": [ + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur" + ], + "MONTH": [ + "jan\u00faar", + "febr\u00faar", + "mars", + "apr\u00edl", + "ma\u00ed", + "j\u00fan\u00ed", + "j\u00fal\u00ed", + "\u00e1g\u00fast", + "september", + "okt\u00f3ber", + "n\u00f3vember", + "desember" + ], + "SHORTDAY": [ + "sun", + "m\u00e1n", + "\u00feri", + "mi\u00f0", + "fim", + "f\u00f6s", + "lau" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "ma\u00ed", + "j\u00fan", + "j\u00fal", + "\u00e1g\u00fa", + "sep", + "okt", + "n\u00f3v", + "des" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "d.M.yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "is-is", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_is.js b/lib/angular/i18n/angular-locale_is.js index f012a4f..ea64147 100755 --- a/lib/angular/i18n/angular-locale_is.js +++ b/lib/angular/i18n/angular-locale_is.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "f.h.", - "1": "e.h." - }, - "DAY": { - "0": "sunnudagur", - "1": "mánudagur", - "2": "þriðjudagur", - "3": "miðvikudagur", - "4": "fimmtudagur", - "5": "föstudagur", - "6": "laugardagur" - }, - "MONTH": { - "0": "janúar", - "1": "febrúar", - "2": "mars", - "3": "apríl", - "4": "maí", - "5": "júní", - "6": "júlí", - "7": "ágúst", - "8": "september", - "9": "október", - "10": "nóvember", - "11": "desember" - }, - "SHORTDAY": { - "0": "sun", - "1": "mán", - "2": "þri", - "3": "mið", - "4": "fim", - "5": "fös", - "6": "lau" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "maí", - "5": "jún", - "6": "júl", - "7": "ágú", - "8": "sep", - "9": "okt", - "10": "nóv", - "11": "des" - }, + "AMPMS": [ + "f.h.", + "e.h." + ], + "DAY": [ + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur" + ], + "MONTH": [ + "jan\u00faar", + "febr\u00faar", + "mars", + "apr\u00edl", + "ma\u00ed", + "j\u00fan\u00ed", + "j\u00fal\u00ed", + "\u00e1g\u00fast", + "september", + "okt\u00f3ber", + "n\u00f3vember", + "desember" + ], + "SHORTDAY": [ + "sun", + "m\u00e1n", + "\u00feri", + "mi\u00f0", + "fim", + "f\u00f6s", + "lau" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "ma\u00ed", + "j\u00fan", + "j\u00fal", + "\u00e1g\u00fa", + "sep", + "okt", + "n\u00f3v", + "des" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "d.M.yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "is", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_it-it.js b/lib/angular/i18n/angular-locale_it-it.js index 4c6dcab..a499737 100755 --- a/lib/angular/i18n/angular-locale_it-it.js +++ b/lib/angular/i18n/angular-locale_it-it.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "m.", - "1": "p." - }, - "DAY": { - "0": "domenica", - "1": "lunedì", - "2": "martedì", - "3": "mercoledì", - "4": "giovedì", - "5": "venerdì", - "6": "sabato" - }, - "MONTH": { - "0": "gennaio", - "1": "febbraio", - "2": "marzo", - "3": "aprile", - "4": "maggio", - "5": "giugno", - "6": "luglio", - "7": "agosto", - "8": "settembre", - "9": "ottobre", - "10": "novembre", - "11": "dicembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mer", - "4": "gio", - "5": "ven", - "6": "sab" - }, - "SHORTMONTH": { - "0": "gen", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "mag", - "5": "giu", - "6": "lug", - "7": "ago", - "8": "set", - "9": "ott", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "m.", + "p." + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], "fullDate": "EEEE d MMMM y", "longDate": "dd MMMM y", "medium": "dd/MMM/y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "it-it", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_it-sm.js b/lib/angular/i18n/angular-locale_it-sm.js index d1a6d16..f431a93 100755 --- a/lib/angular/i18n/angular-locale_it-sm.js +++ b/lib/angular/i18n/angular-locale_it-sm.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "m.", - "1": "p." - }, - "DAY": { - "0": "domenica", - "1": "lunedì", - "2": "martedì", - "3": "mercoledì", - "4": "giovedì", - "5": "venerdì", - "6": "sabato" - }, - "MONTH": { - "0": "gennaio", - "1": "febbraio", - "2": "marzo", - "3": "aprile", - "4": "maggio", - "5": "giugno", - "6": "luglio", - "7": "agosto", - "8": "settembre", - "9": "ottobre", - "10": "novembre", - "11": "dicembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mer", - "4": "gio", - "5": "ven", - "6": "sab" - }, - "SHORTMONTH": { - "0": "gen", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "mag", - "5": "giu", - "6": "lug", - "7": "ago", - "8": "set", - "9": "ott", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "m.", + "p." + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], "fullDate": "EEEE d MMMM y", "longDate": "dd MMMM y", "medium": "dd/MMM/y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "it-sm", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_it.js b/lib/angular/i18n/angular-locale_it.js index 7333c3f..99ca2a7 100755 --- a/lib/angular/i18n/angular-locale_it.js +++ b/lib/angular/i18n/angular-locale_it.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "m.", - "1": "p." - }, - "DAY": { - "0": "domenica", - "1": "lunedì", - "2": "martedì", - "3": "mercoledì", - "4": "giovedì", - "5": "venerdì", - "6": "sabato" - }, - "MONTH": { - "0": "gennaio", - "1": "febbraio", - "2": "marzo", - "3": "aprile", - "4": "maggio", - "5": "giugno", - "6": "luglio", - "7": "agosto", - "8": "settembre", - "9": "ottobre", - "10": "novembre", - "11": "dicembre" - }, - "SHORTDAY": { - "0": "dom", - "1": "lun", - "2": "mar", - "3": "mer", - "4": "gio", - "5": "ven", - "6": "sab" - }, - "SHORTMONTH": { - "0": "gen", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "mag", - "5": "giu", - "6": "lug", - "7": "ago", - "8": "set", - "9": "ott", - "10": "nov", - "11": "dic" - }, + "AMPMS": [ + "m.", + "p." + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], "fullDate": "EEEE d MMMM y", "longDate": "dd MMMM y", "medium": "dd/MMM/y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "it", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_iw.js b/lib/angular/i18n/angular-locale_iw.js index d60d3ad..7f52d3a 100755 --- a/lib/angular/i18n/angular-locale_iw.js +++ b/lib/angular/i18n/angular-locale_iw.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "לפנה״צ", - "1": "אחה״צ" - }, - "DAY": { - "0": "יום ראשון", - "1": "יום שני", - "2": "יום שלישי", - "3": "יום רביעי", - "4": "יום חמישי", - "5": "יום שישי", - "6": "יום שבת" - }, - "MONTH": { - "0": "ינואר", - "1": "פברואר", - "2": "מרץ", - "3": "אפריל", - "4": "מאי", - "5": "יוני", - "6": "יולי", - "7": "אוגוסט", - "8": "ספטמבר", - "9": "אוקטובר", - "10": "נובמבר", - "11": "דצמבר" - }, - "SHORTDAY": { - "0": "יום א׳", - "1": "יום ב׳", - "2": "יום ג׳", - "3": "יום ד׳", - "4": "יום ה׳", - "5": "יום ו׳", - "6": "שבת" - }, - "SHORTMONTH": { - "0": "ינו", - "1": "פבר", - "2": "מרץ", - "3": "אפר", - "4": "מאי", - "5": "יונ", - "6": "יול", - "7": "אוג", - "8": "ספט", - "9": "אוק", - "10": "נוב", - "11": "דצמ" - }, - "fullDate": "EEEE, d בMMMM y", - "longDate": "d בMMMM y", - "medium": "d בMMM yyyy HH:mm:ss", - "mediumDate": "d בMMM yyyy", + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5", + "\u05e4\u05d1\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0", + "\u05d9\u05d5\u05dc", + "\u05d0\u05d5\u05d2", + "\u05e1\u05e4\u05d8", + "\u05d0\u05d5\u05e7", + "\u05e0\u05d5\u05d1", + "\u05d3\u05e6\u05de" + ], + "fullDate": "EEEE, d \u05d1MMMM y", + "longDate": "d \u05d1MMMM y", + "medium": "d \u05d1MMM yyyy HH:mm:ss", + "mediumDate": "d \u05d1MMM yyyy", "mediumTime": "HH:mm:ss", "short": "dd/MM/yy HH:mm", "shortDate": "dd/MM/yy", "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₪", + "CURRENCY_SYM": "\u20aa", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "iw", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ja-jp.js b/lib/angular/i18n/angular-locale_ja-jp.js index a5cf2fc..2fc7abc 100755 --- a/lib/angular/i18n/angular-locale_ja-jp.js +++ b/lib/angular/i18n/angular-locale_ja-jp.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "午前", - "1": "午後" - }, - "DAY": { - "0": "日曜日", - "1": "月曜日", - "2": "火曜日", - "3": "水曜日", - "4": "木曜日", - "5": "金曜日", - "6": "土曜日" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "日", - "1": "月", - "2": "火", - "3": "水", - "4": "木", - "5": "金", - "6": "土" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", + "AMPMS": [ + "\u5348\u524d", + "\u5348\u5f8c" + ], + "DAY": [ + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", "medium": "yyyy/MM/dd H:mm:ss", "mediumDate": "yyyy/MM/dd", "mediumTime": "H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "¥", + "CURRENCY_SYM": "\u00a5", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ja-jp", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ja.js b/lib/angular/i18n/angular-locale_ja.js index d61cdb9..eb39e84 100755 --- a/lib/angular/i18n/angular-locale_ja.js +++ b/lib/angular/i18n/angular-locale_ja.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "午前", - "1": "午後" - }, - "DAY": { - "0": "日曜日", - "1": "月曜日", - "2": "火曜日", - "3": "水曜日", - "4": "木曜日", - "5": "金曜日", - "6": "土曜日" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "日", - "1": "月", - "2": "火", - "3": "水", - "4": "木", - "5": "金", - "6": "土" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", + "AMPMS": [ + "\u5348\u524d", + "\u5348\u5f8c" + ], + "DAY": [ + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", "medium": "yyyy/MM/dd H:mm:ss", "mediumDate": "yyyy/MM/dd", "mediumTime": "H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "¥", + "CURRENCY_SYM": "\u00a5", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ja", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_kn-in.js b/lib/angular/i18n/angular-locale_kn-in.js index 8198ea4..6f7ea15 100755 --- a/lib/angular/i18n/angular-locale_kn-in.js +++ b/lib/angular/i18n/angular-locale_kn-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ರವಿವಾರ", - "1": "ಸೋಮವಾರ", - "2": "ಮಂಗಳವಾರ", - "3": "ಬುಧವಾರ", - "4": "ಗುರುವಾರ", - "5": "ಶುಕ್ರವಾರ", - "6": "ಶನಿವಾರ" - }, - "MONTH": { - "0": "ಜನವರೀ", - "1": "ಫೆಬ್ರವರೀ", - "2": "ಮಾರ್ಚ್", - "3": "ಎಪ್ರಿಲ್", - "4": "ಮೆ", - "5": "ಜೂನ್", - "6": "ಜುಲೈ", - "7": "ಆಗಸ್ಟ್", - "8": "ಸಪ್ಟೆಂಬರ್", - "9": "ಅಕ್ಟೋಬರ್", - "10": "ನವೆಂಬರ್", - "11": "ಡಿಸೆಂಬರ್" - }, - "SHORTDAY": { - "0": "ರ.", - "1": "ಸೋ.", - "2": "ಮಂ.", - "3": "ಬು.", - "4": "ಗು.", - "5": "ಶು.", - "6": "ಶನಿ." - }, - "SHORTMONTH": { - "0": "ಜನವರೀ", - "1": "ಫೆಬ್ರವರೀ", - "2": "ಮಾರ್ಚ್", - "3": "ಎಪ್ರಿಲ್", - "4": "ಮೆ", - "5": "ಜೂನ್", - "6": "ಜುಲೈ", - "7": "ಆಗಸ್ಟ್", - "8": "ಸಪ್ಟೆಂಬರ್", - "9": "ಅಕ್ಟೋಬರ್", - "10": "ನವೆಂಬರ್", - "11": "ಡಿಸೆಂಬರ್" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0", + "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", + "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", + "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", + "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0" + ], + "MONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], + "SHORTDAY": [ + "\u0cb0.", + "\u0cb8\u0ccb.", + "\u0cae\u0c82.", + "\u0cac\u0cc1.", + "\u0c97\u0cc1.", + "\u0cb6\u0cc1.", + "\u0cb6\u0ca8\u0cbf." + ], + "SHORTMONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y hh:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "hh:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "kn-in", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_kn.js b/lib/angular/i18n/angular-locale_kn.js index 4c49aa6..3020357 100755 --- a/lib/angular/i18n/angular-locale_kn.js +++ b/lib/angular/i18n/angular-locale_kn.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ರವಿವಾರ", - "1": "ಸೋಮವಾರ", - "2": "ಮಂಗಳವಾರ", - "3": "ಬುಧವಾರ", - "4": "ಗುರುವಾರ", - "5": "ಶುಕ್ರವಾರ", - "6": "ಶನಿವಾರ" - }, - "MONTH": { - "0": "ಜನವರೀ", - "1": "ಫೆಬ್ರವರೀ", - "2": "ಮಾರ್ಚ್", - "3": "ಎಪ್ರಿಲ್", - "4": "ಮೆ", - "5": "ಜೂನ್", - "6": "ಜುಲೈ", - "7": "ಆಗಸ್ಟ್", - "8": "ಸಪ್ಟೆಂಬರ್", - "9": "ಅಕ್ಟೋಬರ್", - "10": "ನವೆಂಬರ್", - "11": "ಡಿಸೆಂಬರ್" - }, - "SHORTDAY": { - "0": "ರ.", - "1": "ಸೋ.", - "2": "ಮಂ.", - "3": "ಬು.", - "4": "ಗು.", - "5": "ಶು.", - "6": "ಶನಿ." - }, - "SHORTMONTH": { - "0": "ಜನವರೀ", - "1": "ಫೆಬ್ರವರೀ", - "2": "ಮಾರ್ಚ್", - "3": "ಎಪ್ರಿಲ್", - "4": "ಮೆ", - "5": "ಜೂನ್", - "6": "ಜುಲೈ", - "7": "ಆಗಸ್ಟ್", - "8": "ಸಪ್ಟೆಂಬರ್", - "9": "ಅಕ್ಟೋಬರ್", - "10": "ನವೆಂಬರ್", - "11": "ಡಿಸೆಂಬರ್" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0", + "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", + "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", + "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", + "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0" + ], + "MONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], + "SHORTDAY": [ + "\u0cb0.", + "\u0cb8\u0ccb.", + "\u0cae\u0c82.", + "\u0cac\u0cc1.", + "\u0c97\u0cc1.", + "\u0cb6\u0cc1.", + "\u0cb6\u0ca8\u0cbf." + ], + "SHORTMONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y hh:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "hh:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "kn", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ko-kr.js b/lib/angular/i18n/angular-locale_ko-kr.js index a3ad4fa..91b39e4 100755 --- a/lib/angular/i18n/angular-locale_ko-kr.js +++ b/lib/angular/i18n/angular-locale_ko-kr.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "오전", - "1": "오후" - }, - "DAY": { - "0": "일요일", - "1": "월요일", - "2": "화요일", - "3": "수요일", - "4": "목요일", - "5": "금요일", - "6": "토요일" - }, - "MONTH": { - "0": "1월", - "1": "2월", - "2": "3월", - "3": "4월", - "4": "5월", - "5": "6월", - "6": "7월", - "7": "8월", - "8": "9월", - "9": "10월", - "10": "11월", - "11": "12월" - }, - "SHORTDAY": { - "0": "일", - "1": "월", - "2": "화", - "3": "수", - "4": "목", - "5": "금", - "6": "토" - }, - "SHORTMONTH": { - "0": "1월", - "1": "2월", - "2": "3월", - "3": "4월", - "4": "5월", - "5": "6월", - "6": "7월", - "7": "8월", - "8": "9월", - "9": "10월", - "10": "11월", - "11": "12월" - }, - "fullDate": "y년 M월 d일 EEEE", - "longDate": "y년 M월 d일", + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE", + "longDate": "y\ub144 M\uc6d4 d\uc77c", "medium": "yyyy. M. d. a h:mm:ss", "mediumDate": "yyyy. M. d.", "mediumTime": "a h:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "a h:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₩", + "CURRENCY_SYM": "\u20a9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ko-kr", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ko.js b/lib/angular/i18n/angular-locale_ko.js index b2abbe8..b5a4b1b 100755 --- a/lib/angular/i18n/angular-locale_ko.js +++ b/lib/angular/i18n/angular-locale_ko.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "오전", - "1": "오후" - }, - "DAY": { - "0": "일요일", - "1": "월요일", - "2": "화요일", - "3": "수요일", - "4": "목요일", - "5": "금요일", - "6": "토요일" - }, - "MONTH": { - "0": "1월", - "1": "2월", - "2": "3월", - "3": "4월", - "4": "5월", - "5": "6월", - "6": "7월", - "7": "8월", - "8": "9월", - "9": "10월", - "10": "11월", - "11": "12월" - }, - "SHORTDAY": { - "0": "일", - "1": "월", - "2": "화", - "3": "수", - "4": "목", - "5": "금", - "6": "토" - }, - "SHORTMONTH": { - "0": "1월", - "1": "2월", - "2": "3월", - "3": "4월", - "4": "5월", - "5": "6월", - "6": "7월", - "7": "8월", - "8": "9월", - "9": "10월", - "10": "11월", - "11": "12월" - }, - "fullDate": "y년 M월 d일 EEEE", - "longDate": "y년 M월 d일", + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE", + "longDate": "y\ub144 M\uc6d4 d\uc77c", "medium": "yyyy. M. d. a h:mm:ss", "mediumDate": "yyyy. M. d.", "mediumTime": "a h:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "a h:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₩", + "CURRENCY_SYM": "\u20a9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ko", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ln-cd.js b/lib/angular/i18n/angular-locale_ln-cd.js index ba8031b..b3470e0 100755 --- a/lib/angular/i18n/angular-locale_ln-cd.js +++ b/lib/angular/i18n/angular-locale_ln-cd.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ntɔ́ngɔ́", - "1": "mpókwa" - }, - "DAY": { - "0": "eyenga", - "1": "mokɔlɔ mwa yambo", - "2": "mokɔlɔ mwa míbalé", - "3": "mokɔlɔ mwa mísáto", - "4": "mokɔlɔ ya mínéi", - "5": "mokɔlɔ ya mítáno", - "6": "mpɔ́sɔ" - }, - "MONTH": { - "0": "sánzá ya yambo", - "1": "sánzá ya míbalé", - "2": "sánzá ya mísáto", - "3": "sánzá ya mínei", - "4": "sánzá ya mítáno", - "5": "sánzá ya motóbá", - "6": "sánzá ya nsambo", - "7": "sánzá ya mwambe", - "8": "sánzá ya libwa", - "9": "sánzá ya zómi", - "10": "sánzá ya zómi na mɔ̌kɔ́", - "11": "sánzá ya zómi na míbalé" - }, - "SHORTDAY": { - "0": "eye", - "1": "ybo", - "2": "mbl", - "3": "mst", - "4": "min", - "5": "mtn", - "6": "mps" - }, - "SHORTMONTH": { - "0": "yan", - "1": "fbl", - "2": "msi", - "3": "apl", - "4": "mai", - "5": "yun", - "6": "yul", - "7": "agt", - "8": "stb", - "9": "ɔtb", - "10": "nvb", - "11": "dsb" - }, + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "FrCD", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "ln-cd", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ln.js b/lib/angular/i18n/angular-locale_ln.js index 88990c3..9881dad 100755 --- a/lib/angular/i18n/angular-locale_ln.js +++ b/lib/angular/i18n/angular-locale_ln.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ntɔ́ngɔ́", - "1": "mpókwa" - }, - "DAY": { - "0": "eyenga", - "1": "mokɔlɔ mwa yambo", - "2": "mokɔlɔ mwa míbalé", - "3": "mokɔlɔ mwa mísáto", - "4": "mokɔlɔ ya mínéi", - "5": "mokɔlɔ ya mítáno", - "6": "mpɔ́sɔ" - }, - "MONTH": { - "0": "sánzá ya yambo", - "1": "sánzá ya míbalé", - "2": "sánzá ya mísáto", - "3": "sánzá ya mínei", - "4": "sánzá ya mítáno", - "5": "sánzá ya motóbá", - "6": "sánzá ya nsambo", - "7": "sánzá ya mwambe", - "8": "sánzá ya libwa", - "9": "sánzá ya zómi", - "10": "sánzá ya zómi na mɔ̌kɔ́", - "11": "sánzá ya zómi na míbalé" - }, - "SHORTDAY": { - "0": "eye", - "1": "ybo", - "2": "mbl", - "3": "mst", - "4": "min", - "5": "mtn", - "6": "mps" - }, - "SHORTMONTH": { - "0": "yan", - "1": "fbl", - "2": "msi", - "3": "apl", - "4": "mai", - "5": "yun", - "6": "yul", - "7": "agt", - "8": "stb", - "9": "ɔtb", - "10": "nvb", - "11": "dsb" - }, + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "FrCD", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "ln", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_lt-lt.js b/lib/angular/i18n/angular-locale_lt-lt.js index de9f14b..6a6f81f 100755 --- a/lib/angular/i18n/angular-locale_lt-lt.js +++ b/lib/angular/i18n/angular-locale_lt-lt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "priešpiet", - "1": "popiet" - }, - "DAY": { - "0": "sekmadienis", - "1": "pirmadienis", - "2": "antradienis", - "3": "trečiadienis", - "4": "ketvirtadienis", - "5": "penktadienis", - "6": "šeštadienis" - }, - "MONTH": { - "0": "sausio", - "1": "vasaris", - "2": "kovas", - "3": "balandis", - "4": "gegužė", - "5": "birželis", - "6": "liepa", - "7": "rugpjūtis", - "8": "rugsėjis", - "9": "spalis", - "10": "lapkritis", - "11": "gruodis" - }, - "SHORTDAY": { - "0": "Sk", - "1": "Pr", - "2": "An", - "3": "Tr", - "4": "Kt", - "5": "Pn", - "6": "Št" - }, - "SHORTMONTH": { - "0": "Saus.", - "1": "Vas", - "2": "Kov.", - "3": "Bal.", - "4": "Geg.", - "5": "Bir.", - "6": "Liep.", - "7": "Rugp.", - "8": "Rugs.", - "9": "Spal.", - "10": "Lapkr.", - "11": "Gruod." - }, + "AMPMS": [ + "prie\u0161piet", + "popiet" + ], + "DAY": [ + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis" + ], + "MONTH": [ + "sausio", + "vasaris", + "kovas", + "balandis", + "gegu\u017e\u0117", + "bir\u017eelis", + "liepa", + "rugpj\u016btis", + "rugs\u0117jis", + "spalis", + "lapkritis", + "gruodis" + ], + "SHORTDAY": [ + "Sk", + "Pr", + "An", + "Tr", + "Kt", + "Pn", + "\u0160t" + ], + "SHORTMONTH": [ + "Saus.", + "Vas", + "Kov.", + "Bal.", + "Geg.", + "Bir.", + "Liep.", + "Rugp.", + "Rugs.", + "Spal.", + "Lapkr.", + "Gruod." + ], "fullDate": "y 'm'. MMMM d 'd'., EEEE", "longDate": "y 'm'. MMMM d 'd'.", "medium": "y MMM d HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Lt", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "lt-lt", "pluralCat": function (n) { if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_lt.js b/lib/angular/i18n/angular-locale_lt.js index 3393559..fd75264 100755 --- a/lib/angular/i18n/angular-locale_lt.js +++ b/lib/angular/i18n/angular-locale_lt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "priešpiet", - "1": "popiet" - }, - "DAY": { - "0": "sekmadienis", - "1": "pirmadienis", - "2": "antradienis", - "3": "trečiadienis", - "4": "ketvirtadienis", - "5": "penktadienis", - "6": "šeštadienis" - }, - "MONTH": { - "0": "sausio", - "1": "vasaris", - "2": "kovas", - "3": "balandis", - "4": "gegužė", - "5": "birželis", - "6": "liepa", - "7": "rugpjūtis", - "8": "rugsėjis", - "9": "spalis", - "10": "lapkritis", - "11": "gruodis" - }, - "SHORTDAY": { - "0": "Sk", - "1": "Pr", - "2": "An", - "3": "Tr", - "4": "Kt", - "5": "Pn", - "6": "Št" - }, - "SHORTMONTH": { - "0": "Saus.", - "1": "Vas", - "2": "Kov.", - "3": "Bal.", - "4": "Geg.", - "5": "Bir.", - "6": "Liep.", - "7": "Rugp.", - "8": "Rugs.", - "9": "Spal.", - "10": "Lapkr.", - "11": "Gruod." - }, + "AMPMS": [ + "prie\u0161piet", + "popiet" + ], + "DAY": [ + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis" + ], + "MONTH": [ + "sausio", + "vasaris", + "kovas", + "balandis", + "gegu\u017e\u0117", + "bir\u017eelis", + "liepa", + "rugpj\u016btis", + "rugs\u0117jis", + "spalis", + "lapkritis", + "gruodis" + ], + "SHORTDAY": [ + "Sk", + "Pr", + "An", + "Tr", + "Kt", + "Pn", + "\u0160t" + ], + "SHORTMONTH": [ + "Saus.", + "Vas", + "Kov.", + "Bal.", + "Geg.", + "Bir.", + "Liep.", + "Rugp.", + "Rugs.", + "Spal.", + "Lapkr.", + "Gruod." + ], "fullDate": "y 'm'. MMMM d 'd'., EEEE", "longDate": "y 'm'. MMMM d 'd'.", "medium": "y MMM d HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Lt", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "lt", "pluralCat": function (n) { if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_lv-lv.js b/lib/angular/i18n/angular-locale_lv-lv.js index 7bb668d..4808617 100755 --- a/lib/angular/i18n/angular-locale_lv-lv.js +++ b/lib/angular/i18n/angular-locale_lv-lv.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "priekšpusdienā", - "1": "pēcpusdienā" - }, - "DAY": { - "0": "svētdiena", - "1": "pirmdiena", - "2": "otrdiena", - "3": "trešdiena", - "4": "ceturtdiena", - "5": "piektdiena", - "6": "sestdiena" - }, - "MONTH": { - "0": "janvāris", - "1": "februāris", - "2": "marts", - "3": "aprīlis", - "4": "maijs", - "5": "jūnijs", - "6": "jūlijs", - "7": "augusts", - "8": "septembris", - "9": "oktobris", - "10": "novembris", - "11": "decembris" - }, - "SHORTDAY": { - "0": "Sv", - "1": "Pr", - "2": "Ot", - "3": "Tr", - "4": "Ce", - "5": "Pk", - "6": "Se" - }, - "SHORTMONTH": { - "0": "janv.", - "1": "febr.", - "2": "marts", - "3": "apr.", - "4": "maijs", - "5": "jūn.", - "6": "jūl.", - "7": "aug.", - "8": "sept.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101" + ], + "DAY": [ + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + "MONTH": [ + "janv\u0101ris", + "febru\u0101ris", + "marts", + "apr\u012blis", + "maijs", + "j\u016bnijs", + "j\u016blijs", + "augusts", + "septembris", + "oktobris", + "novembris", + "decembris" + ], + "SHORTDAY": [ + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se" + ], + "SHORTMONTH": [ + "janv.", + "febr.", + "marts", + "apr.", + "maijs", + "j\u016bn.", + "j\u016bl.", + "aug.", + "sept.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE, y. 'gada' d. MMMM", "longDate": "y. 'gada' d. MMMM", "medium": "y. 'gada' d. MMM HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Ls", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "lv-lv", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_lv.js b/lib/angular/i18n/angular-locale_lv.js index 8e5e6ed..45bdcc6 100755 --- a/lib/angular/i18n/angular-locale_lv.js +++ b/lib/angular/i18n/angular-locale_lv.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "priekšpusdienā", - "1": "pēcpusdienā" - }, - "DAY": { - "0": "svētdiena", - "1": "pirmdiena", - "2": "otrdiena", - "3": "trešdiena", - "4": "ceturtdiena", - "5": "piektdiena", - "6": "sestdiena" - }, - "MONTH": { - "0": "janvāris", - "1": "februāris", - "2": "marts", - "3": "aprīlis", - "4": "maijs", - "5": "jūnijs", - "6": "jūlijs", - "7": "augusts", - "8": "septembris", - "9": "oktobris", - "10": "novembris", - "11": "decembris" - }, - "SHORTDAY": { - "0": "Sv", - "1": "Pr", - "2": "Ot", - "3": "Tr", - "4": "Ce", - "5": "Pk", - "6": "Se" - }, - "SHORTMONTH": { - "0": "janv.", - "1": "febr.", - "2": "marts", - "3": "apr.", - "4": "maijs", - "5": "jūn.", - "6": "jūl.", - "7": "aug.", - "8": "sept.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101" + ], + "DAY": [ + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + "MONTH": [ + "janv\u0101ris", + "febru\u0101ris", + "marts", + "apr\u012blis", + "maijs", + "j\u016bnijs", + "j\u016blijs", + "augusts", + "septembris", + "oktobris", + "novembris", + "decembris" + ], + "SHORTDAY": [ + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se" + ], + "SHORTMONTH": [ + "janv.", + "febr.", + "marts", + "apr.", + "maijs", + "j\u016bn.", + "j\u016bl.", + "aug.", + "sept.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE, y. 'gada' d. MMMM", "longDate": "y. 'gada' d. MMMM", "medium": "y. 'gada' d. MMM HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Ls", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "lv", "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ml-in.js b/lib/angular/i18n/angular-locale_ml-in.js index fb1db64..044005c 100755 --- a/lib/angular/i18n/angular-locale_ml-in.js +++ b/lib/angular/i18n/angular-locale_ml-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ഞായറാഴ്ച", - "1": "തിങ്കളാഴ്ച", - "2": "ചൊവ്വാഴ്ച", - "3": "ബുധനാഴ്ച", - "4": "വ്യാഴാഴ്ച", - "5": "വെള്ളിയാഴ്ച", - "6": "ശനിയാഴ്ച" - }, - "MONTH": { - "0": "ജനുവരി", - "1": "ഫെബ്രുവരി", - "2": "മാര്‍ച്ച്", - "3": "ഏപ്രില്‍", - "4": "മേയ്", - "5": "ജൂണ്‍", - "6": "ജൂലൈ", - "7": "ആഗസ്റ്റ്", - "8": "സെപ്റ്റംബര്‍", - "9": "ഒക്ടോബര്‍", - "10": "നവംബര്‍", - "11": "ഡിസംബര്‍" - }, - "SHORTDAY": { - "0": "ഞായര്‍", - "1": "തിങ്കള്‍", - "2": "ചൊവ്വ", - "3": "ബുധന്‍", - "4": "വ്യാഴം", - "5": "വെള്ളി", - "6": "ശനി" - }, - "SHORTMONTH": { - "0": "ജനു", - "1": "ഫെബ്രു", - "2": "മാര്‍", - "3": "ഏപ്രി", - "4": "മേയ്", - "5": "ജൂണ്‍", - "6": "ജൂലൈ", - "7": "ഓഗ", - "8": "സെപ്റ്റം", - "9": "ഒക്ടോ", - "10": "നവം", - "11": "ഡിസം" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a" + ], + "MONTH": [ + "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d4d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d", + "\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d" + ], + "SHORTDAY": [ + "\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", + "\u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", + "\u0d36\u0d28\u0d3f" + ], + "SHORTMONTH": [ + "\u0d1c\u0d28\u0d41", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d13\u0d17", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", + "\u0d28\u0d35\u0d02", + "\u0d21\u0d3f\u0d38\u0d02" + ], "fullDate": "y, MMMM d, EEEE", "longDate": "y, MMMM d", "medium": "y, MMM d h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": "\u00A4", + "negSuf": "\u00a4", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "ml-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ml.js b/lib/angular/i18n/angular-locale_ml.js index 00b63ba..2007448 100755 --- a/lib/angular/i18n/angular-locale_ml.js +++ b/lib/angular/i18n/angular-locale_ml.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ഞായറാഴ്ച", - "1": "തിങ്കളാഴ്ച", - "2": "ചൊവ്വാഴ്ച", - "3": "ബുധനാഴ്ച", - "4": "വ്യാഴാഴ്ച", - "5": "വെള്ളിയാഴ്ച", - "6": "ശനിയാഴ്ച" - }, - "MONTH": { - "0": "ജനുവരി", - "1": "ഫെബ്രുവരി", - "2": "മാര്‍ച്ച്", - "3": "ഏപ്രില്‍", - "4": "മേയ്", - "5": "ജൂണ്‍", - "6": "ജൂലൈ", - "7": "ആഗസ്റ്റ്", - "8": "സെപ്റ്റംബര്‍", - "9": "ഒക്ടോബര്‍", - "10": "നവംബര്‍", - "11": "ഡിസംബര്‍" - }, - "SHORTDAY": { - "0": "ഞായര്‍", - "1": "തിങ്കള്‍", - "2": "ചൊവ്വ", - "3": "ബുധന്‍", - "4": "വ്യാഴം", - "5": "വെള്ളി", - "6": "ശനി" - }, - "SHORTMONTH": { - "0": "ജനു", - "1": "ഫെബ്രു", - "2": "മാര്‍", - "3": "ഏപ്രി", - "4": "മേയ്", - "5": "ജൂണ്‍", - "6": "ജൂലൈ", - "7": "ഓഗ", - "8": "സെപ്റ്റം", - "9": "ഒക്ടോ", - "10": "നവം", - "11": "ഡിസം" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a" + ], + "MONTH": [ + "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d4d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d", + "\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d" + ], + "SHORTDAY": [ + "\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", + "\u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", + "\u0d36\u0d28\u0d3f" + ], + "SHORTMONTH": [ + "\u0d1c\u0d28\u0d41", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d13\u0d17", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", + "\u0d28\u0d35\u0d02", + "\u0d21\u0d3f\u0d38\u0d02" + ], "fullDate": "y, MMMM d, EEEE", "longDate": "y, MMMM d", "medium": "y, MMM d h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": "\u00A4", + "negSuf": "\u00a4", "posPre": "", - "posSuf": "\u00A4" + "posSuf": "\u00a4" } - } + ] }, "id": "ml", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_mr-in.js b/lib/angular/i18n/angular-locale_mr-in.js index 704a39a..f08286e 100755 --- a/lib/angular/i18n/angular-locale_mr-in.js +++ b/lib/angular/i18n/angular-locale_mr-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "रविवार", - "1": "सोमवार", - "2": "मंगळवार", - "3": "बुधवार", - "4": "गुरुवार", - "5": "शुक्रवार", - "6": "शनिवार" - }, - "MONTH": { - "0": "जानेवारी", - "1": "फेब्रुवारी", - "2": "मार्च", - "3": "एप्रिल", - "4": "मे", - "5": "जून", - "6": "जुलै", - "7": "ऑगस्ट", - "8": "सप्टेंबर", - "9": "ऑक्टोबर", - "10": "नोव्हेंबर", - "11": "डिसेंबर" - }, - "SHORTDAY": { - "0": "रवि", - "1": "सोम", - "2": "मंगळ", - "3": "बुध", - "4": "गुरु", - "5": "शुक्र", - "6": "शनि" - }, - "SHORTMONTH": { - "0": "जाने", - "1": "फेब्रु", - "2": "मार्च", - "3": "एप्रि", - "4": "मे", - "5": "जून", - "6": "जुलै", - "7": "ऑग", - "8": "सेप्टें", - "9": "ऑक्टोबर", - "10": "नोव्हें", - "11": "डिसें" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917\u0938\u094d\u091f", + "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947", + "\u092b\u0947\u092c\u094d\u0930\u0941", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", + "\u0921\u093f\u0938\u0947\u0902" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h-mm-ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h-mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "mr-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_mr.js b/lib/angular/i18n/angular-locale_mr.js index b446e4b..71d6f79 100755 --- a/lib/angular/i18n/angular-locale_mr.js +++ b/lib/angular/i18n/angular-locale_mr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "रविवार", - "1": "सोमवार", - "2": "मंगळवार", - "3": "बुधवार", - "4": "गुरुवार", - "5": "शुक्रवार", - "6": "शनिवार" - }, - "MONTH": { - "0": "जानेवारी", - "1": "फेब्रुवारी", - "2": "मार्च", - "3": "एप्रिल", - "4": "मे", - "5": "जून", - "6": "जुलै", - "7": "ऑगस्ट", - "8": "सप्टेंबर", - "9": "ऑक्टोबर", - "10": "नोव्हेंबर", - "11": "डिसेंबर" - }, - "SHORTDAY": { - "0": "रवि", - "1": "सोम", - "2": "मंगळ", - "3": "बुध", - "4": "गुरु", - "5": "शुक्र", - "6": "शनि" - }, - "SHORTMONTH": { - "0": "जाने", - "1": "फेब्रु", - "2": "मार्च", - "3": "एप्रि", - "4": "मे", - "5": "जून", - "6": "जुलै", - "7": "ऑग", - "8": "सेप्टें", - "9": "ऑक्टोबर", - "10": "नोव्हें", - "11": "डिसें" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917\u0938\u094d\u091f", + "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947", + "\u092b\u0947\u092c\u094d\u0930\u0941", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", + "\u0921\u093f\u0938\u0947\u0902" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h-mm-ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h-mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "mr", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ms-my.js b/lib/angular/i18n/angular-locale_ms-my.js index 5d7d65d..ade6036 100755 --- a/lib/angular/i18n/angular-locale_ms-my.js +++ b/lib/angular/i18n/angular-locale_ms-my.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "PG", - "1": "PTG" - }, - "DAY": { - "0": "Ahad", - "1": "Isnin", - "2": "Selasa", - "3": "Rabu", - "4": "Khamis", - "5": "Jumaat", - "6": "Sabtu" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Mac", - "3": "April", - "4": "Mei", - "5": "Jun", - "6": "Julai", - "7": "Ogos", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Disember" - }, - "SHORTDAY": { - "0": "Ahd", - "1": "Isn", - "2": "Sel", - "3": "Rab", - "4": "Kha", - "5": "Jum", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mac", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Ogos", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dis" - }, + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogos", + "Sep", + "Okt", + "Nov", + "Dis" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "dd/MM/yyyy h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "RM", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ms-my", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ms.js b/lib/angular/i18n/angular-locale_ms.js index e0ceb41..5287184 100755 --- a/lib/angular/i18n/angular-locale_ms.js +++ b/lib/angular/i18n/angular-locale_ms.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "PG", - "1": "PTG" - }, - "DAY": { - "0": "Ahad", - "1": "Isnin", - "2": "Selasa", - "3": "Rabu", - "4": "Khamis", - "5": "Jumaat", - "6": "Sabtu" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Mac", - "3": "April", - "4": "Mei", - "5": "Jun", - "6": "Julai", - "7": "Ogos", - "8": "September", - "9": "Oktober", - "10": "November", - "11": "Disember" - }, - "SHORTDAY": { - "0": "Ahd", - "1": "Isn", - "2": "Sel", - "3": "Rab", - "4": "Kha", - "5": "Jum", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mac", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Ogos", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dis" - }, + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogos", + "Sep", + "Okt", + "Nov", + "Dis" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "dd/MM/yyyy h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "RM", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ms", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_mt-mt.js b/lib/angular/i18n/angular-locale_mt-mt.js index df05e32..cc40048 100755 --- a/lib/angular/i18n/angular-locale_mt-mt.js +++ b/lib/angular/i18n/angular-locale_mt-mt.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "QN", - "1": "WN" - }, - "DAY": { - "0": "Il-Ħadd", - "1": "It-Tnejn", - "2": "It-Tlieta", - "3": "L-Erbgħa", - "4": "Il-Ħamis", - "5": "Il-Ġimgħa", - "6": "Is-Sibt" - }, - "MONTH": { - "0": "Jannar", - "1": "Frar", - "2": "Marzu", - "3": "April", - "4": "Mejju", - "5": "Ġunju", - "6": "Lulju", - "7": "Awwissu", - "8": "Settembru", - "9": "Ottubru", - "10": "Novembru", - "11": "Diċembru" - }, - "SHORTDAY": { - "0": "Ħad", - "1": "Tne", - "2": "Tli", - "3": "Erb", - "4": "Ħam", - "5": "Ġim", - "6": "Sib" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Fra", - "2": "Mar", - "3": "Apr", - "4": "Mej", - "5": "Ġun", - "6": "Lul", - "7": "Aww", - "8": "Set", - "9": "Ott", - "10": "Nov", - "11": "Diċ" - }, - "fullDate": "EEEE, d 'ta'’ MMMM y", - "longDate": "d 'ta'’ MMMM y", + "AMPMS": [ + "QN", + "WN" + ], + "DAY": [ + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt" + ], + "MONTH": [ + "Jannar", + "Frar", + "Marzu", + "April", + "Mejju", + "\u0120unju", + "Lulju", + "Awwissu", + "Settembru", + "Ottubru", + "Novembru", + "Di\u010bembru" + ], + "SHORTDAY": [ + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib" + ], + "SHORTMONTH": [ + "Jan", + "Fra", + "Mar", + "Apr", + "Mej", + "\u0120un", + "Lul", + "Aww", + "Set", + "Ott", + "Nov", + "Di\u010b" + ], + "fullDate": "EEEE, d 'ta'\u2019 MMMM y", + "longDate": "d 'ta'\u2019 MMMM y", "medium": "dd MMM y HH:mm:ss", "mediumDate": "dd MMM y", "mediumTime": "HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "mt-mt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n == (n | 0) && n % 100 >= 2 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 19) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_mt.js b/lib/angular/i18n/angular-locale_mt.js index 56906a2..9ba583e 100755 --- a/lib/angular/i18n/angular-locale_mt.js +++ b/lib/angular/i18n/angular-locale_mt.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "QN", - "1": "WN" - }, - "DAY": { - "0": "Il-Ħadd", - "1": "It-Tnejn", - "2": "It-Tlieta", - "3": "L-Erbgħa", - "4": "Il-Ħamis", - "5": "Il-Ġimgħa", - "6": "Is-Sibt" - }, - "MONTH": { - "0": "Jannar", - "1": "Frar", - "2": "Marzu", - "3": "April", - "4": "Mejju", - "5": "Ġunju", - "6": "Lulju", - "7": "Awwissu", - "8": "Settembru", - "9": "Ottubru", - "10": "Novembru", - "11": "Diċembru" - }, - "SHORTDAY": { - "0": "Ħad", - "1": "Tne", - "2": "Tli", - "3": "Erb", - "4": "Ħam", - "5": "Ġim", - "6": "Sib" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Fra", - "2": "Mar", - "3": "Apr", - "4": "Mej", - "5": "Ġun", - "6": "Lul", - "7": "Aww", - "8": "Set", - "9": "Ott", - "10": "Nov", - "11": "Diċ" - }, - "fullDate": "EEEE, d 'ta'’ MMMM y", - "longDate": "d 'ta'’ MMMM y", + "AMPMS": [ + "QN", + "WN" + ], + "DAY": [ + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt" + ], + "MONTH": [ + "Jannar", + "Frar", + "Marzu", + "April", + "Mejju", + "\u0120unju", + "Lulju", + "Awwissu", + "Settembru", + "Ottubru", + "Novembru", + "Di\u010bembru" + ], + "SHORTDAY": [ + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib" + ], + "SHORTMONTH": [ + "Jan", + "Fra", + "Mar", + "Apr", + "Mej", + "\u0120un", + "Lul", + "Aww", + "Set", + "Ott", + "Nov", + "Di\u010b" + ], + "fullDate": "EEEE, d 'ta'\u2019 MMMM y", + "longDate": "d 'ta'\u2019 MMMM y", "medium": "dd MMM y HH:mm:ss", "mediumDate": "dd MMM y", "mediumTime": "HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "mt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n == (n | 0) && n % 100 >= 2 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 19) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_nl-cw.js b/lib/angular/i18n/angular-locale_nl-cw.js index 77a0b3d..f98fcf5 100755 --- a/lib/angular/i18n/angular-locale_nl-cw.js +++ b/lib/angular/i18n/angular-locale_nl-cw.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "zondag", - "1": "maandag", - "2": "dinsdag", - "3": "woensdag", - "4": "donderdag", - "5": "vrijdag", - "6": "zaterdag" - }, - "MONTH": { - "0": "januari", - "1": "februari", - "2": "maart", - "3": "april", - "4": "mei", - "5": "juni", - "6": "juli", - "7": "augustus", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "zo", - "1": "ma", - "2": "di", - "3": "wo", - "4": "do", - "5": "vr", - "6": "za" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mrt.", - "3": "apr.", - "4": "mei", - "5": "jun.", - "6": "jul.", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "nl-cw", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_nl-nl.js b/lib/angular/i18n/angular-locale_nl-nl.js index e49d4e3..f24c149 100755 --- a/lib/angular/i18n/angular-locale_nl-nl.js +++ b/lib/angular/i18n/angular-locale_nl-nl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "zondag", - "1": "maandag", - "2": "dinsdag", - "3": "woensdag", - "4": "donderdag", - "5": "vrijdag", - "6": "zaterdag" - }, - "MONTH": { - "0": "januari", - "1": "februari", - "2": "maart", - "3": "april", - "4": "mei", - "5": "juni", - "6": "juli", - "7": "augustus", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "zo", - "1": "ma", - "2": "di", - "3": "wo", - "4": "do", - "5": "vr", - "6": "za" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mrt.", - "3": "apr.", - "4": "mei", - "5": "jun.", - "6": "jul.", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "nl-nl", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_nl-sx.js b/lib/angular/i18n/angular-locale_nl-sx.js index b290a73..616653c 100755 --- a/lib/angular/i18n/angular-locale_nl-sx.js +++ b/lib/angular/i18n/angular-locale_nl-sx.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "zondag", - "1": "maandag", - "2": "dinsdag", - "3": "woensdag", - "4": "donderdag", - "5": "vrijdag", - "6": "zaterdag" - }, - "MONTH": { - "0": "januari", - "1": "februari", - "2": "maart", - "3": "april", - "4": "mei", - "5": "juni", - "6": "juli", - "7": "augustus", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "zo", - "1": "ma", - "2": "di", - "3": "wo", - "4": "do", - "5": "vr", - "6": "za" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mrt.", - "3": "apr.", - "4": "mei", - "5": "jun.", - "6": "jul.", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "nl-sx", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_nl.js b/lib/angular/i18n/angular-locale_nl.js index a5fa2d6..e5cbbd1 100755 --- a/lib/angular/i18n/angular-locale_nl.js +++ b/lib/angular/i18n/angular-locale_nl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "zondag", - "1": "maandag", - "2": "dinsdag", - "3": "woensdag", - "4": "donderdag", - "5": "vrijdag", - "6": "zaterdag" - }, - "MONTH": { - "0": "januari", - "1": "februari", - "2": "maart", - "3": "april", - "4": "mei", - "5": "juni", - "6": "juli", - "7": "augustus", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "zo", - "1": "ma", - "2": "di", - "3": "wo", - "4": "do", - "5": "vr", - "6": "za" - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mrt.", - "3": "apr.", - "4": "mei", - "5": "jun.", - "6": "jul.", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 ", + "negPre": "\u00a4\u00a0", "negSuf": "-", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "nl", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_no.js b/lib/angular/i18n/angular-locale_no.js index f2deff3..07e3a79 100755 --- a/lib/angular/i18n/angular-locale_no.js +++ b/lib/angular/i18n/angular-locale_no.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "søndag", - "1": "mandag", - "2": "tirsdag", - "3": "onsdag", - "4": "torsdag", - "5": "fredag", - "6": "lørdag" - }, - "MONTH": { - "0": "januar", - "1": "februar", - "2": "mars", - "3": "april", - "4": "mai", - "5": "juni", - "6": "juli", - "7": "august", - "8": "september", - "9": "oktober", - "10": "november", - "11": "desember" - }, - "SHORTDAY": { - "0": "søn.", - "1": "man.", - "2": "tir.", - "3": "ons.", - "4": "tor.", - "5": "fre.", - "6": "lør." - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mars", - "3": "apr.", - "4": "mai", - "5": "juni", - "6": "juli", - "7": "aug.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "des." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "mai", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], "fullDate": "EEEE d. MMMM y", "longDate": "d. MMMM y", "medium": "d. MMM y HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "no", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_or-in.js b/lib/angular/i18n/angular-locale_or-in.js index 3093350..6332a2f 100755 --- a/lib/angular/i18n/angular-locale_or-in.js +++ b/lib/angular/i18n/angular-locale_or-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ରବିବାର", - "1": "ସୋମବାର", - "2": "ମଙ୍ଗଳବାର", - "3": "ବୁଧବାର", - "4": "ଗୁରୁବାର", - "5": "ଶୁକ୍ରବାର", - "6": "ଶନିବାର" - }, - "MONTH": { - "0": "ଜାନୁଆରୀ", - "1": "ଫେବ୍ରୁୟାରୀ", - "2": "ମାର୍ଚ୍ଚ", - "3": "ଅପ୍ରେଲ", - "4": "ମେ", - "5": "ଜୁନ", - "6": "ଜୁଲାଇ", - "7": "ଅଗଷ୍ଟ", - "8": "ସେପ୍ଟେମ୍ବର", - "9": "ଅକ୍ଟୋବର", - "10": "ନଭେମ୍ବର", - "11": "ଡିସେମ୍ବର" - }, - "SHORTDAY": { - "0": "ରବି", - "1": "ସୋମ", - "2": "ମଙ୍ଗଳ", - "3": "ବୁଧ", - "4": "ଗୁରୁ", - "5": "ଶୁକ୍ର", - "6": "ଶନି" - }, - "SHORTMONTH": { - "0": "ଜାନୁଆରୀ", - "1": "ଫେବ୍ରୁୟାରୀ", - "2": "ମାର୍ଚ୍ଚ", - "3": "ଅପ୍ରେଲ", - "4": "ମେ", - "5": "ଜୁନ", - "6": "ଜୁଲାଇ", - "7": "ଅଗଷ୍ଟ", - "8": "ସେପ୍ଟେମ୍ବର", - "9": "ଅକ୍ଟୋବର", - "10": "ନଭେମ୍ବର", - "11": "ଡିସେମ୍ବର" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", + "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", + "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", + "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", + "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", + "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30" + ], + "MONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "SHORTDAY": [ + "\u0b30\u0b2c\u0b3f", + "\u0b38\u0b4b\u0b2e", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33", + "\u0b2c\u0b41\u0b27", + "\u0b17\u0b41\u0b30\u0b41", + "\u0b36\u0b41\u0b15\u0b4d\u0b30", + "\u0b36\u0b28\u0b3f" + ], + "SHORTMONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "or-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_or.js b/lib/angular/i18n/angular-locale_or.js index fdf822e..aab4988 100755 --- a/lib/angular/i18n/angular-locale_or.js +++ b/lib/angular/i18n/angular-locale_or.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ରବିବାର", - "1": "ସୋମବାର", - "2": "ମଙ୍ଗଳବାର", - "3": "ବୁଧବାର", - "4": "ଗୁରୁବାର", - "5": "ଶୁକ୍ରବାର", - "6": "ଶନିବାର" - }, - "MONTH": { - "0": "ଜାନୁଆରୀ", - "1": "ଫେବ୍ରୁୟାରୀ", - "2": "ମାର୍ଚ୍ଚ", - "3": "ଅପ୍ରେଲ", - "4": "ମେ", - "5": "ଜୁନ", - "6": "ଜୁଲାଇ", - "7": "ଅଗଷ୍ଟ", - "8": "ସେପ୍ଟେମ୍ବର", - "9": "ଅକ୍ଟୋବର", - "10": "ନଭେମ୍ବର", - "11": "ଡିସେମ୍ବର" - }, - "SHORTDAY": { - "0": "ରବି", - "1": "ସୋମ", - "2": "ମଙ୍ଗଳ", - "3": "ବୁଧ", - "4": "ଗୁରୁ", - "5": "ଶୁକ୍ର", - "6": "ଶନି" - }, - "SHORTMONTH": { - "0": "ଜାନୁଆରୀ", - "1": "ଫେବ୍ରୁୟାରୀ", - "2": "ମାର୍ଚ୍ଚ", - "3": "ଅପ୍ରେଲ", - "4": "ମେ", - "5": "ଜୁନ", - "6": "ଜୁଲାଇ", - "7": "ଅଗଷ୍ଟ", - "8": "ସେପ୍ଟେମ୍ବର", - "9": "ଅକ୍ଟୋବର", - "10": "ନଭେମ୍ବର", - "11": "ଡିସେମ୍ବର" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", + "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", + "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", + "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", + "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", + "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30" + ], + "MONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "SHORTDAY": [ + "\u0b30\u0b2c\u0b3f", + "\u0b38\u0b4b\u0b2e", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33", + "\u0b2c\u0b41\u0b27", + "\u0b17\u0b41\u0b30\u0b41", + "\u0b36\u0b41\u0b15\u0b4d\u0b30", + "\u0b36\u0b28\u0b3f" + ], + "SHORTMONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "or", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_pl-pl.js b/lib/angular/i18n/angular-locale_pl-pl.js index e7da040..5b2078a 100755 --- a/lib/angular/i18n/angular-locale_pl-pl.js +++ b/lib/angular/i18n/angular-locale_pl-pl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "niedziela", - "1": "poniedziałek", - "2": "wtorek", - "3": "środa", - "4": "czwartek", - "5": "piątek", - "6": "sobota" - }, - "MONTH": { - "0": "stycznia", - "1": "lutego", - "2": "marca", - "3": "kwietnia", - "4": "maja", - "5": "czerwca", - "6": "lipca", - "7": "sierpnia", - "8": "września", - "9": "października", - "10": "listopada", - "11": "grudnia" - }, - "SHORTDAY": { - "0": "niedz.", - "1": "pon.", - "2": "wt.", - "3": "śr.", - "4": "czw.", - "5": "pt.", - "6": "sob." - }, - "SHORTMONTH": { - "0": "sty", - "1": "lut", - "2": "mar", - "3": "kwi", - "4": "maj", - "5": "cze", - "6": "lip", - "7": "sie", - "8": "wrz", - "9": "paź", - "10": "lis", - "11": "gru" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota" + ], + "MONTH": [ + "stycznia", + "lutego", + "marca", + "kwietnia", + "maja", + "czerwca", + "lipca", + "sierpnia", + "wrze\u015bnia", + "pa\u017adziernika", + "listopada", + "grudnia" + ], + "SHORTDAY": [ + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob." + ], + "SHORTMONTH": [ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "pa\u017a", + "lis", + "gru" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "zł", + "CURRENCY_SYM": "z\u0142", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "pl-pl", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n != 1 && (n % 10 == 0 || n % 10 == 1) || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 12 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_pl.js b/lib/angular/i18n/angular-locale_pl.js index 9339707..28859ea 100755 --- a/lib/angular/i18n/angular-locale_pl.js +++ b/lib/angular/i18n/angular-locale_pl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "niedziela", - "1": "poniedziałek", - "2": "wtorek", - "3": "środa", - "4": "czwartek", - "5": "piątek", - "6": "sobota" - }, - "MONTH": { - "0": "stycznia", - "1": "lutego", - "2": "marca", - "3": "kwietnia", - "4": "maja", - "5": "czerwca", - "6": "lipca", - "7": "sierpnia", - "8": "września", - "9": "października", - "10": "listopada", - "11": "grudnia" - }, - "SHORTDAY": { - "0": "niedz.", - "1": "pon.", - "2": "wt.", - "3": "śr.", - "4": "czw.", - "5": "pt.", - "6": "sob." - }, - "SHORTMONTH": { - "0": "sty", - "1": "lut", - "2": "mar", - "3": "kwi", - "4": "maj", - "5": "cze", - "6": "lip", - "7": "sie", - "8": "wrz", - "9": "paź", - "10": "lis", - "11": "gru" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota" + ], + "MONTH": [ + "stycznia", + "lutego", + "marca", + "kwietnia", + "maja", + "czerwca", + "lipca", + "sierpnia", + "wrze\u015bnia", + "pa\u017adziernika", + "listopada", + "grudnia" + ], + "SHORTDAY": [ + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob." + ], + "SHORTMONTH": [ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "pa\u017a", + "lis", + "gru" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "zł", + "CURRENCY_SYM": "z\u0142", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "pl", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n != 1 && (n % 10 == 0 || n % 10 == 1) || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 12 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_pt-br.js b/lib/angular/i18n/angular-locale_pt-br.js index cb06ad2..d0e1a9e 100755 --- a/lib/angular/i18n/angular-locale_pt-br.js +++ b/lib/angular/i18n/angular-locale_pt-br.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "domingo", - "1": "segunda-feira", - "2": "terça-feira", - "3": "quarta-feira", - "4": "quinta-feira", - "5": "sexta-feira", - "6": "sábado" - }, - "MONTH": { - "0": "janeiro", - "1": "fevereiro", - "2": "março", - "3": "abril", - "4": "maio", - "5": "junho", - "6": "julho", - "7": "agosto", - "8": "setembro", - "9": "outubro", - "10": "novembro", - "11": "dezembro" - }, - "SHORTDAY": { - "0": "dom", - "1": "seg", - "2": "ter", - "3": "qua", - "4": "qui", - "5": "sex", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "jan", - "1": "fev", - "2": "mar", - "3": "abr", - "4": "mai", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "set", - "9": "out", - "10": "nov", - "11": "dez" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "R$", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "pt-br", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_pt-pt.js b/lib/angular/i18n/angular-locale_pt-pt.js index c8f8b42..a072653 100755 --- a/lib/angular/i18n/angular-locale_pt-pt.js +++ b/lib/angular/i18n/angular-locale_pt-pt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "a.m.", - "1": "p.m." - }, - "DAY": { - "0": "Domingo", - "1": "Segunda-feira", - "2": "Terça-feira", - "3": "Quarta-feira", - "4": "Quinta-feira", - "5": "Sexta-feira", - "6": "Sábado" - }, - "MONTH": { - "0": "Janeiro", - "1": "Fevereiro", - "2": "Março", - "3": "Abril", - "4": "Maio", - "5": "Junho", - "6": "Julho", - "7": "Agosto", - "8": "Setembro", - "9": "Outubro", - "10": "Novembro", - "11": "Dezembro" - }, - "SHORTDAY": { - "0": "dom", - "1": "seg", - "2": "ter", - "3": "qua", - "4": "qui", - "5": "sex", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Fev", - "2": "Mar", - "3": "Abr", - "4": "Mai", - "5": "Jun", - "6": "Jul", - "7": "Ago", - "8": "Set", - "9": "Out", - "10": "Nov", - "11": "Dez" - }, + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Segunda-feira", + "Ter\u00e7a-feira", + "Quarta-feira", + "Quinta-feira", + "Sexta-feira", + "S\u00e1bado" + ], + "MONTH": [ + "Janeiro", + "Fevereiro", + "Mar\u00e7o", + "Abril", + "Maio", + "Junho", + "Julho", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "Jan", + "Fev", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Out", + "Nov", + "Dez" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "pt-pt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_pt.js b/lib/angular/i18n/angular-locale_pt.js index e09850d..5a6bbd5 100755 --- a/lib/angular/i18n/angular-locale_pt.js +++ b/lib/angular/i18n/angular-locale_pt.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "domingo", - "1": "segunda-feira", - "2": "terça-feira", - "3": "quarta-feira", - "4": "quinta-feira", - "5": "sexta-feira", - "6": "sábado" - }, - "MONTH": { - "0": "janeiro", - "1": "fevereiro", - "2": "março", - "3": "abril", - "4": "maio", - "5": "junho", - "6": "julho", - "7": "agosto", - "8": "setembro", - "9": "outubro", - "10": "novembro", - "11": "dezembro" - }, - "SHORTDAY": { - "0": "dom", - "1": "seg", - "2": "ter", - "3": "qua", - "4": "qui", - "5": "sex", - "6": "sáb" - }, - "SHORTMONTH": { - "0": "jan", - "1": "fev", - "2": "mar", - "3": "abr", - "4": "mai", - "5": "jun", - "6": "jul", - "7": "ago", - "8": "set", - "9": "out", - "10": "nov", - "11": "dez" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], "fullDate": "EEEE, d 'de' MMMM 'de' y", "longDate": "d 'de' MMMM 'de' y", "medium": "dd/MM/yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "R$", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "pt", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ro-ro.js b/lib/angular/i18n/angular-locale_ro-ro.js index 6bcace1..807f04f 100755 --- a/lib/angular/i18n/angular-locale_ro-ro.js +++ b/lib/angular/i18n/angular-locale_ro-ro.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "duminică", - "1": "luni", - "2": "marți", - "3": "miercuri", - "4": "joi", - "5": "vineri", - "6": "sâmbătă" - }, - "MONTH": { - "0": "ianuarie", - "1": "februarie", - "2": "martie", - "3": "aprilie", - "4": "mai", - "5": "iunie", - "6": "iulie", - "7": "august", - "8": "septembrie", - "9": "octombrie", - "10": "noiembrie", - "11": "decembrie" - }, - "SHORTDAY": { - "0": "Du", - "1": "Lu", - "2": "Ma", - "3": "Mi", - "4": "Jo", - "5": "Vi", - "6": "Sâ" - }, - "SHORTMONTH": { - "0": "ian.", - "1": "feb.", - "2": "mar.", - "3": "apr.", - "4": "mai", - "5": "iun.", - "6": "iul.", - "7": "aug.", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Du", + "Lu", + "Ma", + "Mi", + "Jo", + "Vi", + "S\u00e2" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "dec." + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "RON", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "ro-ro", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n != 1 && n == (n | 0) && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ro.js b/lib/angular/i18n/angular-locale_ro.js index 0f55307..2153d67 100755 --- a/lib/angular/i18n/angular-locale_ro.js +++ b/lib/angular/i18n/angular-locale_ro.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "duminică", - "1": "luni", - "2": "marți", - "3": "miercuri", - "4": "joi", - "5": "vineri", - "6": "sâmbătă" - }, - "MONTH": { - "0": "ianuarie", - "1": "februarie", - "2": "martie", - "3": "aprilie", - "4": "mai", - "5": "iunie", - "6": "iulie", - "7": "august", - "8": "septembrie", - "9": "octombrie", - "10": "noiembrie", - "11": "decembrie" - }, - "SHORTDAY": { - "0": "Du", - "1": "Lu", - "2": "Ma", - "3": "Mi", - "4": "Jo", - "5": "Vi", - "6": "Sâ" - }, - "SHORTMONTH": { - "0": "ian.", - "1": "feb.", - "2": "mar.", - "3": "apr.", - "4": "mai", - "5": "iun.", - "6": "iul.", - "7": "aug.", - "8": "sept.", - "9": "oct.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Du", + "Lu", + "Ma", + "Mi", + "Jo", + "Vi", + "S\u00e2" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "dec." + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "dd.MM.yyyy HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "RON", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "ro", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n != 1 && n == (n | 0) && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ru-ru.js b/lib/angular/i18n/angular-locale_ru-ru.js index f45195c..3a887f7 100755 --- a/lib/angular/i18n/angular-locale_ru-ru.js +++ b/lib/angular/i18n/angular-locale_ru-ru.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "до полудня", - "1": "после полудня" - }, - "DAY": { - "0": "воскресенье", - "1": "понедельник", - "2": "вторник", - "3": "среда", - "4": "четверг", - "5": "пятница", - "6": "суббота" - }, - "MONTH": { - "0": "января", - "1": "февраля", - "2": "марта", - "3": "апреля", - "4": "мая", - "5": "июня", - "6": "июля", - "7": "августа", - "8": "сентября", - "9": "октября", - "10": "ноября", - "11": "декабря" - }, - "SHORTDAY": { - "0": "вс", - "1": "пн", - "2": "вт", - "3": "ср", - "4": "чт", - "5": "пт", - "6": "сб" - }, - "SHORTMONTH": { - "0": "янв.", - "1": "февр.", - "2": "марта", - "3": "апр.", - "4": "мая", - "5": "июня", - "6": "июля", - "7": "авг.", - "8": "сент.", - "9": "окт.", - "10": "нояб.", - "11": "дек." - }, - "fullDate": "EEEE, d MMMM y 'г'.", - "longDate": "d MMMM y 'г'.", + "AMPMS": [ + "\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f", + "\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y\u00a0'\u0433'.", + "longDate": "d MMMM y\u00a0'\u0433'.", "medium": "dd.MM.yyyy H:mm:ss", "mediumDate": "dd.MM.yyyy", "mediumTime": "H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "руб.", + "CURRENCY_SYM": "\u0440\u0443\u0431.", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "ru-ru", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ru.js b/lib/angular/i18n/angular-locale_ru.js index 908817c..8f48e2d 100755 --- a/lib/angular/i18n/angular-locale_ru.js +++ b/lib/angular/i18n/angular-locale_ru.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "до полудня", - "1": "после полудня" - }, - "DAY": { - "0": "воскресенье", - "1": "понедельник", - "2": "вторник", - "3": "среда", - "4": "четверг", - "5": "пятница", - "6": "суббота" - }, - "MONTH": { - "0": "января", - "1": "февраля", - "2": "марта", - "3": "апреля", - "4": "мая", - "5": "июня", - "6": "июля", - "7": "августа", - "8": "сентября", - "9": "октября", - "10": "ноября", - "11": "декабря" - }, - "SHORTDAY": { - "0": "вс", - "1": "пн", - "2": "вт", - "3": "ср", - "4": "чт", - "5": "пт", - "6": "сб" - }, - "SHORTMONTH": { - "0": "янв.", - "1": "февр.", - "2": "марта", - "3": "апр.", - "4": "мая", - "5": "июня", - "6": "июля", - "7": "авг.", - "8": "сент.", - "9": "окт.", - "10": "нояб.", - "11": "дек." - }, - "fullDate": "EEEE, d MMMM y 'г'.", - "longDate": "d MMMM y 'г'.", + "AMPMS": [ + "\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f", + "\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y\u00a0'\u0433'.", + "longDate": "d MMMM y\u00a0'\u0433'.", "medium": "dd.MM.yyyy H:mm:ss", "mediumDate": "dd.MM.yyyy", "mediumTime": "H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "руб.", + "CURRENCY_SYM": "\u0440\u0443\u0431.", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "ru", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sk-sk.js b/lib/angular/i18n/angular-locale_sk-sk.js index c45b1e9..84cb8ee 100755 --- a/lib/angular/i18n/angular-locale_sk-sk.js +++ b/lib/angular/i18n/angular-locale_sk-sk.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "dopoludnia", - "1": "popoludní" - }, - "DAY": { - "0": "nedeľa", - "1": "pondelok", - "2": "utorok", - "3": "streda", - "4": "štvrtok", - "5": "piatok", - "6": "sobota" - }, - "MONTH": { - "0": "januára", - "1": "februára", - "2": "marca", - "3": "apríla", - "4": "mája", - "5": "júna", - "6": "júla", - "7": "augusta", - "8": "septembra", - "9": "októbra", - "10": "novembra", - "11": "decembra" - }, - "SHORTDAY": { - "0": "ne", - "1": "po", - "2": "ut", - "3": "st", - "4": "št", - "5": "pi", - "6": "so" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "máj", - "5": "jún", - "6": "júl", - "7": "aug", - "8": "sep", - "9": "okt", - "10": "nov", - "11": "dec" - }, + "AMPMS": [ + "dopoludnia", + "popoludn\u00ed" + ], + "DAY": [ + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota" + ], + "MONTH": [ + "janu\u00e1ra", + "febru\u00e1ra", + "marca", + "apr\u00edla", + "m\u00e1ja", + "j\u00fana", + "j\u00fala", + "augusta", + "septembra", + "okt\u00f3bra", + "novembra", + "decembra" + ], + "SHORTDAY": [ + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "m\u00e1j", + "j\u00fan", + "j\u00fal", + "aug", + "sep", + "okt", + "nov", + "dec" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "d.M.yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sk-sk", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sk.js b/lib/angular/i18n/angular-locale_sk.js index 5b9a326..53faf80 100755 --- a/lib/angular/i18n/angular-locale_sk.js +++ b/lib/angular/i18n/angular-locale_sk.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "dopoludnia", - "1": "popoludní" - }, - "DAY": { - "0": "nedeľa", - "1": "pondelok", - "2": "utorok", - "3": "streda", - "4": "štvrtok", - "5": "piatok", - "6": "sobota" - }, - "MONTH": { - "0": "januára", - "1": "februára", - "2": "marca", - "3": "apríla", - "4": "mája", - "5": "júna", - "6": "júla", - "7": "augusta", - "8": "septembra", - "9": "októbra", - "10": "novembra", - "11": "decembra" - }, - "SHORTDAY": { - "0": "ne", - "1": "po", - "2": "ut", - "3": "st", - "4": "št", - "5": "pi", - "6": "so" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "máj", - "5": "jún", - "6": "júl", - "7": "aug", - "8": "sep", - "9": "okt", - "10": "nov", - "11": "dec" - }, + "AMPMS": [ + "dopoludnia", + "popoludn\u00ed" + ], + "DAY": [ + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota" + ], + "MONTH": [ + "janu\u00e1ra", + "febru\u00e1ra", + "marca", + "apr\u00edla", + "m\u00e1ja", + "j\u00fana", + "j\u00fala", + "augusta", + "septembra", + "okt\u00f3bra", + "novembra", + "decembra" + ], + "SHORTDAY": [ + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "m\u00e1j", + "j\u00fan", + "j\u00fal", + "aug", + "sep", + "okt", + "nov", + "dec" + ], "fullDate": "EEEE, d. MMMM y", "longDate": "d. MMMM y", "medium": "d.M.yyyy H:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sk", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sl-si.js b/lib/angular/i18n/angular-locale_sl-si.js index a68a068..9cc5755 100755 --- a/lib/angular/i18n/angular-locale_sl-si.js +++ b/lib/angular/i18n/angular-locale_sl-si.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "dop.", - "1": "pop." - }, - "DAY": { - "0": "nedelja", - "1": "ponedeljek", - "2": "torek", - "3": "sreda", - "4": "četrtek", - "5": "petek", - "6": "sobota" - }, - "MONTH": { - "0": "januar", - "1": "februar", - "2": "marec", - "3": "april", - "4": "maj", - "5": "junij", - "6": "julij", - "7": "avgust", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "ned.", - "1": "pon.", - "2": "tor.", - "3": "sre.", - "4": "čet.", - "5": "pet.", - "6": "sob." - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mar.", - "3": "apr.", - "4": "maj", - "5": "jun.", - "6": "jul.", - "7": "avg.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "dop.", + "pop." + ], + "DAY": [ + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota" + ], + "MONTH": [ + "januar", + "februar", + "marec", + "april", + "maj", + "junij", + "julij", + "avgust", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "avg.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE, dd. MMMM y", "longDate": "dd. MMMM y", "medium": "d. MMM yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "sl-si", "pluralCat": function (n) { if (n % 100 == 1) { return PLURAL_CATEGORY.ONE; } if (n % 100 == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 == 3 || n % 100 == 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sl.js b/lib/angular/i18n/angular-locale_sl.js index 21f3763..ebe8df1 100755 --- a/lib/angular/i18n/angular-locale_sl.js +++ b/lib/angular/i18n/angular-locale_sl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "dop.", - "1": "pop." - }, - "DAY": { - "0": "nedelja", - "1": "ponedeljek", - "2": "torek", - "3": "sreda", - "4": "četrtek", - "5": "petek", - "6": "sobota" - }, - "MONTH": { - "0": "januar", - "1": "februar", - "2": "marec", - "3": "april", - "4": "maj", - "5": "junij", - "6": "julij", - "7": "avgust", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "ned.", - "1": "pon.", - "2": "tor.", - "3": "sre.", - "4": "čet.", - "5": "pet.", - "6": "sob." - }, - "SHORTMONTH": { - "0": "jan.", - "1": "feb.", - "2": "mar.", - "3": "apr.", - "4": "maj", - "5": "jun.", - "6": "jul.", - "7": "avg.", - "8": "sep.", - "9": "okt.", - "10": "nov.", - "11": "dec." - }, + "AMPMS": [ + "dop.", + "pop." + ], + "DAY": [ + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota" + ], + "MONTH": [ + "januar", + "februar", + "marec", + "april", + "maj", + "junij", + "julij", + "avgust", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "avg.", + "sep.", + "okt.", + "nov.", + "dec." + ], "fullDate": "EEEE, dd. MMMM y", "longDate": "dd. MMMM y", "medium": "d. MMM yyyy HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "€", + "CURRENCY_SYM": "\u20ac", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "sl", "pluralCat": function (n) { if (n % 100 == 1) { return PLURAL_CATEGORY.ONE; } if (n % 100 == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 == 3 || n % 100 == 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sq-al.js b/lib/angular/i18n/angular-locale_sq-al.js index a4668f0..fad9546 100755 --- a/lib/angular/i18n/angular-locale_sq-al.js +++ b/lib/angular/i18n/angular-locale_sq-al.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "PD", - "1": "MD" - }, - "DAY": { - "0": "e diel", - "1": "e hënë", - "2": "e martë", - "3": "e mërkurë", - "4": "e enjte", - "5": "e premte", - "6": "e shtunë" - }, - "MONTH": { - "0": "janar", - "1": "shkurt", - "2": "mars", - "3": "prill", - "4": "maj", - "5": "qershor", - "6": "korrik", - "7": "gusht", - "8": "shtator", - "9": "tetor", - "10": "nëntor", - "11": "dhjetor" - }, - "SHORTDAY": { - "0": "Die", - "1": "Hën", - "2": "Mar", - "3": "Mër", - "4": "Enj", - "5": "Pre", - "6": "Sht" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Shk", - "2": "Mar", - "3": "Pri", - "4": "Maj", - "5": "Qer", - "6": "Kor", - "7": "Gsh", - "8": "Sht", - "9": "Tet", - "10": "Nën", - "11": "Dhj" - }, + "AMPMS": [ + "PD", + "MD" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "Dhj" + ], "fullDate": "EEEE, dd MMMM y", "longDate": "dd MMMM y", "medium": "yyyy-MM-dd h.mm.ss.a", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Lek", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "sq-al", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sq.js b/lib/angular/i18n/angular-locale_sq.js index c0239bd..1bf529a 100755 --- a/lib/angular/i18n/angular-locale_sq.js +++ b/lib/angular/i18n/angular-locale_sq.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "PD", - "1": "MD" - }, - "DAY": { - "0": "e diel", - "1": "e hënë", - "2": "e martë", - "3": "e mërkurë", - "4": "e enjte", - "5": "e premte", - "6": "e shtunë" - }, - "MONTH": { - "0": "janar", - "1": "shkurt", - "2": "mars", - "3": "prill", - "4": "maj", - "5": "qershor", - "6": "korrik", - "7": "gusht", - "8": "shtator", - "9": "tetor", - "10": "nëntor", - "11": "dhjetor" - }, - "SHORTDAY": { - "0": "Die", - "1": "Hën", - "2": "Mar", - "3": "Mër", - "4": "Enj", - "5": "Pre", - "6": "Sht" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Shk", - "2": "Mar", - "3": "Pri", - "4": "Maj", - "5": "Qer", - "6": "Kor", - "7": "Gsh", - "8": "Sht", - "9": "Tet", - "10": "Nën", - "11": "Dhj" - }, + "AMPMS": [ + "PD", + "MD" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "Dhj" + ], "fullDate": "EEEE, dd MMMM y", "longDate": "dd MMMM y", "medium": "yyyy-MM-dd h.mm.ss.a", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "Lek", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "sq", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sr-cyrl-rs.js b/lib/angular/i18n/angular-locale_sr-cyrl-rs.js index 3be1386..5879f7d 100755 --- a/lib/angular/i18n/angular-locale_sr-cyrl-rs.js +++ b/lib/angular/i18n/angular-locale_sr-cyrl-rs.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "пре подне", - "1": "поподне" - }, - "DAY": { - "0": "недеља", - "1": "понедељак", - "2": "уторак", - "3": "среда", - "4": "четвртак", - "5": "петак", - "6": "субота" - }, - "MONTH": { - "0": "јануар", - "1": "фебруар", - "2": "март", - "3": "април", - "4": "мај", - "5": "јун", - "6": "јул", - "7": "август", - "8": "септембар", - "9": "октобар", - "10": "новембар", - "11": "децембар" - }, - "SHORTDAY": { - "0": "нед", - "1": "пон", - "2": "уто", - "3": "сре", - "4": "чет", - "5": "пет", - "6": "суб" - }, - "SHORTMONTH": { - "0": "јан", - "1": "феб", - "2": "мар", - "3": "апр", - "4": "мај", - "5": "јун", - "6": "јул", - "7": "авг", - "8": "сеп", - "9": "окт", - "10": "нов", - "11": "дец" - }, + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], "fullDate": "EEEE, dd. MMMM y.", "longDate": "dd. MMMM y.", "medium": "dd.MM.y. HH.mm.ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "din", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sr-cyrl-rs", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sr-latn-rs.js b/lib/angular/i18n/angular-locale_sr-latn-rs.js index 5aa1be8..af39666 100755 --- a/lib/angular/i18n/angular-locale_sr-latn-rs.js +++ b/lib/angular/i18n/angular-locale_sr-latn-rs.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "pre podne", - "1": "popodne" - }, - "DAY": { - "0": "nedelja", - "1": "ponedeljak", - "2": "utorak", - "3": "sreda", - "4": "četvrtak", - "5": "petak", - "6": "subota" - }, - "MONTH": { - "0": "januar", - "1": "februar", - "2": "mart", - "3": "april", - "4": "maj", - "5": "jun", - "6": "jul", - "7": "avgust", - "8": "septembar", - "9": "oktobar", - "10": "novembar", - "11": "decembar" - }, - "SHORTDAY": { - "0": "ned", - "1": "pon", - "2": "uto", - "3": "sre", - "4": "čet", - "5": "pet", - "6": "sub" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "maj", - "5": "jun", - "6": "jul", - "7": "avg", - "8": "sep", - "9": "okt", - "10": "nov", - "11": "dec" - }, + "AMPMS": [ + "pre podne", + "popodne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota" + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], "fullDate": "EEEE, dd. MMMM y.", "longDate": "dd. MMMM y.", "medium": "dd.MM.y. HH.mm.ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "din", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sr-latn-rs", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sr.js b/lib/angular/i18n/angular-locale_sr.js index ec0b100..7c0b613 100755 --- a/lib/angular/i18n/angular-locale_sr.js +++ b/lib/angular/i18n/angular-locale_sr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "пре подне", - "1": "поподне" - }, - "DAY": { - "0": "недеља", - "1": "понедељак", - "2": "уторак", - "3": "среда", - "4": "четвртак", - "5": "петак", - "6": "субота" - }, - "MONTH": { - "0": "јануар", - "1": "фебруар", - "2": "март", - "3": "април", - "4": "мај", - "5": "јун", - "6": "јул", - "7": "август", - "8": "септембар", - "9": "октобар", - "10": "новембар", - "11": "децембар" - }, - "SHORTDAY": { - "0": "нед", - "1": "пон", - "2": "уто", - "3": "сре", - "4": "чет", - "5": "пет", - "6": "суб" - }, - "SHORTMONTH": { - "0": "јан", - "1": "феб", - "2": "мар", - "3": "апр", - "4": "мај", - "5": "јун", - "6": "јул", - "7": "авг", - "8": "сеп", - "9": "окт", - "10": "нов", - "11": "дец" - }, + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], "fullDate": "EEEE, dd. MMMM y.", "longDate": "dd. MMMM y.", "medium": "dd.MM.y. HH.mm.ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "din", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sr", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sv-se.js b/lib/angular/i18n/angular-locale_sv-se.js index 62284bb..79f671c 100755 --- a/lib/angular/i18n/angular-locale_sv-se.js +++ b/lib/angular/i18n/angular-locale_sv-se.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "fm", - "1": "em" - }, - "DAY": { - "0": "söndag", - "1": "måndag", - "2": "tisdag", - "3": "onsdag", - "4": "torsdag", - "5": "fredag", - "6": "lördag" - }, - "MONTH": { - "0": "januari", - "1": "februari", - "2": "mars", - "3": "april", - "4": "maj", - "5": "juni", - "6": "juli", - "7": "augusti", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "sön", - "1": "mån", - "2": "tis", - "3": "ons", - "4": "tors", - "5": "fre", - "6": "lör" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "maj", - "5": "jun", - "6": "jul", - "7": "aug", - "8": "sep", - "9": "okt", - "10": "nov", - "11": "dec" - }, + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], "fullDate": "EEEE'en' 'den' d:'e' MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sv-se", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sv.js b/lib/angular/i18n/angular-locale_sv.js index 30edda8..64e590b 100755 --- a/lib/angular/i18n/angular-locale_sv.js +++ b/lib/angular/i18n/angular-locale_sv.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "fm", - "1": "em" - }, - "DAY": { - "0": "söndag", - "1": "måndag", - "2": "tisdag", - "3": "onsdag", - "4": "torsdag", - "5": "fredag", - "6": "lördag" - }, - "MONTH": { - "0": "januari", - "1": "februari", - "2": "mars", - "3": "april", - "4": "maj", - "5": "juni", - "6": "juli", - "7": "augusti", - "8": "september", - "9": "oktober", - "10": "november", - "11": "december" - }, - "SHORTDAY": { - "0": "sön", - "1": "mån", - "2": "tis", - "3": "ons", - "4": "tors", - "5": "fre", - "6": "lör" - }, - "SHORTMONTH": { - "0": "jan", - "1": "feb", - "2": "mar", - "3": "apr", - "4": "maj", - "5": "jun", - "6": "jul", - "7": "aug", - "8": "sep", - "9": "okt", - "10": "nov", - "11": "dec" - }, + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], "fullDate": "EEEE'en' 'den' d:'e' MMMM y", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -64,9 +64,9 @@ $provide.value("$locale", { "NUMBER_FORMATS": { "CURRENCY_SYM": "kr", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "sv", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sw-tz.js b/lib/angular/i18n/angular-locale_sw-tz.js index 32632d7..cd572b6 100755 --- a/lib/angular/i18n/angular-locale_sw-tz.js +++ b/lib/angular/i18n/angular-locale_sw-tz.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "asubuhi", - "1": "alasiri" - }, - "DAY": { - "0": "Jumapili", - "1": "Jumatatu", - "2": "Jumanne", - "3": "Jumatano", - "4": "Alhamisi", - "5": "Ijumaa", - "6": "Jumamosi" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Machi", - "3": "Aprili", - "4": "Mei", - "5": "Juni", - "6": "Julai", - "7": "Agosti", - "8": "Septemba", - "9": "Oktoba", - "10": "Novemba", - "11": "Desemba" - }, - "SHORTDAY": { - "0": "J2", - "1": "J3", - "2": "J4", - "3": "J5", - "4": "Alh", - "5": "Ij", - "6": "J1" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mac", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Ago", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "asubuhi", + "alasiri" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "J2", + "J3", + "J4", + "J5", + "Alh", + "Ij", + "J1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "TSh", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "sw-tz", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_sw.js b/lib/angular/i18n/angular-locale_sw.js index 090efce..72c3abf 100755 --- a/lib/angular/i18n/angular-locale_sw.js +++ b/lib/angular/i18n/angular-locale_sw.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "asubuhi", - "1": "alasiri" - }, - "DAY": { - "0": "Jumapili", - "1": "Jumatatu", - "2": "Jumanne", - "3": "Jumatano", - "4": "Alhamisi", - "5": "Ijumaa", - "6": "Jumamosi" - }, - "MONTH": { - "0": "Januari", - "1": "Februari", - "2": "Machi", - "3": "Aprili", - "4": "Mei", - "5": "Juni", - "6": "Julai", - "7": "Agosti", - "8": "Septemba", - "9": "Oktoba", - "10": "Novemba", - "11": "Desemba" - }, - "SHORTDAY": { - "0": "J2", - "1": "J3", - "2": "J4", - "3": "J5", - "4": "Alh", - "5": "Ij", - "6": "J1" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mac", - "3": "Apr", - "4": "Mei", - "5": "Jun", - "6": "Jul", - "7": "Ago", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Des" - }, + "AMPMS": [ + "asubuhi", + "alasiri" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "J2", + "J3", + "J4", + "J5", + "Alh", + "Ij", + "J1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], "fullDate": "EEEE, d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "TSh", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "sw", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ta-in.js b/lib/angular/i18n/angular-locale_ta-in.js index e6dc831..01df8c4 100755 --- a/lib/angular/i18n/angular-locale_ta-in.js +++ b/lib/angular/i18n/angular-locale_ta-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ஞாயிறு", - "1": "திங்கள்", - "2": "செவ்வாய்", - "3": "புதன்", - "4": "வியாழன்", - "5": "வெள்ளி", - "6": "சனி" - }, - "MONTH": { - "0": "ஜனவரி", - "1": "பிப்ரவரி", - "2": "மார்ச்", - "3": "ஏப்ரல்", - "4": "மே", - "5": "ஜூன்", - "6": "ஜூலை", - "7": "ஆகஸ்ட்", - "8": "செப்டம்பர்", - "9": "அக்டோபர்", - "10": "நவம்பர்", - "11": "டிசம்பர்" - }, - "SHORTDAY": { - "0": "ஞா", - "1": "தி", - "2": "செ", - "3": "பு", - "4": "வி", - "5": "வெ", - "6": "ச" - }, - "SHORTMONTH": { - "0": "ஜன.", - "1": "பிப்.", - "2": "மார்.", - "3": "ஏப்.", - "4": "மே", - "5": "ஜூன்", - "6": "ஜூலை", - "7": "ஆக.", - "8": "செப்.", - "9": "அக்.", - "10": "நவ.", - "11": "டிச." - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ta-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ta.js b/lib/angular/i18n/angular-locale_ta.js index 8ec85fc..8a62663 100755 --- a/lib/angular/i18n/angular-locale_ta.js +++ b/lib/angular/i18n/angular-locale_ta.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ஞாயிறு", - "1": "திங்கள்", - "2": "செவ்வாய்", - "3": "புதன்", - "4": "வியாழன்", - "5": "வெள்ளி", - "6": "சனி" - }, - "MONTH": { - "0": "ஜனவரி", - "1": "பிப்ரவரி", - "2": "மார்ச்", - "3": "ஏப்ரல்", - "4": "மே", - "5": "ஜூன்", - "6": "ஜூலை", - "7": "ஆகஸ்ட்", - "8": "செப்டம்பர்", - "9": "அக்டோபர்", - "10": "நவம்பர்", - "11": "டிசம்பர்" - }, - "SHORTDAY": { - "0": "ஞா", - "1": "தி", - "2": "செ", - "3": "பு", - "4": "வி", - "5": "வெ", - "6": "ச" - }, - "SHORTMONTH": { - "0": "ஜன.", - "1": "பிப்.", - "2": "மார்.", - "3": "ஏப்.", - "4": "மே", - "5": "ஜூன்", - "6": "ஜூலை", - "7": "ஆக.", - "8": "செப்.", - "9": "அக்.", - "10": "நவ.", - "11": "டிச." - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], "fullDate": "EEEE, d MMMM, y", "longDate": "d MMMM, y", "medium": "d MMM, y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 2, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 2, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4 -", + "negPre": "\u00a4\u00a0-", "negSuf": "", - "posPre": "\u00A4 ", + "posPre": "\u00a4\u00a0", "posSuf": "" } - } + ] }, "id": "ta", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_te-in.js b/lib/angular/i18n/angular-locale_te-in.js index 2c60ef9..ac797b0 100755 --- a/lib/angular/i18n/angular-locale_te-in.js +++ b/lib/angular/i18n/angular-locale_te-in.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ఆదివారం", - "1": "సోమవారం", - "2": "మంగళవారం", - "3": "బుధవారం", - "4": "గురువారం", - "5": "శుక్రవారం", - "6": "శనివారం" - }, - "MONTH": { - "0": "జనవరి", - "1": "ఫిబ్రవరి", - "2": "మార్చి", - "3": "ఎప్రిల్", - "4": "మే", - "5": "జూన్", - "6": "జూలై", - "7": "ఆగస్టు", - "8": "సెప్టెంబర్", - "9": "అక్టోబర్", - "10": "నవంబర్", - "11": "డిసెంబర్" - }, - "SHORTDAY": { - "0": "ఆది", - "1": "సోమ", - "2": "మంగళ", - "3": "బుధ", - "4": "గురు", - "5": "శుక్ర", - "6": "శని" - }, - "SHORTMONTH": { - "0": "జన", - "1": "ఫిబ్ర", - "2": "మార్చి", - "3": "ఏప్రి", - "4": "మే", - "5": "జూన్", - "6": "జూలై", - "7": "ఆగస్టు", - "8": "సెప్టెంబర్", - "9": "అక్టోబర్", - "10": "నవంబర్", - "11": "డిసెంబర్" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02" + ], + "MONTH": [ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], + "SHORTDAY": [ + "\u0c06\u0c26\u0c3f", + "\u0c38\u0c4b\u0c2e", + "\u0c2e\u0c02\u0c17\u0c33", + "\u0c2c\u0c41\u0c27", + "\u0c17\u0c41\u0c30\u0c41", + "\u0c36\u0c41\u0c15\u0c4d\u0c30", + "\u0c36\u0c28\u0c3f" + ], + "SHORTMONTH": [ + "\u0c1c\u0c28", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "te-in", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_te.js b/lib/angular/i18n/angular-locale_te.js index ca08244..eaf45c4 100755 --- a/lib/angular/i18n/angular-locale_te.js +++ b/lib/angular/i18n/angular-locale_te.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "am", - "1": "pm" - }, - "DAY": { - "0": "ఆదివారం", - "1": "సోమవారం", - "2": "మంగళవారం", - "3": "బుధవారం", - "4": "గురువారం", - "5": "శుక్రవారం", - "6": "శనివారం" - }, - "MONTH": { - "0": "జనవరి", - "1": "ఫిబ్రవరి", - "2": "మార్చి", - "3": "ఎప్రిల్", - "4": "మే", - "5": "జూన్", - "6": "జూలై", - "7": "ఆగస్టు", - "8": "సెప్టెంబర్", - "9": "అక్టోబర్", - "10": "నవంబర్", - "11": "డిసెంబర్" - }, - "SHORTDAY": { - "0": "ఆది", - "1": "సోమ", - "2": "మంగళ", - "3": "బుధ", - "4": "గురు", - "5": "శుక్ర", - "6": "శని" - }, - "SHORTMONTH": { - "0": "జన", - "1": "ఫిబ్ర", - "2": "మార్చి", - "3": "ఏప్రి", - "4": "మే", - "5": "జూన్", - "6": "జూలై", - "7": "ఆగస్టు", - "8": "సెప్టెంబర్", - "9": "అక్టోబర్", - "10": "నవంబర్", - "11": "డిసెంబర్" - }, + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02" + ], + "MONTH": [ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], + "SHORTDAY": [ + "\u0c06\u0c26\u0c3f", + "\u0c38\u0c4b\u0c2e", + "\u0c2e\u0c02\u0c17\u0c33", + "\u0c2c\u0c41\u0c27", + "\u0c17\u0c41\u0c30\u0c41", + "\u0c36\u0c41\u0c15\u0c4d\u0c30", + "\u0c36\u0c28\u0c3f" + ], + "SHORTMONTH": [ + "\u0c1c\u0c28", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], "fullDate": "EEEE d MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "h:mm a" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₹", + "CURRENCY_SYM": "\u20b9", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "te", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_th-th.js b/lib/angular/i18n/angular-locale_th-th.js index fb2672d..ddf5525 100755 --- a/lib/angular/i18n/angular-locale_th-th.js +++ b/lib/angular/i18n/angular-locale_th-th.js @@ -2,57 +2,57 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ก่อนเที่ยง", - "1": "หลังเที่ยง" - }, - "DAY": { - "0": "วันอาทิตย์", - "1": "วันจันทร์", - "2": "วันอังคาร", - "3": "วันพุธ", - "4": "วันพฤหัสบดี", - "5": "วันศุกร์", - "6": "วันเสาร์" - }, - "MONTH": { - "0": "มกราคม", - "1": "กุมภาพันธ์", - "2": "มีนาคม", - "3": "เมษายน", - "4": "พฤษภาคม", - "5": "มิถุนายน", - "6": "กรกฎาคม", - "7": "สิงหาคม", - "8": "กันยายน", - "9": "ตุลาคม", - "10": "พฤศจิกายน", - "11": "ธันวาคม" - }, - "SHORTDAY": { - "0": "อา.", - "1": "จ.", - "2": "อ.", - "3": "พ.", - "4": "พฤ.", - "5": "ศ.", - "6": "ส." - }, - "SHORTMONTH": { - "0": "ม.ค.", - "1": "ก.พ.", - "2": "มี.ค.", - "3": "เม.ย.", - "4": "พ.ค.", - "5": "มิ.ย.", - "6": "ก.ค.", - "7": "ส.ค.", - "8": "ก.ย.", - "9": "ต.ค.", - "10": "พ.ย.", - "11": "ธ.ค." - }, - "fullDate": "EEEEที่ d MMMM G y", + "AMPMS": [ + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ], + "DAY": [ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" + ], + "MONTH": [ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21" + ], + "SHORTDAY": [ + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a." + ], + "SHORTMONTH": [ + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\u0e18.\u0e04." + ], + "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y", "longDate": "d MMMM y", "medium": "d MMM y H:mm:ss", "mediumDate": "d MMM y", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "฿", + "CURRENCY_SYM": "\u0e3f", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "th-th", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_th.js b/lib/angular/i18n/angular-locale_th.js index 87be873..0d25054 100755 --- a/lib/angular/i18n/angular-locale_th.js +++ b/lib/angular/i18n/angular-locale_th.js @@ -2,57 +2,57 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "ก่อนเที่ยง", - "1": "หลังเที่ยง" - }, - "DAY": { - "0": "วันอาทิตย์", - "1": "วันจันทร์", - "2": "วันอังคาร", - "3": "วันพุธ", - "4": "วันพฤหัสบดี", - "5": "วันศุกร์", - "6": "วันเสาร์" - }, - "MONTH": { - "0": "มกราคม", - "1": "กุมภาพันธ์", - "2": "มีนาคม", - "3": "เมษายน", - "4": "พฤษภาคม", - "5": "มิถุนายน", - "6": "กรกฎาคม", - "7": "สิงหาคม", - "8": "กันยายน", - "9": "ตุลาคม", - "10": "พฤศจิกายน", - "11": "ธันวาคม" - }, - "SHORTDAY": { - "0": "อา.", - "1": "จ.", - "2": "อ.", - "3": "พ.", - "4": "พฤ.", - "5": "ศ.", - "6": "ส." - }, - "SHORTMONTH": { - "0": "ม.ค.", - "1": "ก.พ.", - "2": "มี.ค.", - "3": "เม.ย.", - "4": "พ.ค.", - "5": "มิ.ย.", - "6": "ก.ค.", - "7": "ส.ค.", - "8": "ก.ย.", - "9": "ต.ค.", - "10": "พ.ย.", - "11": "ธ.ค." - }, - "fullDate": "EEEEที่ d MMMM G y", + "AMPMS": [ + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ], + "DAY": [ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" + ], + "MONTH": [ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21" + ], + "SHORTDAY": [ + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a." + ], + "SHORTMONTH": [ + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\u0e18.\u0e04." + ], + "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y", "longDate": "d MMMM y", "medium": "d MMM y H:mm:ss", "mediumDate": "d MMM y", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "H:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "฿", + "CURRENCY_SYM": "\u0e3f", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "th", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_tl.js b/lib/angular/i18n/angular-locale_tl.js index 1247651..512b349 100755 --- a/lib/angular/i18n/angular-locale_tl.js +++ b/lib/angular/i18n/angular-locale_tl.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Linggo", - "1": "Lunes", - "2": "Martes", - "3": "Miyerkules", - "4": "Huwebes", - "5": "Biyernes", - "6": "Sabado" - }, - "MONTH": { - "0": "Enero", - "1": "Pebrero", - "2": "Marso", - "3": "Abril", - "4": "Mayo", - "5": "Hunyo", - "6": "Hulyo", - "7": "Agosto", - "8": "Setyembre", - "9": "Oktubre", - "10": "Nobyembre", - "11": "Disyembre" - }, - "SHORTDAY": { - "0": "Lin", - "1": "Lun", - "2": "Mar", - "3": "Mye", - "4": "Huw", - "5": "Bye", - "6": "Sab" - }, - "SHORTMONTH": { - "0": "Ene", - "1": "Peb", - "2": "Mar", - "3": "Abr", - "4": "May", - "5": "Hun", - "6": "Hul", - "7": "Ago", - "8": "Set", - "9": "Okt", - "10": "Nob", - "11": "Dis" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Mye", + "Huw", + "Bye", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "Dis" + ], "fullDate": "EEEE, MMMM dd y", "longDate": "MMMM d, y", "medium": "MMM d, y HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₱", + "CURRENCY_SYM": "\u20b1", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "tl", "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_tr-tr.js b/lib/angular/i18n/angular-locale_tr-tr.js index 37a7866..5999d61 100755 --- a/lib/angular/i18n/angular-locale_tr-tr.js +++ b/lib/angular/i18n/angular-locale_tr-tr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Pazar", - "1": "Pazartesi", - "2": "Salı", - "3": "Çarşamba", - "4": "Perşembe", - "5": "Cuma", - "6": "Cumartesi" - }, - "MONTH": { - "0": "Ocak", - "1": "Şubat", - "2": "Mart", - "3": "Nisan", - "4": "Mayıs", - "5": "Haziran", - "6": "Temmuz", - "7": "Ağustos", - "8": "Eylül", - "9": "Ekim", - "10": "Kasım", - "11": "Aralık" - }, - "SHORTDAY": { - "0": "Paz", - "1": "Pzt", - "2": "Sal", - "3": "Çar", - "4": "Per", - "5": "Cum", - "6": "Cmt" - }, - "SHORTMONTH": { - "0": "Oca", - "1": "Şub", - "2": "Mar", - "3": "Nis", - "4": "May", - "5": "Haz", - "6": "Tem", - "7": "Ağu", - "8": "Eyl", - "9": "Eki", - "10": "Kas", - "11": "Ara" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "Ara" + ], "fullDate": "d MMMM y EEEE", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "TL", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "tr-tr", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_tr.js b/lib/angular/i18n/angular-locale_tr.js index db349af..e0e6bad 100755 --- a/lib/angular/i18n/angular-locale_tr.js +++ b/lib/angular/i18n/angular-locale_tr.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Pazar", - "1": "Pazartesi", - "2": "Salı", - "3": "Çarşamba", - "4": "Perşembe", - "5": "Cuma", - "6": "Cumartesi" - }, - "MONTH": { - "0": "Ocak", - "1": "Şubat", - "2": "Mart", - "3": "Nisan", - "4": "Mayıs", - "5": "Haziran", - "6": "Temmuz", - "7": "Ağustos", - "8": "Eylül", - "9": "Ekim", - "10": "Kasım", - "11": "Aralık" - }, - "SHORTDAY": { - "0": "Paz", - "1": "Pzt", - "2": "Sal", - "3": "Çar", - "4": "Per", - "5": "Cum", - "6": "Cmt" - }, - "SHORTMONTH": { - "0": "Oca", - "1": "Şub", - "2": "Mar", - "3": "Nis", - "4": "May", - "5": "Haz", - "6": "Tem", - "7": "Ağu", - "8": "Eyl", - "9": "Eki", - "10": "Kas", - "11": "Ara" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "Ara" + ], "fullDate": "d MMMM y EEEE", "longDate": "d MMMM y", "medium": "d MMM y HH:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "TL", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "(", - "negSuf": " \u00A4)", + "negSuf": "\u00a0\u00a4)", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "tr", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_uk-ua.js b/lib/angular/i18n/angular-locale_uk-ua.js index 8e45d0d..b90d5f4 100755 --- a/lib/angular/i18n/angular-locale_uk-ua.js +++ b/lib/angular/i18n/angular-locale_uk-ua.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "дп", - "1": "пп" - }, - "DAY": { - "0": "Неділя", - "1": "Понеділок", - "2": "Вівторок", - "3": "Середа", - "4": "Четвер", - "5": "Пʼятниця", - "6": "Субота" - }, - "MONTH": { - "0": "січня", - "1": "лютого", - "2": "березня", - "3": "квітня", - "4": "травня", - "5": "червня", - "6": "липня", - "7": "серпня", - "8": "вересня", - "9": "жовтня", - "10": "листопада", - "11": "грудня" - }, - "SHORTDAY": { - "0": "Нд", - "1": "Пн", - "2": "Вт", - "3": "Ср", - "4": "Чт", - "5": "Пт", - "6": "Сб" - }, - "SHORTMONTH": { - "0": "січ.", - "1": "лют.", - "2": "бер.", - "3": "квіт.", - "4": "трав.", - "5": "черв.", - "6": "лип.", - "7": "серп.", - "8": "вер.", - "9": "жовт.", - "10": "лист.", - "11": "груд." - }, - "fullDate": "EEEE, d MMMM y 'р'.", - "longDate": "d MMMM y 'р'.", + "AMPMS": [ + "\u0434\u043f", + "\u043f\u043f" + ], + "DAY": [ + "\u041d\u0435\u0434\u0456\u043b\u044f", + "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0421\u0435\u0440\u0435\u0434\u0430", + "\u0427\u0435\u0442\u0432\u0435\u0440", + "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0421\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0441\u0456\u0447\u043d\u044f", + "\u043b\u044e\u0442\u043e\u0433\u043e", + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", + "\u043a\u0432\u0456\u0442\u043d\u044f", + "\u0442\u0440\u0430\u0432\u043d\u044f", + "\u0447\u0435\u0440\u0432\u043d\u044f", + "\u043b\u0438\u043f\u043d\u044f", + "\u0441\u0435\u0440\u043f\u043d\u044f", + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", + "\u0436\u043e\u0432\u0442\u043d\u044f", + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", + "\u0433\u0440\u0443\u0434\u043d\u044f" + ], + "SHORTDAY": [ + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0456\u0447.", + "\u043b\u044e\u0442.", + "\u0431\u0435\u0440.", + "\u043a\u0432\u0456\u0442.", + "\u0442\u0440\u0430\u0432.", + "\u0447\u0435\u0440\u0432.", + "\u043b\u0438\u043f.", + "\u0441\u0435\u0440\u043f.", + "\u0432\u0435\u0440.", + "\u0436\u043e\u0432\u0442.", + "\u043b\u0438\u0441\u0442.", + "\u0433\u0440\u0443\u0434." + ], + "fullDate": "EEEE, d MMMM y '\u0440'.", + "longDate": "d MMMM y '\u0440'.", "medium": "d MMM y HH:mm:ss", "mediumDate": "d MMM y", "mediumTime": "HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₴", + "CURRENCY_SYM": "\u20b4", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "uk-ua", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_uk.js b/lib/angular/i18n/angular-locale_uk.js index 960564b..f1f6b6e 100755 --- a/lib/angular/i18n/angular-locale_uk.js +++ b/lib/angular/i18n/angular-locale_uk.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "дп", - "1": "пп" - }, - "DAY": { - "0": "Неділя", - "1": "Понеділок", - "2": "Вівторок", - "3": "Середа", - "4": "Четвер", - "5": "Пʼятниця", - "6": "Субота" - }, - "MONTH": { - "0": "січня", - "1": "лютого", - "2": "березня", - "3": "квітня", - "4": "травня", - "5": "червня", - "6": "липня", - "7": "серпня", - "8": "вересня", - "9": "жовтня", - "10": "листопада", - "11": "грудня" - }, - "SHORTDAY": { - "0": "Нд", - "1": "Пн", - "2": "Вт", - "3": "Ср", - "4": "Чт", - "5": "Пт", - "6": "Сб" - }, - "SHORTMONTH": { - "0": "січ.", - "1": "лют.", - "2": "бер.", - "3": "квіт.", - "4": "трав.", - "5": "черв.", - "6": "лип.", - "7": "серп.", - "8": "вер.", - "9": "жовт.", - "10": "лист.", - "11": "груд." - }, - "fullDate": "EEEE, d MMMM y 'р'.", - "longDate": "d MMMM y 'р'.", + "AMPMS": [ + "\u0434\u043f", + "\u043f\u043f" + ], + "DAY": [ + "\u041d\u0435\u0434\u0456\u043b\u044f", + "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0421\u0435\u0440\u0435\u0434\u0430", + "\u0427\u0435\u0442\u0432\u0435\u0440", + "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0421\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0441\u0456\u0447\u043d\u044f", + "\u043b\u044e\u0442\u043e\u0433\u043e", + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", + "\u043a\u0432\u0456\u0442\u043d\u044f", + "\u0442\u0440\u0430\u0432\u043d\u044f", + "\u0447\u0435\u0440\u0432\u043d\u044f", + "\u043b\u0438\u043f\u043d\u044f", + "\u0441\u0435\u0440\u043f\u043d\u044f", + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", + "\u0436\u043e\u0432\u0442\u043d\u044f", + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", + "\u0433\u0440\u0443\u0434\u043d\u044f" + ], + "SHORTDAY": [ + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0456\u0447.", + "\u043b\u044e\u0442.", + "\u0431\u0435\u0440.", + "\u043a\u0432\u0456\u0442.", + "\u0442\u0440\u0430\u0432.", + "\u0447\u0435\u0440\u0432.", + "\u043b\u0438\u043f.", + "\u0441\u0435\u0440\u043f.", + "\u0432\u0435\u0440.", + "\u0436\u043e\u0432\u0442.", + "\u043b\u0438\u0441\u0442.", + "\u0433\u0440\u0443\u0434." + ], + "fullDate": "EEEE, d MMMM y '\u0440'.", + "longDate": "d MMMM y '\u0440'.", "medium": "d MMM y HH:mm:ss", "mediumDate": "d MMM y", "mediumTime": "HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₴", + "CURRENCY_SYM": "\u20b4", "DECIMAL_SEP": ",", - "GROUP_SEP": " ", - "PATTERNS": { - "0": { + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "uk", "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ur-pk.js b/lib/angular/i18n/angular-locale_ur-pk.js index a24438d..956534b 100755 --- a/lib/angular/i18n/angular-locale_ur-pk.js +++ b/lib/angular/i18n/angular-locale_ur-pk.js @@ -2,60 +2,60 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "دن", - "1": "رات" - }, - "DAY": { - "0": "اتوار", - "1": "پير", - "2": "منگل", - "3": "بده", - "4": "جمعرات", - "5": "جمعہ", - "6": "ہفتہ" - }, - "MONTH": { - "0": "جنوری", - "1": "فروری", - "2": "مارچ", - "3": "اپريل", - "4": "مئ", - "5": "جون", - "6": "جولائ", - "7": "اگست", - "8": "ستمبر", - "9": "اکتوبر", - "10": "نومبر", - "11": "دسمبر" - }, - "SHORTDAY": { - "0": "اتوار", - "1": "پير", - "2": "منگل", - "3": "بده", - "4": "جمعرات", - "5": "جمعہ", - "6": "ہفتہ" - }, - "SHORTMONTH": { - "0": "جنوری", - "1": "فروری", - "2": "مارچ", - "3": "اپريل", - "4": "مئ", - "5": "جون", - "6": "جولائ", - "7": "اگست", - "8": "ستمبر", - "9": "اکتوبر", - "10": "نومبر", - "11": "دسمبر" - }, - "fullDate": "EEEE؍ d؍ MMMM y", - "longDate": "d؍ MMMM y", - "medium": "d؍ MMM y h:mm:ss a", - "mediumDate": "d؍ MMM y", + "AMPMS": [ + "\u062f\u0646", + "\u0631\u0627\u062a" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060d d\u060d MMMM y", + "longDate": "d\u060d MMMM y", + "medium": "d\u060d MMM y h:mm:ss a", + "mediumDate": "d\u060d MMM y", "mediumTime": "h:mm:ss a", "short": "d/M/yy h:mm a", "shortDate": "d/M/yy", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Rs", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ur-pk", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_ur.js b/lib/angular/i18n/angular-locale_ur.js index 37af0da..6728dc1 100755 --- a/lib/angular/i18n/angular-locale_ur.js +++ b/lib/angular/i18n/angular-locale_ur.js @@ -2,60 +2,60 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "دن", - "1": "رات" - }, - "DAY": { - "0": "اتوار", - "1": "پير", - "2": "منگل", - "3": "بده", - "4": "جمعرات", - "5": "جمعہ", - "6": "ہفتہ" - }, - "MONTH": { - "0": "جنوری", - "1": "فروری", - "2": "مارچ", - "3": "اپريل", - "4": "مئ", - "5": "جون", - "6": "جولائ", - "7": "اگست", - "8": "ستمبر", - "9": "اکتوبر", - "10": "نومبر", - "11": "دسمبر" - }, - "SHORTDAY": { - "0": "اتوار", - "1": "پير", - "2": "منگل", - "3": "بده", - "4": "جمعرات", - "5": "جمعہ", - "6": "ہفتہ" - }, - "SHORTMONTH": { - "0": "جنوری", - "1": "فروری", - "2": "مارچ", - "3": "اپريل", - "4": "مئ", - "5": "جون", - "6": "جولائ", - "7": "اگست", - "8": "ستمبر", - "9": "اکتوبر", - "10": "نومبر", - "11": "دسمبر" - }, - "fullDate": "EEEE؍ d؍ MMMM y", - "longDate": "d؍ MMMM y", - "medium": "d؍ MMM y h:mm:ss a", - "mediumDate": "d؍ MMM y", + "AMPMS": [ + "\u062f\u0646", + "\u0631\u0627\u062a" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060d d\u060d MMMM y", + "longDate": "d\u060d MMMM y", + "medium": "d\u060d MMM y h:mm:ss a", + "mediumDate": "d\u060d MMM y", "mediumTime": "h:mm:ss a", "short": "d/M/yy h:mm a", "shortDate": "d/M/yy", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "Rs", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "ur", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_vi-vn.js b/lib/angular/i18n/angular-locale_vi-vn.js index 2fbb5f2..b03ab4a 100755 --- a/lib/angular/i18n/angular-locale_vi-vn.js +++ b/lib/angular/i18n/angular-locale_vi-vn.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "SA", - "1": "CH" - }, - "DAY": { - "0": "Chủ nhật", - "1": "Thứ hai", - "2": "Thứ ba", - "3": "Thứ tư", - "4": "Thứ năm", - "5": "Thứ sáu", - "6": "Thứ bảy" - }, - "MONTH": { - "0": "tháng một", - "1": "tháng hai", - "2": "tháng ba", - "3": "tháng tư", - "4": "tháng năm", - "5": "tháng sáu", - "6": "tháng bảy", - "7": "tháng tám", - "8": "tháng chín", - "9": "tháng mười", - "10": "tháng mười một", - "11": "tháng mười hai" - }, - "SHORTDAY": { - "0": "CN", - "1": "Th 2", - "2": "Th 3", - "3": "Th 4", - "4": "Th 5", - "5": "Th 6", - "6": "Th 7" - }, - "SHORTMONTH": { - "0": "thg 1", - "1": "thg 2", - "2": "thg 3", - "3": "thg 4", - "4": "thg 5", - "5": "thg 6", - "6": "thg 7", - "7": "thg 8", - "8": "thg 9", - "9": "thg 10", - "10": "thg 11", - "11": "thg 12" - }, - "fullDate": "EEEE, 'ngày' dd MMMM 'năm' y", - "longDate": "'Ngày' dd 'tháng' M 'năm' y", + "AMPMS": [ + "SA", + "CH" + ], + "DAY": [ + "Ch\u1ee7 nh\u1eadt", + "Th\u1ee9 hai", + "Th\u1ee9 ba", + "Th\u1ee9 t\u01b0", + "Th\u1ee9 n\u0103m", + "Th\u1ee9 s\u00e1u", + "Th\u1ee9 b\u1ea3y" + ], + "MONTH": [ + "th\u00e1ng m\u1ed9t", + "th\u00e1ng hai", + "th\u00e1ng ba", + "th\u00e1ng t\u01b0", + "th\u00e1ng n\u0103m", + "th\u00e1ng s\u00e1u", + "th\u00e1ng b\u1ea3y", + "th\u00e1ng t\u00e1m", + "th\u00e1ng ch\u00edn", + "th\u00e1ng m\u01b0\u1eddi", + "th\u00e1ng m\u01b0\u1eddi m\u1ed9t", + "th\u00e1ng m\u01b0\u1eddi hai" + ], + "SHORTDAY": [ + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7" + ], + "SHORTMONTH": [ + "thg 1", + "thg 2", + "thg 3", + "thg 4", + "thg 5", + "thg 6", + "thg 7", + "thg 8", + "thg 9", + "thg 10", + "thg 11", + "thg 12" + ], + "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y", + "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y", "medium": "dd-MM-yyyy HH:mm:ss", "mediumDate": "dd-MM-yyyy", "mediumTime": "HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₫", + "CURRENCY_SYM": "\u20ab", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "vi-vn", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_vi.js b/lib/angular/i18n/angular-locale_vi.js index 73e5464..4e1108a 100755 --- a/lib/angular/i18n/angular-locale_vi.js +++ b/lib/angular/i18n/angular-locale_vi.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "SA", - "1": "CH" - }, - "DAY": { - "0": "Chủ nhật", - "1": "Thứ hai", - "2": "Thứ ba", - "3": "Thứ tư", - "4": "Thứ năm", - "5": "Thứ sáu", - "6": "Thứ bảy" - }, - "MONTH": { - "0": "tháng một", - "1": "tháng hai", - "2": "tháng ba", - "3": "tháng tư", - "4": "tháng năm", - "5": "tháng sáu", - "6": "tháng bảy", - "7": "tháng tám", - "8": "tháng chín", - "9": "tháng mười", - "10": "tháng mười một", - "11": "tháng mười hai" - }, - "SHORTDAY": { - "0": "CN", - "1": "Th 2", - "2": "Th 3", - "3": "Th 4", - "4": "Th 5", - "5": "Th 6", - "6": "Th 7" - }, - "SHORTMONTH": { - "0": "thg 1", - "1": "thg 2", - "2": "thg 3", - "3": "thg 4", - "4": "thg 5", - "5": "thg 6", - "6": "thg 7", - "7": "thg 8", - "8": "thg 9", - "9": "thg 10", - "10": "thg 11", - "11": "thg 12" - }, - "fullDate": "EEEE, 'ngày' dd MMMM 'năm' y", - "longDate": "'Ngày' dd 'tháng' M 'năm' y", + "AMPMS": [ + "SA", + "CH" + ], + "DAY": [ + "Ch\u1ee7 nh\u1eadt", + "Th\u1ee9 hai", + "Th\u1ee9 ba", + "Th\u1ee9 t\u01b0", + "Th\u1ee9 n\u0103m", + "Th\u1ee9 s\u00e1u", + "Th\u1ee9 b\u1ea3y" + ], + "MONTH": [ + "th\u00e1ng m\u1ed9t", + "th\u00e1ng hai", + "th\u00e1ng ba", + "th\u00e1ng t\u01b0", + "th\u00e1ng n\u0103m", + "th\u00e1ng s\u00e1u", + "th\u00e1ng b\u1ea3y", + "th\u00e1ng t\u00e1m", + "th\u00e1ng ch\u00edn", + "th\u00e1ng m\u01b0\u1eddi", + "th\u00e1ng m\u01b0\u1eddi m\u1ed9t", + "th\u00e1ng m\u01b0\u1eddi hai" + ], + "SHORTDAY": [ + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7" + ], + "SHORTMONTH": [ + "thg 1", + "thg 2", + "thg 3", + "thg 4", + "thg 5", + "thg 6", + "thg 7", + "thg 8", + "thg 9", + "thg 10", + "thg 11", + "thg 12" + ], + "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y", + "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y", "medium": "dd-MM-yyyy HH:mm:ss", "mediumDate": "dd-MM-yyyy", "mediumTime": "HH:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "HH:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "₫", + "CURRENCY_SYM": "\u20ab", "DECIMAL_SEP": ",", "GROUP_SEP": ".", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,7 +78,7 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -86,11 +86,11 @@ $provide.value("$locale", { "minFrac": 2, "minInt": 1, "negPre": "-", - "negSuf": " \u00A4", + "negSuf": "\u00a0\u00a4", "posPre": "", - "posSuf": " \u00A4" + "posSuf": "\u00a0\u00a4" } - } + ] }, "id": "vi", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zh-cn.js b/lib/angular/i18n/angular-locale_zh-cn.js index a014435..8ec6b39 100755 --- a/lib/angular/i18n/angular-locale_zh-cn.js +++ b/lib/angular/i18n/angular-locale_zh-cn.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "上午", - "1": "下午" - }, - "DAY": { - "0": "星期日", - "1": "星期一", - "2": "星期二", - "3": "星期三", - "4": "星期四", - "5": "星期五", - "6": "星期六" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "周日", - "1": "周一", - "2": "周二", - "3": "周三", - "4": "周四", - "5": "周五", - "6": "周六" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", "medium": "yyyy-M-d ah:mm:ss", "mediumDate": "yyyy-M-d", "mediumTime": "ah:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "ah:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "¥", + "CURRENCY_SYM": "\u00a5", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zh-cn", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zh-hans-cn.js b/lib/angular/i18n/angular-locale_zh-hans-cn.js index ac9ac7d..094b44a 100755 --- a/lib/angular/i18n/angular-locale_zh-hans-cn.js +++ b/lib/angular/i18n/angular-locale_zh-hans-cn.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "上午", - "1": "下午" - }, - "DAY": { - "0": "星期日", - "1": "星期一", - "2": "星期二", - "3": "星期三", - "4": "星期四", - "5": "星期五", - "6": "星期六" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "周日", - "1": "周一", - "2": "周二", - "3": "周三", - "4": "周四", - "5": "周五", - "6": "周六" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", "medium": "yyyy-M-d ah:mm:ss", "mediumDate": "yyyy-M-d", "mediumTime": "ah:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "ah:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "¥", + "CURRENCY_SYM": "\u00a5", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zh-hans-cn", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zh-hk.js b/lib/angular/i18n/angular-locale_zh-hk.js index d72c874..b9e9773 100755 --- a/lib/angular/i18n/angular-locale_zh-hk.js +++ b/lib/angular/i18n/angular-locale_zh-hk.js @@ -2,71 +2,71 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "上午", - "1": "下午" - }, - "DAY": { - "0": "星期日", - "1": "星期一", - "2": "星期二", - "3": "星期三", - "4": "星期四", - "5": "星期五", - "6": "星期六" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "週日", - "1": "週一", - "2": "週二", - "3": "週三", - "4": "週四", - "5": "週五", - "6": "週六" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", - "medium": "y年M月d日 ahh:mm:ss", - "mediumDate": "y年M月d日", + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ahh:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", "mediumTime": "ahh:mm:ss", - "short": "yy年M月d日 ah:mm", - "shortDate": "yy年M月d日", + "short": "yy\u5e74M\u6708d\u65e5 ah:mm", + "shortDate": "yy\u5e74M\u6708d\u65e5", "shortTime": "ah:mm" }, "NUMBER_FORMATS": { "CURRENCY_SYM": "$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zh-hk", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zh-tw.js b/lib/angular/i18n/angular-locale_zh-tw.js index daf9b7e..44f5a82 100755 --- a/lib/angular/i18n/angular-locale_zh-tw.js +++ b/lib/angular/i18n/angular-locale_zh-tw.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "上午", - "1": "下午" - }, - "DAY": { - "0": "星期日", - "1": "星期一", - "2": "星期二", - "3": "星期三", - "4": "星期四", - "5": "星期五", - "6": "星期六" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "週日", - "1": "週一", - "2": "週二", - "3": "週三", - "4": "週四", - "5": "週五", - "6": "週六" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", "medium": "yyyy/M/d ah:mm:ss", "mediumDate": "yyyy/M/d", "mediumTime": "ah:mm:ss", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "NT$", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "\u00A4-", + "negPre": "\u00a4-", "negSuf": "", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zh-tw", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zh.js b/lib/angular/i18n/angular-locale_zh.js index 9341975..779f208 100755 --- a/lib/angular/i18n/angular-locale_zh.js +++ b/lib/angular/i18n/angular-locale_zh.js @@ -2,58 +2,58 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "上午", - "1": "下午" - }, - "DAY": { - "0": "星期日", - "1": "星期一", - "2": "星期二", - "3": "星期三", - "4": "星期四", - "5": "星期五", - "6": "星期六" - }, - "MONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "SHORTDAY": { - "0": "周日", - "1": "周一", - "2": "周二", - "3": "周三", - "4": "周四", - "5": "周五", - "6": "周六" - }, - "SHORTMONTH": { - "0": "1月", - "1": "2月", - "2": "3月", - "3": "4月", - "4": "5月", - "5": "6月", - "6": "7月", - "7": "8月", - "8": "9月", - "9": "10月", - "10": "11月", - "11": "12月" - }, - "fullDate": "y年M月d日EEEE", - "longDate": "y年M月d日", + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", "medium": "yyyy-M-d ah:mm:ss", "mediumDate": "yyyy-M-d", "mediumTime": "ah:mm:ss", @@ -62,11 +62,11 @@ $provide.value("$locale", { "shortTime": "ah:mm" }, "NUMBER_FORMATS": { - "CURRENCY_SYM": "¥", + "CURRENCY_SYM": "\u00a5", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zh", "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zu-za.js b/lib/angular/i18n/angular-locale_zu-za.js index 473f5cc..49201c8 100755 --- a/lib/angular/i18n/angular-locale_zu-za.js +++ b/lib/angular/i18n/angular-locale_zu-za.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sonto", - "1": "Msombuluko", - "2": "Lwesibili", - "3": "Lwesithathu", - "4": "uLwesine", - "5": "Lwesihlanu", - "6": "Mgqibelo" - }, - "MONTH": { - "0": "Januwari", - "1": "Februwari", - "2": "Mashi", - "3": "Apreli", - "4": "Meyi", - "5": "Juni", - "6": "Julayi", - "7": "Agasti", - "8": "Septhemba", - "9": "Okthoba", - "10": "Novemba", - "11": "Disemba" - }, - "SHORTDAY": { - "0": "Son", - "1": "Mso", - "2": "Bil", - "3": "Tha", - "4": "Sin", - "5": "Hla", - "6": "Mgq" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mas", - "3": "Apr", - "4": "Mey", - "5": "Jun", - "6": "Jul", - "7": "Aga", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dis" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Msombuluko", + "Lwesibili", + "Lwesithathu", + "uLwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "MONTH": [ + "Januwari", + "Februwari", + "Mashi", + "Apreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septhemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mas", + "Apr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "Dis" + ], "fullDate": "EEEE dd MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "R", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zu-za", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/i18n/angular-locale_zu.js b/lib/angular/i18n/angular-locale_zu.js index cb85c61..a657987 100755 --- a/lib/angular/i18n/angular-locale_zu.js +++ b/lib/angular/i18n/angular-locale_zu.js @@ -2,56 +2,56 @@ angular.module("ngLocale", [], ["$provide", function($provide) { var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; $provide.value("$locale", { "DATETIME_FORMATS": { - "AMPMS": { - "0": "AM", - "1": "PM" - }, - "DAY": { - "0": "Sonto", - "1": "Msombuluko", - "2": "Lwesibili", - "3": "Lwesithathu", - "4": "uLwesine", - "5": "Lwesihlanu", - "6": "Mgqibelo" - }, - "MONTH": { - "0": "Januwari", - "1": "Februwari", - "2": "Mashi", - "3": "Apreli", - "4": "Meyi", - "5": "Juni", - "6": "Julayi", - "7": "Agasti", - "8": "Septhemba", - "9": "Okthoba", - "10": "Novemba", - "11": "Disemba" - }, - "SHORTDAY": { - "0": "Son", - "1": "Mso", - "2": "Bil", - "3": "Tha", - "4": "Sin", - "5": "Hla", - "6": "Mgq" - }, - "SHORTMONTH": { - "0": "Jan", - "1": "Feb", - "2": "Mas", - "3": "Apr", - "4": "Mey", - "5": "Jun", - "6": "Jul", - "7": "Aga", - "8": "Sep", - "9": "Okt", - "10": "Nov", - "11": "Dis" - }, + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Msombuluko", + "Lwesibili", + "Lwesithathu", + "uLwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "MONTH": [ + "Januwari", + "Februwari", + "Mashi", + "Apreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septhemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mas", + "Apr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "Dis" + ], "fullDate": "EEEE dd MMMM y", "longDate": "d MMMM y", "medium": "d MMM y h:mm:ss a", @@ -65,8 +65,8 @@ $provide.value("$locale", { "CURRENCY_SYM": "R", "DECIMAL_SEP": ".", "GROUP_SEP": ",", - "PATTERNS": { - "0": { + "PATTERNS": [ + { "gSize": 3, "lgSize": 3, "macFrac": 0, @@ -78,19 +78,19 @@ $provide.value("$locale", { "posPre": "", "posSuf": "" }, - "1": { + { "gSize": 3, "lgSize": 3, "macFrac": 0, "maxFrac": 2, "minFrac": 2, "minInt": 1, - "negPre": "(\u00A4", + "negPre": "(\u00a4", "negSuf": ")", - "posPre": "\u00A4", + "posPre": "\u00a4", "posSuf": "" } - } + ] }, "id": "zu", "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} diff --git a/lib/angular/version.json b/lib/angular/version.json index 7509931..10894a2 100755 --- a/lib/angular/version.json +++ b/lib/angular/version.json @@ -1 +1 @@ -{"full":"1.1.4","major":"1","minor":"1","dot":"4","codename":"quantum-manipulation","stable":"1.0.5"} \ No newline at end of file +{"number":"1.2.0rc1","full":"1.2.0rc1","major":"1","minor":"2","dot":"0","codename":"spooky-giraffe","cdn":"1.1.4"} \ No newline at end of file diff --git a/lib/angular/version.txt b/lib/angular/version.txt index 1b87bcd..8a6ee62 100755 --- a/lib/angular/version.txt +++ b/lib/angular/version.txt @@ -1 +1 @@ -1.1.4 \ No newline at end of file +1.2.0rc1 \ No newline at end of file
                                                                                            NamePhone