Update Angular to 1.2.0 RC2

This commit is contained in:
Colin Frei 2013-09-22 11:10:37 +02:00
parent 7416269494
commit 0d3a40980e
184 changed files with 17993 additions and 21133 deletions

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -10,20 +10,15 @@
* @name ngAnimate
* @description
*
* ngAnimate
* =========
* # 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.
* `ngAnimate` is an optional module that provides 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.
* {@installModule animate}
*
* <pre>
* angular.module('App', ['ngAnimate']);
* </pre>
* # Usage
*
* Then, to see animations in action, all that is required is to define the appropriate CSS classes
* 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.
@ -197,11 +192,13 @@ angular.module('ngAnimate', ['ng'])
* @name ngAnimate.$animateProvider
* @description
*
* The $AnimationProvider provider allows developers to register and access custom JavaScript animations directly inside
* The `$AnimationProvider` 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.
* Requires the {@link ngAnimate `ngAnimate`} module to be installed.
*
* 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) {
@ -211,8 +208,8 @@ angular.module('ngAnimate', ['ng'])
var NG_ANIMATE_STATE = '$$ngAnimateState';
var rootAnimateState = {running:true};
$provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout',
function($delegate, $injector, $sniffer, $rootElement, $timeout) {
$provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout', '$rootScope',
function($delegate, $injector, $sniffer, $rootElement, $timeout, $rootScope) {
$rootElement.data(NG_ANIMATE_STATE, rootAnimateState);
@ -255,7 +252,9 @@ angular.module('ngAnimate', ['ng'])
* 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.
* Requires the {@link ngAnimate `ngAnimate`} module to be installed.
*
* Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
*
*/
return {
@ -275,8 +274,8 @@ angular.module('ngAnimate', ['ng'])
* |----------------------------------------------------------------------------------------------|-----------------------------------------------|
* | 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" |
* | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation" |
* | 4. the .ng-enter class is added to 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" |
@ -290,7 +289,11 @@ angular.module('ngAnimate', ['ng'])
*/
enter : function(element, parent, after, done) {
$delegate.enter(element, parent, after);
performAnimation('enter', 'ng-enter', element, parent, after, done);
$rootScope.$$postDigest(function() {
performAnimation('enter', 'ng-enter', element, parent, after, function() {
done && $timeout(done, 0, false);
});
});
},
/**
@ -308,8 +311,8 @@ angular.module('ngAnimate', ['ng'])
* | 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" |
* | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation" |
* | 3. the .ng-leave class is added to 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 |
@ -321,9 +324,11 @@ angular.module('ngAnimate', ['ng'])
* @param {function()=} done callback function that will be called once the animation is complete
*/
leave : function(element, done) {
$rootScope.$$postDigest(function() {
performAnimation('leave', 'ng-leave', element, null, null, function() {
$delegate.leave(element, done);
});
});
},
/**
@ -343,8 +348,8 @@ angular.module('ngAnimate', ['ng'])
* |----------------------------------------------------------------------------------------------|---------------------------------------------|
* | 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" |
* | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation" |
* | 4. the .ng-move class is added to 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" |
@ -358,7 +363,11 @@ angular.module('ngAnimate', ['ng'])
*/
move : function(element, parent, after, done) {
$delegate.move(element, parent, after);
performAnimation('move', 'ng-move', element, null, null, done);
$rootScope.$$postDigest(function() {
performAnimation('move', 'ng-move', element, null, null, function() {
done && $timeout(done, 0, false);
});
});
},
/**
@ -369,15 +378,16 @@ angular.module('ngAnimate', ['ng'])
* @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.
* the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions
* or keyframes are defined on the -add CSS class).
*
* 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" |
* | 2. $animate runs any JavaScript-defined animations on the element | class="" |
* | 3. the .super-add class is added to 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" |
@ -403,15 +413,16 @@ angular.module('ngAnimate', ['ng'])
* @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.
* order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if
* no CSS transitions or keyframes are defined on the -remove CSS class).
*
* 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" |
* | 2. $animate runs any JavaScript-defined animations on the element | class="super" |
* | 3. the .super-remove class is added to 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" |
@ -496,15 +507,6 @@ angular.module('ngAnimate', ['ng'])
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);
@ -512,7 +514,7 @@ angular.module('ngAnimate', ['ng'])
if(animation.start) {
if(event == 'addClass' || event == 'removeClass') {
animation.endFn = animation.start(element, baseClassName, fn);
animation.endFn = animation.start(element, className, fn);
} else {
animation.endFn = animation.start(element, fn);
}
@ -540,7 +542,6 @@ angular.module('ngAnimate', ['ng'])
function done() {
if(!done.hasBeenRun) {
done.hasBeenRun = true;
element.removeClass(className);
element.removeData(NG_ANIMATE_STATE);
(onComplete || noop)();
}
@ -551,35 +552,6 @@ angular.module('ngAnimate', ['ng'])
$animateProvider.register('', ['$window','$sniffer', '$timeout', function($window, $sniffer, $timeout) {
var noop = angular.noop;
var forEach = angular.forEach;
function animate(element, className, done) {
if (!($sniffer.transitions || $sniffer.animations)) {
done();
} else {
var activeClassName = '';
$timeout(startAnimation, 1, false);
//this acts as the cancellation function in case
//a new animation is triggered while another animation
//is still going on (otherwise the active className
//would still hang around until the timer is complete).
return onEnd;
}
function parseMaxTime(str) {
var total = 0, values = angular.isString(str) ? str.split(/\s*,\s*/) : [];
forEach(values, function(value) {
total = Math.max(parseFloat(value) || 0, total);
});
return total;
}
function startAnimation() {
var duration = 0;
forEach(className.split(' '), function(klass, i) {
activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
});
element.addClass(activeClassName);
//one day all browsers will have these properties
var w3cAnimationProp = 'animation';
@ -591,10 +563,35 @@ angular.module('ngAnimate', ['ng'])
var durationKey = 'Duration',
delayKey = 'Delay',
animationIterationCountKey = 'IterationCount';
propertyKey = 'Property',
animationIterationCountKey = 'IterationCount',
ELEMENT_NODE = 1;
function animate(element, className, done) {
if (!($sniffer.transitions || $sniffer.animations)) {
done();
return;
}
else if(['ng-enter','ng-leave','ng-move'].indexOf(className) == -1) {
var existingDuration = 0;
forEach(element, function(element) {
if (element.nodeType == ELEMENT_NODE) {
var elementStyles = $window.getComputedStyle(element) || {};
existingDuration = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + durationKey]),
parseMaxTime(elementStyles[vendorTransitionProp + durationKey]),
existingDuration);
}
});
if(existingDuration > 0) {
done();
return;
}
}
element.addClass(className);
//we want all the styles defined before and after
var ELEMENT_NODE = 1;
var duration = 0;
forEach(element, function(element) {
if (element.nodeType == ELEMENT_NODE) {
var elementStyles = $window.getComputedStyle(element) || {};
@ -623,13 +620,35 @@ angular.module('ngAnimate', ['ng'])
}
});
/* there is no point in performing a reflow if the animation
timeout is empty (this would cause a flicker bug normally
in the page */
if(duration > 0) {
var node = element[0];
//temporarily disable the transition so that the enter styles
//don't animate twice (this is here to avoid a bug in Chrome/FF).
node.style[w3cTransitionProp + propertyKey] = 'none';
node.style[vendorTransitionProp + propertyKey] = 'none';
var activeClassName = '';
forEach(className.split(' '), function(klass, i) {
activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
});
//this triggers a reflow which allows for the transition animation to kick in
element.prop('clientWidth');
node.style[w3cTransitionProp + propertyKey] = '';
node.style[vendorTransitionProp + propertyKey] = '';
element.addClass(activeClassName);
$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) {
return function onEnd(cancelled) {
element.removeClass(className);
element.removeClass(activeClassName);
//only when the animation is cancelled is the done()
@ -640,6 +659,19 @@ angular.module('ngAnimate', ['ng'])
}
}
}
else {
element.removeClass(className);
done();
}
function parseMaxTime(str) {
var total = 0, values = angular.isString(str) ? str.split(/\s*,\s*/) : [];
forEach(values, function(value) {
total = Math.max(parseFloat(value) || 0, total);
});
return total;
}
}
return {
enter : function(element, done) {
@ -659,8 +691,6 @@ angular.module('ngAnimate', ['ng'])
}
};
}]);
function suffixClasses(classes, suffix) {
var className = '';
classes = angular.isArray(classes) ? classes : classes.split(/\s+/);
@ -672,6 +702,7 @@ angular.module('ngAnimate', ['ng'])
return className;
}
}]);
}]);
})(window, window.angular);

View file

@ -1,14 +1,15 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(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<c.length&&(l+=(0<m?" ":"")+c+h)});return l}var u=q.noop,t=q.forEach,y=w.$$selectors,f="$$ngAnimateState",v={running:!0};x.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout",function(c,h,l,g,m){function k(a){if(a){var b=[],e={};a=a.substr(1).split(".");a.push("");for(var c=0;c<a.length;c++){var d=
a[c],r=y[d];r&&!e[d]&&(b.push(h.get(r)),e[d]=!0)}return b}}function d(a,b,e,c,d,r){function z(a){t(a,function(a){(a.endFn||u)(!0)})}function n(){n.hasBeenRun||(n.hasBeenRun=!0,e.removeClass(b),e.removeData(f),(r||u)())}var A=(" "+((e.attr("class")||"")+" "+b)).replace(/\s+/g,"."),p=[];t(k(A),function(b,c){p.push({start:b[a]})});c||(c=d?d.parent():e.parent());d={running:!0};if((c.inheritedData(f)||d).running)m(r||u,0,!1);else{c=e.data(f)||{};c.running&&(z(c.animations),c.done());e.data(f,{running:!0,
animations:p,done:n});var h=b;"addClass"==a?b=s(b,"-add"):"removeClass"==a&&(b=s(b,"-remove"));e.addClass(b);t(p,function(b,c){var d=function(){a:{p[c].done=!0;(p[c].endFn||u)();for(var a=0;a<p.length;a++)if(!p[a].done)break a;n()}};b.start?b.endFn="addClass"==a||"removeClass"==a?b.start(e,h,d):b.start(e,d):d()})}}g.data(f,v);return{enter:function(a,b,e,k){c.enter(a,b,e);d("enter","ng-enter",a,b,e,k)},leave:function(a,b){d("leave","ng-leave",a,null,null,function(){c.leave(a,b)})},move:function(a,
b,e,k){c.move(a,b,e);d("move","ng-move",a,null,null,k)},addClass:function(a,b,e){d("addClass",b,a,null,null,function(){c.addClass(a,b,e)})},removeClass:function(a,b,e){d("removeClass",b,a,null,null,function(){c.removeClass(a,b,e)})},enabled:function(a){arguments.length&&(v.running=!a);return!v.running}}}]);w.register("",["$window","$sniffer","$timeout",function(c,h,l){function g(k,d,a){function b(a){var b=0;a=q.isString(a)?a.split(/\s*,\s*/):[];m(a,function(a){b=Math.max(parseFloat(a)||0,b)});return b}
function e(){var e=0;m(d.split(" "),function(a,b){f+=(0<b?" ":"")+a+"-active"});k.addClass(f);var g=h.vendorPrefix+"Animation",n=h.vendorPrefix+"Transition";m(k,function(a){if(1==a.nodeType){a=c.getComputedStyle(a)||{};var d=Math.max(b(a.transitionDelay),b(a[n+"Delay"])),k=Math.max(b(a.animationDelay),b(a[g+"Delay"])),h=Math.max(b(a.transitionDuration),b(a[n+"Duration"])),f=Math.max(b(a.animationDuration),b(a[g+"Duration"]));0<f&&(f*=Math.max(parseInt(a.animationIterationCount)||0,parseInt(a[g+"IterationCount"])||
0,1));e=Math.max(k+f,d+h,e)}});l(a,1E3*e,!1)}function g(b){k.removeClass(f);b&&a()}if(h.transitions||h.animations){var f="";l(e,1,!1);return g}a()}var m=q.forEach;return{enter:function(c,d){return g(c,"ng-enter",d)},leave:function(c,d){return g(c,"ng-leave",d)},move:function(c,d){return g(c,"ng-move",d)},addClass:function(c,d,a){return g(c,s(d,"-add"),a)},removeClass:function(c,d,a){return g(c,s(d,"-remove"),a)}}}])}])})(window,window.angular);
(function(C,n,D){'use strict';n.module("ngAnimate",["ng"]).config(["$provide","$animateProvider",function(A,t){var u=n.noop,v=n.forEach,B=t.$$selectors,p="$$ngAnimateState",z={running:!0};A.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope",function(r,n,t,g,m,h){function w(a){if(a){var e=[],d={};a=a.substr(1).split(".");a.push("");for(var b=0;b<a.length;b++){var s=a[b],f=B[s];f&&!d[s]&&(e.push(n.get(f)),d[s]=!0)}return e}}function f(a,e,d,b,f,h){function n(a){v(a,
function(a){(a.endFn||u)(!0)})}function c(){c.hasBeenRun||(c.hasBeenRun=!0,d.removeData(p),(h||u)())}var l=(" "+((d.attr("class")||"")+" "+e)).replace(/\s+/g,"."),k=[];v(w(l),function(c,d){k.push({start:c[a]})});b||(b=f?f.parent():d.parent());f={running:!0};(b.inheritedData(p)||f).running?m(h||u,0,!1):(b=d.data(p)||{},b.running&&(n(b.animations),b.done()),d.data(p,{running:!0,animations:k,done:c}),v(k,function(b,f){var l=function(){a:{k[f].done=!0;(k[f].endFn||u)();for(var a=0;a<k.length;a++)if(!k[a].done)break a;
c()}};b.start?b.endFn="addClass"==a||"removeClass"==a?b.start(d,e,l):b.start(d,l):l()}))}g.data(p,z);return{enter:function(a,e,d,b){r.enter(a,e,d);h.$$postDigest(function(){f("enter","ng-enter",a,e,d,function(){b&&m(b,0,!1)})})},leave:function(a,e){h.$$postDigest(function(){f("leave","ng-leave",a,null,null,function(){r.leave(a,e)})})},move:function(a,e,d,b){r.move(a,e,d);h.$$postDigest(function(){f("move","ng-move",a,null,null,function(){b&&m(b,0,!1)})})},addClass:function(a,e,d){f("addClass",e,a,
null,null,function(){r.addClass(a,e,d)})},removeClass:function(a,e,d){f("removeClass",e,a,null,null,function(){r.removeClass(a,e,d)})},enabled:function(a){arguments.length&&(z.running=!a);return!z.running}}}]);t.register("",["$window","$sniffer","$timeout",function(r,p,u){function g(c,l,k){function q(a){var c=0;a=n.isString(a)?a.split(/\s*,\s*/):[];h(a,function(a){c=Math.max(parseFloat(a)||0,c)});return c}if(p.transitions||p.animations){if(-1==["ng-enter","ng-leave","ng-move"].indexOf(l)){var g=0;
h(c,function(a){a.nodeType==v&&(a=r.getComputedStyle(a)||{},g=Math.max(q(a[f+d]),q(a[e+d]),g))});if(0<g){k();return}}c.addClass(l);var m=0;h(c,function(c){if(c.nodeType==v){c=r.getComputedStyle(c)||{};var l=Math.max(q(c[f+b]),q(c[e+b])),k=Math.max(q(c[w+b]),q(c[a+b])),h=Math.max(q(c[f+d]),q(c[e+d])),g=Math.max(q(c[w+d]),q(c[a+d]));0<g&&(g*=Math.max(parseInt(c[w+t])||0,parseInt(c[a+t])||0,1));m=Math.max(k+g,l+h,m)}});if(0<m){var x=c[0];x.style[f+s]="none";x.style[e+s]="none";var y="";h(l.split(" "),
function(a,c){y+=(0<c?" ":"")+a+"-active"});c.prop("clientWidth");x.style[f+s]="";x.style[e+s]="";c.addClass(y);u(k,1E3*m,!1);return function(a){c.removeClass(l);c.removeClass(y);a&&k()}}c.removeClass(l)}k()}function m(a,d){var b="";a=n.isArray(a)?a:a.split(/\s+/);h(a,function(a,c){a&&0<a.length&&(b+=(0<c?" ":"")+a+d)});return b}var h=n.forEach,w="animation",f="transition",a=p.vendorPrefix+"Animation",e=p.vendorPrefix+"Transition",d="Duration",b="Delay",s="Property",t="IterationCount",v=1;return{enter:function(a,
b){return g(a,"ng-enter",b)},leave:function(a,b){return g(a,"ng-leave",b)},move:function(a,b){return g(a,"ng-move",b)},addClass:function(a,b,d){return g(a,m(b,"-add"),d)},removeClass:function(a,b,d){return g(a,m(b,"-remove"),d)}}}])}])})(window,window.angular);
/*
//@ sourceMappingURL=angular-animate.min.js.map
*/

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -8,6 +8,17 @@
/**
* @ngdoc overview
* @name ngCookies
* @description
*
* # ngCookies
*
* Provides the {@link ngCookies.$cookies `$cookies`} and
* {@link ngCookies.$cookieStore `$cookieStore`} services.
*
* {@installModule cookies}
*
* See {@link ngCookies.$cookies `$cookies`} and
* {@link ngCookies.$cookieStore `$cookieStore`} for usage.
*/
@ -23,6 +34,8 @@ angular.module('ngCookies', ['ng']).
* Only a simple Object is exposed and by adding or removing properties to/from
* this object, new cookies are created/deleted at the end of current $eval.
*
* Requires the {@link ngCookies `ngCookies`} module to be installed.
*
* @example
<doc:example>
<doc:source>
@ -127,6 +140,9 @@ angular.module('ngCookies', ['ng']).
* Provides a key-value (string-object) storage, that is backed by session cookies.
* Objects put or retrieved from this storage are automatically serialized or
* deserialized by angular's toJson/fromJson.
*
* Requires the {@link ngCookies `ngCookies`} module to be installed.
*
* @example
*/
factory('$cookieStore', ['$cookies', function($cookies) {

View file

@ -1,5 +1,5 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/

View file

@ -2,7 +2,7 @@
"version":3,
"file":"angular-cookies.min.js",
"lineCount":7,
"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAQtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA0BW,UA1BX,CA0BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CAQAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CAEE,CADAY,CACK,CADGZ,CAAA,CAAQW,CAAR,CACH,CAAAjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAAL,EAMWA,CANX,GAMqBX,CAAA,CAAYU,CAAZ,CANrB,GAOEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CARZ,EACMnB,CAAAqB,UAAA,CAAkBd,CAAA,CAAYU,CAAZ,CAAlB,CAAJ,CACEX,CAAA,CAAQW,CAAR,CADF,CACkBV,CAAA,CAAYU,CAAZ,CADlB,CAGE,OAAOX,CAAA,CAAQW,CAAR,CASb,IAAIE,CAAJ,CAIE,IAAKF,CAAL,GAFAK,EAEahB,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBK,CAAA,CAAeL,CAAf,CAAtB,GAEMN,CAAA,CAAYW,CAAA,CAAeL,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBK,CAAA,CAAeL,CAAf,CALpB,CAlCU,CARhB,CAEA;MAAOX,EA1BqE,CAA3D,CA1BvB,CAAAH,QAAA,CAsHW,cAtHX,CAsH2B,CAAC,UAAD,CAAa,QAAQ,CAACoB,CAAD,CAAW,CAErD,MAAO,KAYAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHP,CACG,CADKK,CAAA,CAASE,CAAT,CACL,EAAQzB,CAAA0B,SAAA,CAAiBR,CAAjB,CAAR,CAAkCA,CAFxB,CAZd,KA4BAS,QAAQ,CAACF,CAAD,CAAMP,CAAN,CAAa,CACxBK,CAAA,CAASE,CAAT,CAAA,CAAgBzB,CAAA4B,OAAA,CAAeV,CAAf,CADQ,CA5BrB,QA0CGW,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CA1CjB,CAF8C,CAAhC,CAtH3B,CARsC,CAArC,CAAA,CAkLE1B,MAlLF,CAkLUA,MAAAC,QAlLV;",
"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA4BW,UA5BX,CA4BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CAQAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CAEE,CADAY,CACK,CADGZ,CAAA,CAAQW,CAAR,CACH,CAAAjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAAL,EAMWA,CANX,GAMqBX,CAAA,CAAYU,CAAZ,CANrB,GAOEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CARZ,EACMnB,CAAAqB,UAAA,CAAkBd,CAAA,CAAYU,CAAZ,CAAlB,CAAJ,CACEX,CAAA,CAAQW,CAAR,CADF,CACkBV,CAAA,CAAYU,CAAZ,CADlB,CAGE,OAAOX,CAAA,CAAQW,CAAR,CASb,IAAIE,CAAJ,CAIE,IAAKF,CAAL,GAFAK,EAEahB,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBK,CAAA,CAAeL,CAAf,CAAtB,GAEMN,CAAA,CAAYW,CAAA,CAAeL,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBK,CAAA,CAAeL,CAAf,CALpB,CAlCU,CARhB,CAEA;MAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA2HW,cA3HX,CA2H2B,CAAC,UAAD,CAAa,QAAQ,CAACoB,CAAD,CAAW,CAErD,MAAO,KAYAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHP,CACG,CADKK,CAAA,CAASE,CAAT,CACL,EAAQzB,CAAA0B,SAAA,CAAiBR,CAAjB,CAAR,CAAkCA,CAFxB,CAZd,KA4BAS,QAAQ,CAACF,CAAD,CAAMP,CAAN,CAAa,CACxBK,CAAA,CAASE,CAAT,CAAA,CAAgBzB,CAAA4B,OAAA,CAAeV,CAAf,CADQ,CA5BrB,QA0CGW,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CA1CjB,CAF8C,CAAhC,CA3H3B,CAnBsC,CAArC,CAAA,CAkME1B,MAlMF,CAkMUA,MAAAC,QAlMV;",
"sources":["angular-cookies.js"],
"names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","isDefined","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"]
}

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -29,10 +29,13 @@ function setupModuleLoader(window) {
* @name angular.module
* @description
*
* The `angular.module` is a global place for creating and registering Angular modules. All
* modules (angular core or 3rd party) that should be available to an application must be
* The `angular.module` is a global place for creating, registering and retrieving Angular modules.
* All modules (angular core or 3rd party) that should be available to an application must be
* registered using this mechanism.
*
* When passed two or more arguments, a new module is created. If passed only one argument, an
* existing module (the name passed as the first argument to `module`) is retrieved.
*
*
* # Module
*

View file

@ -1,5 +1,5 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/

View file

@ -2,7 +2,7 @@
"version":3,
"file":"angular-loader.min.js",
"lineCount":7,
"mappings":"A;;;;;aAgBAA,SAA0B,CAACC,CAAD,CAAS,CAEjCC,QAASA,EAAM,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAqB,CAClC,MAAOF,EAAA,CAAIC,CAAJ,CAAP,GAAqBD,CAAA,CAAIC,CAAJ,CAArB,CAAiCC,CAAA,EAAjC,CADkC,CAIpC,MAAOH,EAAA,CAAOA,CAAA,CAAOD,CAAP,CAAe,SAAf,CAA0BK,MAA1B,CAAP,CAA0C,QAA1C,CAAoD,QAAQ,EAAG,CAEpE,IAAIC,EAAU,EAgDd,OAAOC,SAAe,CAACJ,CAAD,CAAOK,CAAP,CAAiBC,CAAjB,CAA2B,CAC3CD,CAAJ,EAAgBF,CAAAI,eAAA,CAAuBP,CAAvB,CAAhB,GACEG,CAAA,CAAQH,CAAR,CADF,CACkB,IADlB,CAGA,OAAOF,EAAA,CAAOK,CAAP,CAAgBH,CAAhB,CAAsB,QAAQ,EAAG,CA2MtCQ,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiC,CACnD,MAAO,SAAQ,EAAG,CAChBC,CAAA,CAAYD,CAAZ,EAA4B,MAA5B,CAAA,CAAoC,CAACF,CAAD,CAAWC,CAAX,CAAmBG,SAAnB,CAApC,CACA,OAAOC,EAFS,CADiC,CA1MrD,GAAI,CAACT,CAAL,CACE,KAAMU,OAAA,CAAO,WAAP,CAAA,CAAoB,OAApB,CAEWf,CAFX,CAAN,CAMF,IAAIY,EAAc,EAAlB,CAGII,EAAY,EAHhB,CAKIC,EAAST,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CALb,CAQIM,EAAiB,cAELF,CAFK,YAGPI,CAHO,UAaTX,CAbS,MAsBbL,CAtBa,UAkCTQ,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAlCS,SA6CVA,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA7CU,SAwDVA,CAAA,CAAY,UAAZ;AAAwB,SAAxB,CAxDU,OAmEZA,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAnEY,UA+ETA,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CA/ES,WAgHRA,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CAhHQ,QA2HXA,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CA3HW,YAsIPA,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CAtIO,WAkJRA,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CAlJQ,QA6JXS,CA7JW,KAyKdC,QAAQ,CAACC,CAAD,CAAQ,CACnBH,CAAAI,KAAA,CAAeD,CAAf,CACA,OAAO,KAFY,CAzKF,CA+KjBb,EAAJ,EACEW,CAAA,CAAOX,CAAP,CAGF,OAAQQ,EAnM8B,CAAjC,CAJwC,CAlDmB,CAA/D,CAN0B,CAAnClB,CAAA,CAmREC,MAnRF;",
"mappings":"A;;;;;aAgBAA,SAA0B,CAACC,CAAD,CAAS,CAEjCC,QAASA,EAAM,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAqB,CAClC,MAAOF,EAAA,CAAIC,CAAJ,CAAP,GAAqBD,CAAA,CAAIC,CAAJ,CAArB,CAAiCC,CAAA,EAAjC,CADkC,CAIpC,MAAOH,EAAA,CAAOA,CAAA,CAAOD,CAAP,CAAe,SAAf,CAA0BK,MAA1B,CAAP,CAA0C,QAA1C,CAAoD,QAAQ,EAAG,CAEpE,IAAIC,EAAU,EAmDd,OAAOC,SAAe,CAACJ,CAAD,CAAOK,CAAP,CAAiBC,CAAjB,CAA2B,CAC3CD,CAAJ,EAAgBF,CAAAI,eAAA,CAAuBP,CAAvB,CAAhB,GACEG,CAAA,CAAQH,CAAR,CADF,CACkB,IADlB,CAGA,OAAOF,EAAA,CAAOK,CAAP,CAAgBH,CAAhB,CAAsB,QAAQ,EAAG,CA2MtCQ,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiC,CACnD,MAAO,SAAQ,EAAG,CAChBC,CAAA,CAAYD,CAAZ,EAA4B,MAA5B,CAAA,CAAoC,CAACF,CAAD,CAAWC,CAAX,CAAmBG,SAAnB,CAApC,CACA,OAAOC,EAFS,CADiC,CA1MrD,GAAI,CAACT,CAAL,CACE,KAAMU,OAAA,CAAO,WAAP,CAAA,CAAoB,OAApB,CAEWf,CAFX,CAAN,CAMF,IAAIY,EAAc,EAAlB,CAGII,EAAY,EAHhB,CAKIC,EAAST,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CALb,CAQIM,EAAiB,cAELF,CAFK,YAGPI,CAHO,UAaTX,CAbS,MAsBbL,CAtBa,UAkCTQ,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAlCS,SA6CVA,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA7CU,SAwDVA,CAAA,CAAY,UAAZ;AAAwB,SAAxB,CAxDU,OAmEZA,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAnEY,UA+ETA,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CA/ES,WAgHRA,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CAhHQ,QA2HXA,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CA3HW,YAsIPA,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CAtIO,WAkJRA,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CAlJQ,QA6JXS,CA7JW,KAyKdC,QAAQ,CAACC,CAAD,CAAQ,CACnBH,CAAAI,KAAA,CAAeD,CAAf,CACA,OAAO,KAFY,CAzKF,CA+KjBb,EAAJ,EACEW,CAAA,CAAOX,CAAP,CAGF,OAAQQ,EAnM8B,CAAjC,CAJwC,CArDmB,CAA/D,CAN0B,CAAnClB,CAAA,CAsREC,MAtRF;",
"sources":["angular-loader.js"],
"names":["setupModuleLoader","window","ensure","obj","name","factory","Object","modules","module","requires","configFn","hasOwnProperty","invokeLater","provider","method","insertMethod","invokeQueue","arguments","moduleInstance","minErr","runBlocks","config","run","block","push"]
}

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*
@ -316,7 +316,7 @@ angular.mock.$LogProvider = function() {
}
this.debugEnabled = function(flag) {
if (isDefined(flag)) {
if (angular.isDefined(flag)) {
debug = flag;
return this;
} else {
@ -1851,9 +1851,11 @@ angular.mock.clearDataCache = function() {
*
* See {@link angular.mock.inject inject} for usage example
*
* @param {...(string|Function)} fns any number of modules which are represented as string
* @param {...(string|Function|Object)} fns any number of modules which are represented as string
* aliases or as anonymous module initialization functions. The modules are used to
* configure the injector. The 'ng' and 'ngMock' modules are automatically loaded.
* configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
* object literal is passed they will be register as values in the module, the key being
* the module name and the value being what is returned.
*/
window.module = angular.mock.module = function() {
var moduleFns = Array.prototype.slice.call(arguments, 0);
@ -1865,7 +1867,15 @@ angular.mock.clearDataCache = function() {
} else {
var modules = currentSpec.$modules || (currentSpec.$modules = []);
angular.forEach(moduleFns, function(module) {
if (angular.isObject(module) && !angular.isArray(module)) {
modules.push(function($provide) {
angular.forEach(module, function(value, key) {
$provide.value(key, value);
});
});
} else {
modules.push(module);
}
});
}
}

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -11,6 +11,16 @@ var $resourceMinErr = angular.$$minErr('$resource');
* @ngdoc overview
* @name ngResource
* @description
*
* # ngResource
*
* `ngResource` is the name of the optional Angular module that adds support for interacting with
* [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
* `ngReource` provides the {@link ngResource.$resource `$resource`} serivce.
*
* {@installModule resource}
*
* See {@link ngResource.$resource `$resource`} for usage.
*/
/**
@ -25,23 +35,14 @@ var $resourceMinErr = angular.$$minErr('$resource');
* The returned resource object has action methods which provide high-level behaviors without
* the need to interact with the low level {@link ng.$http $http} service.
*
* # Installation
* To use $resource make sure you have included the `angular-resource.js` that comes in Angular
* package. You can also find this file on Google CDN, bower as well as at
* {@link http://code.angularjs.org/ code.angularjs.org}.
*
* Finally load the module in your application:
*
* angular.module('app', ['ngResource']);
*
* and you are ready to get started!
* Requires the {@link ngResource `ngResource`} module to be installed.
*
* @param {string} url A parametrized URL template with parameters prefixed by `:` as in
* `/user/:username`. If you are using a URL with a port number (e.g.
* `http://example.com:8080/api`), it will be respected.
*
* If you are using a url with a suffix, just add the suffix, like this:
* `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')
* `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
* or even `$resource('http://example.com/resource/:resource_id.:format')`
* If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
* collapsed down to a single `.`. If you need this sequence to appear and not collapse then you

View file

@ -1,5 +1,5 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -26,7 +26,12 @@ function inherit(parent, extra) {
* @name ngRoute
* @description
*
* Module that provides routing and deeplinking services and directives for angular apps.
* # ngRoute
*
* The `ngRoute` module provides routing and deeplinking services and directives for angular apps.
*
* {@installModule route}
*
*/
var ngRouteModule = angular.module('ngRoute', ['ng']).
@ -40,6 +45,8 @@ var ngRouteModule = angular.module('ngRoute', ['ng']).
* @description
*
* Used for configuring routes. See {@link ngRoute.$route $route} for an example.
*
* Requires the {@link ngRoute `ngRoute`} module to be installed.
*/
function $RouteProvider(){
var routes = {};
@ -241,13 +248,15 @@ function $RouteProvider(){
* @property {Array.<Object>} routes Array of all configured routes.
*
* @description
* Is used for deep-linking URLs to controllers and views (HTML partials).
* `$route` 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.
*
* Requires the {@link ngRoute `ngRoute`} module to be installed.
*
* You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.
*
* The `$route` service is typically used in conjunction with {@link ngRoute.directive:ngView ngView}
* directive and the {@link ngRoute.$routeParams $routeParams} service.
* The `$route` service is typically used in conjunction with the {@link ngRoute.directive:ngView `ngView`}
* directive and the {@link ngRoute.$routeParams `$routeParams`} service.
*
* @example
This example shows how changing the URL hash causes the `$route` to match a route against the
@ -449,7 +458,6 @@ function $RouteProvider(){
var m = route.regexp.exec(on);
if (!m) return null;
var N = 0;
for (var i = 1, len = m.length; i < len; ++i) {
var key = keys[i - 1];
@ -562,7 +570,7 @@ function $RouteProvider(){
function interpolate(string, params) {
var result = [];
forEach((string||'').split(':'), function(segment, i) {
if (i == 0) {
if (i === 0) {
result.push(segment);
} else {
var segmentMatch = segment.match(/(\w+)(.*)/);
@ -586,9 +594,13 @@ ngRouteModule.provider('$routeParams', $RouteParamsProvider);
* @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 ngRoute.$route $route} path is matched.
* The `$routeParams` service allows you to retrieve the current set of route parameters.
*
* Requires the {@link ngRoute `ngRoute`} module to be installed.
*
* The route parameters are a combination of {@link ng.$location `$location`}'s
* {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.
* The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.
*
* In case of parameter name collision, `path` params take precedence over `search` params.
*
@ -613,6 +625,8 @@ function $RouteParamsProvider() {
this.$get = function() { return {}; };
}
ngRouteModule.directive('ngView', ngViewFactory);
/**
* @ngdoc directive
* @name ngRoute.directive:ngView
@ -625,6 +639,8 @@ function $RouteParamsProvider() {
* Every time the current route changes, the included view changes with it according to the
* configuration of the `$route` service.
*
* Requires the {@link ngRoute `ngRoute`} module to be installed.
*
* @animations
* enter - animation is used to bring new content into the browser.
* leave - animation is used to animate existing content away.
@ -780,22 +796,18 @@ function $RouteParamsProvider() {
* @description
* Emitted every time the ngView content is reloaded.
*/
var NG_VIEW_PRIORITY = 500;
var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$animate',
function($route, $anchorScroll, $compile, $controller, $animate) {
ngViewFactory.$inject = ['$route', '$anchorScroll', '$compile', '$controller', '$animate'];
function ngViewFactory( $route, $anchorScroll, $compile, $controller, $animate) {
return {
restrict: 'ECA',
terminal: true,
priority: NG_VIEW_PRIORITY,
compile: function(element, attr) {
var onloadExp = attr.onload || '';
element.html('');
var anchor = jqLite(document.createComment(' ngView '));
element.replaceWith(anchor);
return function(scope) {
var currentScope, currentElement;
priority: 1000,
transclude: 'element',
compile: function(element, attr, linker) {
return function(scope, $element, attr) {
var currentScope,
currentElement,
onloadExp = attr.onload || '';
scope.$on('$routeChangeSuccess', update);
update();
@ -816,35 +828,36 @@ var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$a
template = locals && locals.$template;
if (template) {
var newScope = scope.$new();
linker(newScope, function(clone) {
cleanupLastView();
currentScope = scope.$new();
currentElement = element.clone();
currentElement.html(template);
$animate.enter(currentElement, null, anchor);
clone.html(template);
$animate.enter(clone, null, $element);
var link = $compile(currentElement, false, NG_VIEW_PRIORITY - 1),
var link = $compile(clone.contents()),
current = $route.current;
currentScope = current.scope = newScope;
currentElement = clone;
if (current.controller) {
locals.$scope = currentScope;
var controller = $controller(current.controller, locals);
if (current.controllerAs) {
currentScope[current.controllerAs] = controller;
}
currentElement.data('$ngControllerController', controller);
currentElement.children().data('$ngControllerController', controller);
clone.data('$ngControllerController', controller);
clone.contents().data('$ngControllerController', controller);
}
current.scope = currentScope;
link(currentScope);
currentScope.$emit('$viewContentLoaded');
currentScope.$eval(onloadExp);
// $anchorScroll might listen on event...
$anchorScroll();
});
} else {
cleanupLastView();
}
@ -852,9 +865,7 @@ var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$a
}
}
};
}];
ngRouteModule.directive('ngView', ngViewDirective);
}
})(window, window.angular);

View file

@ -1,15 +1,15 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/
(function(p,b,E){'use strict';function u(b,d){return l(new (l(function(){},{prototype:b})),d)}var v=b.copy,A=b.equals,l=b.extend,t=b.forEach,n=b.isDefined,w=b.isFunction,x=b.isString,B=b.element;p=b.module("ngRoute",["ng"]).provider("$route",function(){function b(c,q){var d=q.caseInsensitiveMatch,m={originalPath:c,regexp:c},l=m.keys=[];c=c.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?|\*])?/g,function(c,b,q,d){c="?"===d?d:null;d="*"===d?d:null;l.push({name:q,optional:!!c});b=b||"";return""+
(c?"":b)+"(?:"+(c?b:"")+(d&&"(.+)?"||"([^/]+)?")+")"+(c||"")}).replace(/([\/$\*])/g,"\\$1");m.regexp=RegExp("^"+c+"$",d?"i":"");return m}var d={};this.when=function(c,q){d[c]=l({reloadOnSearch:!0},q,c&&b(c,q));if(c){var h="/"==c[c.length-1]?c.substr(0,c.length-1):c+"/";d[h]=l({redirectTo:c},b(h,q))}return this};this.otherwise=function(c){this.when(null,c);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(c,b,h,m,y,p,C,D){function r(){var a=
s(),e=k.current;if(a&&e&&a.$$route===e.$$route&&A(a.pathParams,e.pathParams)&&!a.reloadOnSearch&&!f)e.params=a.params,v(e.params,h),c.$broadcast("$routeUpdate",e);else if(a||e)f=!1,c.$broadcast("$routeChangeStart",a,e),(k.current=a)&&a.redirectTo&&(x(a.redirectTo)?b.path(g(a.redirectTo,a.params)).search(a.params).replace():b.url(a.redirectTo(a.pathParams,b.path(),b.search())).replace()),m.when(a).then(function(){if(a){var c=l({},a.resolve),b,e;t(c,function(a,b){c[b]=x(a)?y.get(a):y.invoke(a)});n(b=
a.template)?w(b)&&(b=b(a.params)):n(e=a.templateUrl)&&(w(e)&&(e=e(a.params)),e=D.getTrustedResourceUrl(e),n(e)&&(a.loadedTemplateUrl=e,b=p.get(e,{cache:C}).then(function(a){return a.data})));n(b)&&(c.$template=b);return m.all(c)}}).then(function(b){a==k.current&&(a&&(a.locals=b,v(a.params,h)),c.$broadcast("$routeChangeSuccess",a,e))},function(b){a==k.current&&c.$broadcast("$routeChangeError",a,e,b)})}function s(){var a,c;t(d,function(d,k){var f;if(f=!c){var g=b.path();f=d.keys;var m={};if(d.regexp)if(g=
d.regexp.exec(g)){for(var h=1,p=g.length;h<p;++h){var r=f[h-1],n="string"==typeof g[h]?decodeURIComponent(g[h]):g[h];r&&n&&(m[r.name]=n)}f=m}else f=null;else f=null;f=a=f}f&&(c=u(d,{params:l({},b.search(),a),pathParams:a}),c.$$route=d)});return c||d[null]&&u(d[null],{params:{},pathParams:{}})}function g(a,c){var b=[];t((a||"").split(":"),function(a,d){if(0==d)b.push(a);else{var f=a.match(/(\w+)(.*)/),g=f[1];b.push(c[g]);b.push(f[2]||"");delete c[g]}});return b.join("")}var f=!1,k={routes:d,reload:function(){f=
!0;c.$evalAsync(r)}};c.$on("$locationChangeSuccess",r);return k}]});p.provider("$routeParams",function(){this.$get=function(){return{}}});var z=500;p.directive("ngView",["$route","$anchorScroll","$compile","$controller","$animate",function(b,d,c,q,h){return{restrict:"ECA",terminal:!0,priority:z,compile:function(m,l){var p=l.onload||"";m.html("");var n=B(document.createComment(" ngView "));m.replaceWith(n);return function(l){function r(){g&&(g.$destroy(),g=null);f&&(h.leave(f),f=null)}function s(){var k=
b.current&&b.current.locals,a=k&&k.$template;if(a){r();g=l.$new();f=m.clone();f.html(a);h.enter(f,null,n);var a=c(f,!1,z-1),e=b.current;e.controller&&(k.$scope=g,k=q(e.controller,k),e.controllerAs&&(g[e.controllerAs]=k),f.data("$ngControllerController",k),f.children().data("$ngControllerController",k));e.scope=g;a(g);g.$emit("$viewContentLoaded");g.$eval(p);d()}else r()}var g,f;l.$on("$routeChangeSuccess",s);s()}}}}])})(window,window.angular);
(function(q,c,I){'use strict';function x(c,f){return m(new (m(function(){},{prototype:c})),f)}function t(c,f,a,p,n){return{restrict:"ECA",terminal:!0,priority:1E3,transclude:"element",compile:function(g,m,D){return function(u,m,e){function g(){k&&(k.$destroy(),k=null);l&&(n.leave(l),l=null)}function s(){var h=c.current&&c.current.locals,y=h&&h.$template;if(y){var z=u.$new();D(z,function(d){g();d.html(y);n.enter(d,null,m);var G=a(d.contents()),r=c.current;k=r.scope=z;l=d;if(r.controller){h.$scope=
k;var e=p(r.controller,h);r.controllerAs&&(k[r.controllerAs]=e);d.data("$ngControllerController",e);d.contents().data("$ngControllerController",e)}G(k);k.$emit("$viewContentLoaded");k.$eval(b);f()})}else g()}var k,l,b=e.onload||"";u.$on("$routeChangeSuccess",s);s()}}}}var A=c.copy,H=c.equals,m=c.extend,w=c.forEach,v=c.isDefined,B=c.isFunction,C=c.isString;q=c.module("ngRoute",["ng"]).provider("$route",function(){function c(a,p){var f=p.caseInsensitiveMatch,g={originalPath:a,regexp:a},m=g.keys=[];
a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?|\*])?/g,function(a,c,p,e){a="?"===e?e:null;e="*"===e?e:null;m.push({name:p,optional:!!a});c=c||"";return""+(a?"":c)+"(?:"+(a?c:"")+(e&&"(.+)?"||"([^/]+)?")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");g.regexp=RegExp("^"+a+"$",f?"i":"");return g}var f={};this.when=function(a,p){f[a]=m({reloadOnSearch:!0},p,a&&c(a,p));if(a){var n="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";f[n]=m({redirectTo:a},c(n,p))}return this};this.otherwise=function(a){this.when(null,
a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,n,g,s,q,u,t){function e(){var b=E(),h=l.current;if(b&&h&&b.$$route===h.$$route&&H(b.pathParams,h.pathParams)&&!b.reloadOnSearch&&!k)h.params=b.params,A(h.params,n),a.$broadcast("$routeUpdate",h);else if(b||h)k=!1,a.$broadcast("$routeChangeStart",b,h),(l.current=b)&&b.redirectTo&&(C(b.redirectTo)?c.path(F(b.redirectTo,b.params)).search(b.params).replace():c.url(b.redirectTo(b.pathParams,
c.path(),c.search())).replace()),g.when(b).then(function(){if(b){var a=m({},b.resolve),c,d;w(a,function(b,c){a[c]=C(b)?s.get(b):s.invoke(b)});v(c=b.template)?B(c)&&(c=c(b.params)):v(d=b.templateUrl)&&(B(d)&&(d=d(b.params)),d=t.getTrustedResourceUrl(d),v(d)&&(b.loadedTemplateUrl=d,c=q.get(d,{cache:u}).then(function(b){return b.data})));v(c)&&(a.$template=c);return g.all(a)}}).then(function(c){b==l.current&&(b&&(b.locals=c,A(b.params,n)),a.$broadcast("$routeChangeSuccess",b,h))},function(c){b==l.current&&
a.$broadcast("$routeChangeError",b,h,c)})}function E(){var b,a;w(f,function(e,k){var d;if(d=!a){var f=c.path();d=e.keys;var r={};if(e.regexp)if(f=e.regexp.exec(f)){for(var g=1,l=f.length;g<l;++g){var n=d[g-1],q="string"==typeof f[g]?decodeURIComponent(f[g]):f[g];n&&q&&(r[n.name]=q)}d=r}else d=null;else d=null;d=b=d}d&&(a=x(e,{params:m({},c.search(),b),pathParams:b}),a.$$route=e)});return a||f[null]&&x(f[null],{params:{},pathParams:{}})}function F(b,c){var a=[];w((b||"").split(":"),function(b,d){if(0===
d)a.push(b);else{var e=b.match(/(\w+)(.*)/),f=e[1];a.push(c[f]);a.push(e[2]||"");delete c[f]}});return a.join("")}var k=!1,l={routes:f,reload:function(){k=!0;a.$evalAsync(e)}};a.$on("$locationChangeSuccess",e);return l}]});q.provider("$routeParams",function(){this.$get=function(){return{}}});q.directive("ngView",t);t.$inject=["$route","$anchorScroll","$compile","$controller","$animate"]})(window,window.angular);
/*
//@ sourceMappingURL=angular-route.min.js.map
*/

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -12,24 +12,13 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
* @name ngSanitize
* @description
*
* # ngSanitize
*
* The `ngSanitize` module provides functionality to sanitize HTML.
*
* # Installation
* As a separate module, it must be loaded after Angular core is loaded; otherwise, an 'Uncaught Error:
* No module: ngSanitize' runtime error will occur.
* {@installModule sanitize}
*
* <pre>
* <script src="angular.js"></script>
* <script src="angular-sanitize.js"></script>
* </pre>
*
* # Usage
* To make sure the module is available to your application, declare it as a dependency of you application
* module.
*
* <pre>
* angular.module('app', ['ngSanitize']);
* </pre>
* See {@link ngSanitize.$sanitize `$sanitize`} for usage.
*/
/*
@ -432,6 +421,8 @@ angular.module('ngSanitize', []).value('$sanitize', $sanitize);
* Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
* plain email address links.
*
* Requires the {@link ngSanitize `ngSanitize`} module to be installed.
*
* @param {string} text Input text.
* @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
* @returns {string} Html-linkified text.

View file

@ -1,5 +1,5 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/

File diff suppressed because one or more lines are too long

View file

@ -9472,7 +9472,7 @@ if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
})( window );
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -9509,10 +9509,21 @@ if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
function minErr(module) {
return function () {
var prefix = '[' + (module ? module + ':' : '') + arguments[0] + '] ',
var code = arguments[0],
prefix = '[' + (module ? module + ':' : '') + code + '] ',
template = arguments[1],
templateArgs = arguments,
message;
stringify = function (obj) {
if (isFunction(obj)) {
return obj.toString().replace(/ \{[\s\S]*$/, '');
} else if (isUndefined(obj)) {
return 'undefined';
} else if (!isString(obj)) {
return JSON.stringify(obj);
}
return obj;
},
message, i;
message = prefix + template.replace(/\{\d+\}/g, function (match) {
var index = +match.slice(1, -1), arg;
@ -9531,6 +9542,13 @@ function minErr(module) {
return match;
});
message = message + '\nhttp://errors.angularjs.org/' + version.full + '/' +
(module ? module + '/' : '') + code;
for (i = 2; i < arguments.length; i++) {
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
encodeURIComponent(stringify(arguments[i]));
}
return new Error(message);
};
}
@ -9593,7 +9611,7 @@ if ('i' !== 'I'.toLowerCase()) {
var /** holds major version number for IE or NaN for real browsers */
msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]),
msie,
jqLite, // delay binding since jQuery could be loaded after us.
jQuery, // delay binding
slice = [].slice,
@ -9609,6 +9627,16 @@ var /** holds major version number for IE or NaN for real browsers */
nodeName_,
uid = ['0', '0', '0'];
/**
* IE 11 changed the format of the UserAgent string.
* See http://msdn.microsoft.com/en-us/library/ms537503.aspx
*/
msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);
if (isNaN(msie)) {
msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);
}
/**
* @private
* @param {*} obj
@ -10723,10 +10751,13 @@ function setupModuleLoader(window) {
* @name angular.module
* @description
*
* The `angular.module` is a global place for creating and registering Angular modules. All
* modules (angular core or 3rd party) that should be available to an application must be
* The `angular.module` is a global place for creating, registering and retrieving Angular modules.
* All modules (angular core or 3rd party) that should be available to an application must be
* registered using this mechanism.
*
* When passed two or more arguments, a new module is created. If passed only one argument, an
* existing module (the name passed as the first argument to `module`) is retrieved.
*
*
* # Module
*
@ -10997,11 +11028,11 @@ function setupModuleLoader(window) {
* - `codeName` `{string}` Code name of the release, such as "jiggling-armfat".
*/
var version = {
full: '1.2.0rc1', // all of these placeholder strings will be replaced by grunt's
full: '1.2.0-rc.2', // all of these placeholder strings will be replaced by grunt's
major: 1, // package task
minor: 2,
dot: 0,
codeName: 'spooky-giraffe'
codeName: 'barehand-atomsplitting'
};
@ -12064,6 +12095,7 @@ function annotate(fn) {
if (typeof fn == 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
if (fn.length) {
fnText = fn.toString().replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS);
forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){
@ -12071,6 +12103,7 @@ function annotate(fn) {
$inject.push(name);
});
});
}
fn.$inject = $inject;
}
} else if (isArray(fn)) {
@ -12794,7 +12827,7 @@ var $AnimateProvider = ['$provide', function($provide) {
forEach(element, function(node) {
parentNode.insertBefore(node, afterNextSibling);
});
$timeout(done || noop, 0, false);
done && $timeout(done, 0, false);
},
/**
@ -12811,7 +12844,7 @@ var $AnimateProvider = ['$provide', function($provide) {
*/
leave : function(element, done) {
element.remove();
$timeout(done || noop, 0, false);
done && $timeout(done, 0, false);
},
/**
@ -12853,7 +12886,7 @@ var $AnimateProvider = ['$provide', function($provide) {
className :
isArray(className) ? className.join(' ') : '';
element.addClass(className);
$timeout(done || noop, 0, false);
done && $timeout(done, 0, false);
},
/**
@ -12874,7 +12907,7 @@ var $AnimateProvider = ['$provide', function($provide) {
className :
isArray(className) ? className.join(' ') : '';
element.removeClass(className);
$timeout(done || noop, 0, false);
done && $timeout(done, 0, false);
},
enabled : noop
@ -15173,7 +15206,7 @@ function $HttpProvider() {
// strip json vulnerability protection prefix
data = data.replace(PROTECTION_PREFIX, '');
if (JSON_START.test(data) && JSON_END.test(data))
data = fromJson(data, true);
data = fromJson(data);
}
return data;
}],
@ -15489,6 +15522,7 @@ function $HttpProvider() {
* return function(promise) {
* return promise.then(function(response) {
* // do something on success
* return response;
* }, function(response) {
* // do something on error
* if (canRecover(response)) {
@ -15968,7 +16002,7 @@ function $HttpProvider() {
if (cache) {
cachedResp = cache.get(url);
if (cachedResp) {
if (isDefined(cachedResp)) {
if (cachedResp.then) {
// cached request has already been sent, but there is no response yet
cachedResp.then(removePendingReq, removePendingReq);
@ -15988,7 +16022,7 @@ function $HttpProvider() {
}
// if we won't have the response in cache, send the request to the backend
if (!cachedResp) {
if (isUndefined(cachedResp)) {
$httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
config.withCredentials, config.responseType);
}
@ -16240,21 +16274,30 @@ var $interpolateMinErr = minErr('$interpolate');
* Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
*
* @example
<doc:example>
<doc:example module="customInterpolationApp">
<doc:source>
<script>
var myApp = angular.module('App', [], function($interpolateProvider) {
var customInterpolationApp = angular.module('customInterpolationApp', []);
customInterpolationApp.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('//');
$interpolateProvider.endSymbol('//');
});
function Controller($scope) {
$scope.label = "Interpolation Provider Sample";
}
customInterpolationApp.controller('DemoController', function DemoController() {
this.label = "This bindings is brought you you by // interpolation symbols.";
});
</script>
<div ng-app="App" ng-controller="Controller">
//label//
<div ng-app="App" ng-controller="DemoController as demo">
//demo.label//
</div>
</doc:source>
<doc:scenario>
it('should interpolate binding with custom symbols', function() {
expect(binding('demo.label')).toBe('This bindings is brought you you by // interpolation symbols.');
});
</doc:scenario>
</doc:example>
*/
function $InterpolateProvider() {
@ -17318,7 +17361,6 @@ var $parseMinErr = minErr('$parse');
// 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.
//
@ -17992,9 +18034,21 @@ function parser(text, json, $filter, csp){
}
var fnPtr = fn(scope, locals, context) || noop;
// IE stupidity!
return fnPtr.apply
var v = fnPtr.apply
? fnPtr.apply(context, args)
: fnPtr(args[0], args[1], args[2], args[3], args[4]);
// Check for promise
if (v && v.then) {
var p = v;
if (!('$$v' in v)) {
p.$$v = undefined;
p.then(function(val) { p.$$v = val; });
}
v = v.$$v;
}
return v;
};
}
@ -18298,6 +18352,8 @@ function $ParseProvider() {
* // since this fn executes async in a future turn of the event loop, we need to wrap
* // our code into an $apply call so that the model changes are properly observed.
* scope.$apply(function() {
* deferred.notify('About to greet ' + name + '.');
*
* if (okToGreet(name)) {
* deferred.resolve('Hello, ' + name + '!');
* } else {
@ -18314,6 +18370,8 @@ function $ParseProvider() {
* alert('Success: ' + greeting);
* }, function(reason) {
* alert('Failed: ' + reason);
* }, function(update) {
* alert('Got notification: ' + update);
* });
* </pre>
*
@ -18332,7 +18390,8 @@ function $ParseProvider() {
* A new instance of deferred is constructed by calling `$q.defer()`.
*
* The purpose of the deferred object is to expose the associated Promise instance as well as APIs
* that can be used for signaling the successful or unsuccessful completion of the task.
* that can be used for signaling the successful or unsuccessful completion, as well as the status
* of the task.
*
* **Methods**
*
@ -18340,6 +18399,8 @@ function $ParseProvider() {
* constructed via `$q.reject`, the promise will be rejected instead.
* - `reject(reason)` rejects the derived promise with the `reason`. This is equivalent to
* resolving it with a rejection constructed via `$q.reject`.
* - `notify(value)` - provides updates on the status of the promises execution. This may be called
* multiple times before the promise is either resolved or rejected.
*
* **Properties**
*
@ -18356,12 +18417,15 @@ function $ParseProvider() {
*
* **Methods**
*
* - `then(successCallback, errorCallback)` regardless of when the promise was or will be resolved
* 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.
* - `then(successCallback, errorCallback, notifyCallback)` regardless of when the promise was or
* will be resolved 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. Additionally, the notify callback may be called zero or more times to
* provide a progress indication, before the promise is resolved or rejected.
*
* This method *returns a new promise* which is resolved or rejected via the return value of the
* `successCallback` or `errorCallback`.
* `successCallback`, `errorCallback`. It also notifies via the return value of the `notifyCallback`
* method. The promise can not be resolved or rejected from the notifyCallback method.
*
* - `catch(errorCallback)` shorthand for `promise.then(null, errorCallback)`
*
@ -18513,7 +18577,7 @@ function qFactory(nextTick, exceptionHandler) {
var wrappedCallback = function(value) {
try {
result.resolve((callback || defaultCallback)(value));
result.resolve((isFunction(callback) ? callback : defaultCallback)(value));
} catch(e) {
result.reject(e);
exceptionHandler(e);
@ -18522,7 +18586,7 @@ function qFactory(nextTick, exceptionHandler) {
var wrappedErrback = function(reason) {
try {
result.resolve((errback || defaultErrback)(reason));
result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));
} catch(e) {
result.reject(e);
exceptionHandler(e);
@ -18531,7 +18595,7 @@ function qFactory(nextTick, exceptionHandler) {
var wrappedProgressback = function(progress) {
try {
result.notify((progressback || defaultCallback)(progress));
result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));
} catch(e) {
exceptionHandler(e);
}
@ -18569,7 +18633,7 @@ function qFactory(nextTick, exceptionHandler) {
} catch(e) {
return makePromise(e, false);
}
if (callbackOutput && callbackOutput.then) {
if (callbackOutput && isFunction(callbackOutput.then)) {
return callbackOutput.then(function() {
return makePromise(value, isResolved);
}, function(error) {
@ -18594,7 +18658,7 @@ function qFactory(nextTick, exceptionHandler) {
var ref = function(value) {
if (value && value.then) return value;
if (value && isFunction(value.then)) return value;
return {
then: function(callback) {
var result = defer();
@ -18647,7 +18711,12 @@ function qFactory(nextTick, exceptionHandler) {
then: function(callback, errback) {
var result = defer();
nextTick(function() {
result.resolve((errback || defaultErrback)(reason));
try {
result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));
} catch(e) {
result.reject(e);
exceptionHandler(e);
}
});
return result.promise;
}
@ -18673,7 +18742,7 @@ function qFactory(nextTick, exceptionHandler) {
var wrappedCallback = function(value) {
try {
return (callback || defaultCallback)(value);
return (isFunction(callback) ? callback : defaultCallback)(value);
} catch (e) {
exceptionHandler(e);
return reject(e);
@ -18682,7 +18751,7 @@ function qFactory(nextTick, exceptionHandler) {
var wrappedErrback = function(reason) {
try {
return (errback || defaultErrback)(reason);
return (isFunction(errback) ? errback : defaultErrback)(reason);
} catch (e) {
exceptionHandler(e);
return reject(e);
@ -18691,7 +18760,7 @@ function qFactory(nextTick, exceptionHandler) {
var wrappedProgressback = function(progress) {
try {
return (progressback || defaultCallback)(progress);
return (isFunction(progressback) ? progressback : defaultCallback)(progress);
} catch (e) {
exceptionHandler(e);
}
@ -18841,8 +18910,8 @@ function $RootScopeProvider(){
return TTL;
};
this.$get = ['$injector', '$exceptionHandler', '$parse',
function( $injector, $exceptionHandler, $parse) {
this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
function( $injector, $exceptionHandler, $parse, $browser) {
/**
* @ngdoc function
@ -18891,6 +18960,7 @@ function $RootScopeProvider(){
this['this'] = this.$root = this;
this.$$destroyed = false;
this.$$asyncQueue = [];
this.$$postDigestQueue = [];
this.$$listeners = {};
this.$$isolateBindings = {};
}
@ -18905,6 +18975,7 @@ function $RootScopeProvider(){
Scope.prototype = {
constructor: Scope,
/**
* @ngdoc function
* @name ng.$rootScope.Scope#$new
@ -18939,6 +19010,7 @@ function $RootScopeProvider(){
child.$root = this.$root;
// ensure that there is just one async queue per $rootScope and it's children
child.$$asyncQueue = this.$$asyncQueue;
child.$$postDigestQueue = this.$$postDigestQueue;
} 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
@ -19266,6 +19338,7 @@ function $RootScopeProvider(){
var watch, value, last,
watchers,
asyncQueue = this.$$asyncQueue,
postDigestQueue = this.$$postDigestQueue,
length,
dirty, ttl = TTL,
next, current, target = this,
@ -19338,6 +19411,14 @@ function $RootScopeProvider(){
} while (dirty || asyncQueue.length);
clearPhase();
while(postDigestQueue.length) {
try {
postDigestQueue.shift()();
} catch (e) {
$exceptionHandler(e);
}
}
},
@ -19438,13 +19519,16 @@ function $RootScopeProvider(){
*
* The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only that:
*
* - it will execute in the current script execution context (before any DOM rendering).
* - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
* `expression` execution.
* - it will execute after the function that schedule the evaluation is done running (preferably before DOM rendering).
* - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after `expression` execution.
*
* Any exceptions from the execution of the expression are forwarded to the
* {@link ng.$exceptionHandler $exceptionHandler} service.
*
* __Note:__ if this function is called outside of `$digest` cycle, a new $digest cycle will be scheduled.
* It is however encouraged to always call code that changes the model from withing an `$apply` call.
* That includes code evaluated via `$evalAsync`.
*
* @param {(string|function())=} expression An angular expression to be executed.
*
* - `string`: execute using the rules as defined in {@link guide/expression expression}.
@ -19452,9 +19536,23 @@ function $RootScopeProvider(){
*
*/
$evalAsync: function(expr) {
// if we are outside of an $digest loop and this is the first time we are scheduling async task also schedule
// async auto-flush
if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {
$browser.defer(function() {
if ($rootScope.$$asyncQueue.length) {
$rootScope.$digest();
}
});
}
this.$$asyncQueue.push(expr);
},
$$postDigest : function(expr) {
this.$$postDigestQueue.push(expr);
},
/**
* @ngdoc function
* @name ng.$rootScope.Scope#$apply
@ -20123,7 +20221,7 @@ function $SceDelegateProvider() {
* {@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
* ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
* simplified):
*
* <pre class="prettyprint">
@ -20181,7 +20279,7 @@ function $SceDelegateProvider() {
* ## What trusted context types are supported?<a name="contexts"></a>
*
* | 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 (`<a href=` and `<img src=` sanitize their urls and don't consititute an SCE context. |
@ -20692,6 +20790,7 @@ function $SnifferProvider() {
this.$get = ['$window', '$document', function($window, $document) {
var eventSupport = {},
android = int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
document = $document[0] || {},
vendorPrefix,
vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,
@ -20708,6 +20807,11 @@ function $SnifferProvider() {
break;
}
}
if(!vendorPrefix) {
vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
}
transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
@ -20723,7 +20827,10 @@ function $SnifferProvider() {
// so let's not use the history API at all.
// http://code.google.com/p/android/issues/detail?id=17471
// https://github.com/angular/angular.js/issues/904
history: !!($window.history && $window.history.pushState && !(android < 4)),
// older webit browser (533.9) on Boxee box has exactly the same problem as Android has
// so let's not use the history API also
history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
hashchange: 'onhashchange' in $window &&
// IE8 compatible mode lies
(!document.documentMode || document.documentMode > 7),
@ -20783,7 +20890,7 @@ function $TimeoutProvider() {
var deferred = $q.defer(),
promise = deferred.promise,
skipApply = (isDefined(invokeApply) && !invokeApply),
timeoutId, cleanup;
timeoutId;
timeoutId = $browser.defer(function() {
try {
@ -20792,17 +20899,15 @@ function $TimeoutProvider() {
deferred.reject(e);
$exceptionHandler(e);
}
finally {
delete deferreds[promise.$$timeoutId];
}
if (!skipApply) $rootScope.$apply();
}, delay);
cleanup = function() {
delete deferreds[promise.$$timeoutId];
};
promise.$$timeoutId = timeoutId;
deferreds[timeoutId] = deferred;
promise.then(cleanup, cleanup);
return promise;
}
@ -20824,6 +20929,7 @@ function $TimeoutProvider() {
timeout.cancel = function(promise) {
if (promise && promise.$$timeoutId in deferreds) {
deferreds[promise.$$timeoutId].reject('canceled');
delete deferreds[promise.$$timeoutId];
return $browser.defer.cancel(promise.$$timeoutId);
}
return false;
@ -20891,7 +20997,7 @@ function $$UrlUtilsProvider() {
* 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 |
@ -20899,7 +21005,7 @@ function $$UrlUtilsProvider() {
* 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 |
@ -20908,7 +21014,7 @@ function $$UrlUtilsProvider() {
*/
function resolve(url, parse) {
var href = url;
if (msie) {
if (msie <= 11) {
// Normalize before parse. Refer Implementation Notes on why this is
// done in two steps on IE.
urlParsingNode.setAttribute("href", href);
@ -21278,7 +21384,7 @@ function filterFilter() {
})();
} else {
(function() {
if (!expression[key]) return;
if (typeof(expression[key]) == 'undefined') { return; }
var path = key;
predicates.push(function(value) {
return search(getter(value,path), expression[path]);
@ -22007,8 +22113,10 @@ function orderByFilter($parse){
var t1 = typeof v1;
var t2 = typeof v2;
if (t1 == t2) {
if (t1 == "string") v1 = v1.toLowerCase();
if (t1 == "string") v2 = v2.toLowerCase();
if (t1 == "string") {
v1 = v1.toLowerCase();
v2 = v2.toLowerCase();
}
if (v1 === v2) return 0;
return v1 < v2 ? -1 : 1;
} else {
@ -24253,8 +24361,8 @@ var ngBindTemplateDirective = ['$interpolate', function($interpolate) {
var ngBindHtmlDirective = ['$sce', function($sce) {
return function(scope, element, attr) {
element.addClass('ng-binding').data('$binding', attr.ngBindHtml);
scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function ngBindHtmlWatchAction(value) {
element.html(value || '');
scope.$watch(attr.ngBindHtml, function ngBindHtmlWatchAction(value) {
element.html($sce.getTrustedHtml(value) || '');
});
};
}];
@ -24410,7 +24518,7 @@ function classDirective(name, selector) {
## Animations
Example that demostrates how addition and removal of classes can be animated.
The example below demonstrates how to perform animations using ngClass.
<example animations="true">
<file name="index.html">
@ -24455,6 +24563,14 @@ function classDirective(name, selector) {
});
</file>
</example>
## ngClass and pre-existing CSS3 Transitions/Animations
The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
Therefore, if any CSS3 Transition/Animation styles (outside of ngAnimate) are set on the element, then, if a ngClass animation
is triggered, the ngClass animation will be skipped so that ngAnimate can allow for the pre-existing transition or animation to
take over. This restriction allows for ngClass to still work with standard CSS3 Transitions/Animations that are defined
outside of ngAnimate.
*/
var ngClassDirective = classDirective('', true);
@ -25373,23 +25489,18 @@ var ngIfDirective = ['$animate', function($animate) {
* @description
* Emitted every time the ngInclude content is reloaded.
*/
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) {
transclude: 'element',
compile: function(element, attr, transclusion) {
var srcExp = attr.ngInclude || attr.src,
onloadExp = attr.onload || '',
autoScrollExp = attr.autoscroll;
element.html('');
var anchor = jqLite(document.createComment(' ngInclude: ' + srcExp + ' '));
element.replaceWith(anchor);
return function(scope) {
return function(scope, $element) {
var changeCounter = 0,
currentScope,
currentElement;
@ -25413,14 +25524,15 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
if (thisChangeId !== changeCounter) return;
var newScope = scope.$new();
transclusion(newScope, function(clone) {
cleanupLastIncludeContent();
currentScope = newScope;
currentElement = element.clone();
currentElement.html(response);
$animate.enter(currentElement, null, anchor);
currentElement = clone;
$compile(currentElement, false, NG_INCLUDE_PRIORITY - 1)(currentScope);
currentElement.html(response);
$animate.enter(currentElement, null, $element);
$compile(currentElement.contents())(currentScope);
if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
$anchorScroll();
@ -25428,6 +25540,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
currentScope.$emit('$includeContentLoaded');
scope.$eval(onloadExp);
});
}).error(function() {
if (thisChangeId === changeCounter) cleanupLastIncludeContent();
});
@ -26650,7 +26763,9 @@ var ngSwitchDefaultDirective = ngDirective({
* @name ng.directive:ngTransclude
*
* @description
* Insert the transcluded DOM here.
* Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
*
* Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
*
* @element ANY
*
@ -26694,16 +26809,19 @@ var ngSwitchDefaultDirective = ngDirective({
*
*/
var ngTranscludeDirective = ngDirective({
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) {
controller: ['$transclude', function($transclude) {
// remember the transclusion fn but call it during linking 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
this.$transclude = $transclude;
}],
link: function($scope, $element, $attrs, controller) {
controller.$transclude(function(clone) {
$element.html('');
$element.append(clone);
});
});
}]
}
});
/**

View file

@ -1,5 +1,5 @@
/**
* @license AngularJS v1.2.0rc1
* @license AngularJS v1.2.0-rc.2
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@ -9,8 +9,17 @@
* @ngdoc overview
* @name ngTouch
* @description
* Touch events and other mobile helpers.
* Based on jQuery Mobile touch event handling (jquerymobile.com)
*
* # ngTouch
*
* `ngTouch` is the name of the optional Angular module that provides touch events and other
* helpers for touch-enabled devices.
* The implementation is based on jQuery Mobile touch event handling
* ([jquerymobile.com](http://jquerymobile.com/))
*
* {@installModule touch}
*
* See {@link ngTouch.$swipe `$swipe`} for usage.
*/
// define ngTouch module
@ -24,7 +33,9 @@ var ngTouch = angular.module('ngTouch', []);
* The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe
* behavior, to make implementing swipe-related directives more convenient.
*
* It is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by
* Requires the {@link ngTouch `ngTouch`} module to be installed.
*
* `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by
* `ngCarousel` in a separate component.
*
* # Usage
@ -159,6 +170,8 @@ ngTouch.factory('$swipe', [function() {
* the click event. This version handles them immediately, and then prevents the
* following click event from propagating.
*
* Requires the {@link ngTouch `ngTouch`} module to be installed.
*
* This directive can fall back to using an ordinary click event, and so works on desktop
* browsers as well as mobile.
*
@ -428,6 +441,8 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
* A leftward swipe is a quick, right-to-left slide of the finger.
* Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag too.
*
* Requires the {@link ngTouch `ngTouch`} module to be installed.
*
* @element ANY
* @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate
* upon left swipe. (Event object is available as `$event`)
@ -455,6 +470,8 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
* A rightward swipe is a quick, left-to-right slide of the finger.
* Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag too.
*
* Requires the {@link ngTouch `ngTouch`} module to be installed.
*
* @element ANY
* @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate
* upon right swipe. (Event object is available as `$event`)

View file

@ -1,5 +1,5 @@
/*
AngularJS v1.2.0rc1
AngularJS v1.2.0-rc.2
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/

File diff suppressed because one or more lines are too long

1584
lib/angular/angular.js vendored

File diff suppressed because it is too large Load diff

View file

@ -1,185 +0,0 @@
/*
AngularJS v1.2.0rc1
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/
(function(T,N,v){'use strict';function M(a){return function(){for(var b=arguments[0],c=1,b="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.2.0rc1/"+(a?a+"/":"")+b;c<arguments.length;c++)b=b+(1==c?"?":"&")+"p"+(c-1)+"="+encodeURIComponent("function"==typeof arguments[c]?arguments[c].toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof arguments[c]?"undefined":"string"!=typeof arguments[c]?JSON.stringify(arguments[c]):arguments[c]);return Error(b)}}function kb(a){if(null==a||va(a))return!1;
var b=a.length;return 1===a.nodeType&&b?!0:I(a)||!H(a)&&(0===b||"number"===typeof b&&0<b&&b-1 in a)}function q(a,b,c){var d;if(a)if(H(a))for(d in a)"prototype"!=d&&("length"!=d&&"name"!=d&&a.hasOwnProperty(d))&&b.call(c,a[d],d);else if(a.forEach&&a.forEach!==q)a.forEach(b,c);else if(kb(a))for(d=0;d<a.length;d++)b.call(c,a[d],d);else for(d in a)a.hasOwnProperty(d)&&b.call(c,a[d],d);return a}function Fb(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b.sort()}function Bc(a,b,c){for(var d=
Fb(a),e=0;e<d.length;e++)b.call(c,a[d[e]],d[e]);return d}function Gb(a){return function(b,c){a(c,b)}}function Ua(){for(var a=fa.length,b;a;){a--;b=fa[a].charCodeAt(0);if(57==b)return fa[a]="A",fa.join("");if(90==b)fa[a]="0";else return fa[a]=String.fromCharCode(b+1),fa.join("")}fa.unshift("0");return fa.join("")}function Hb(a,b){b?a.$$hashKey=b:delete a.$$hashKey}function F(a){var b=a.$$hashKey;q(arguments,function(b){b!==a&&q(b,function(b,c){a[c]=b})});Hb(a,b);return a}function U(a){return parseInt(a,
10)}function Cc(a,b){return F(new (F(function(){},{prototype:a})),b)}function w(){}function wa(a){return a}function W(a){return function(){return a}}function J(a){return"undefined"==typeof a}function A(a){return"undefined"!=typeof a}function Q(a){return null!=a&&"object"==typeof a}function z(a){return"string"==typeof a}function lb(a){return"number"==typeof a}function Ea(a){return"[object Date]"==Va.apply(a)}function I(a){return"[object Array]"==Va.apply(a)}function H(a){return"function"==typeof a}
function mb(a){return"[object RegExp]"==Va.apply(a)}function va(a){return a&&a.document&&a.location&&a.alert&&a.setInterval}function Dc(a){return a&&(a.nodeName||a.on&&a.find)}function Ec(a,b,c){var d=[];q(a,function(a,g,k){d.push(b.call(c,a,g,k))});return d}function Wa(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c<a.length;c++)if(b===a[c])return c;return-1}function Fa(a,b){var c=Wa(a,b);0<=c&&a.splice(c,1);return b}function aa(a,b){if(va(a)||a&&a.$evalAsync&&a.$watch)throw Xa("cpws");if(b){if(a===
b)throw Xa("cpi");if(I(a))for(var c=b.length=0;c<a.length;c++)b.push(aa(a[c]));else{c=b.$$hashKey;q(b,function(a,c){delete b[c]});for(var d in a)b[d]=aa(a[d]);Hb(b,c)}}else(b=a)&&(I(a)?b=aa(a,[]):Ea(a)?b=new Date(a.getTime()):mb(a)?b=RegExp(a.source):Q(a)&&(b=aa(a,{})));return b}function Fc(a,b){b=b||{};for(var c in a)a.hasOwnProperty(c)&&"$$"!==c.substr(0,2)&&(b[c]=a[c]);return b}function xa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var c=typeof a,d;if(c==typeof b&&
"object"==c)if(I(a)){if(!I(b))return!1;if((c=a.length)==b.length){for(d=0;d<c;d++)if(!xa(a[d],b[d]))return!1;return!0}}else{if(Ea(a))return Ea(b)&&a.getTime()==b.getTime();if(mb(a)&&mb(b))return a.toString()==b.toString();if(a&&a.$evalAsync&&a.$watch||b&&b.$evalAsync&&b.$watch||va(a)||va(b)||I(b))return!1;c={};for(d in a)if("$"!==d.charAt(0)&&!H(a[d])){if(!xa(a[d],b[d]))return!1;c[d]=!0}for(d in b)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&b[d]!==v&&!H(b[d]))return!1;return!0}return!1}function nb(a,
b){var c=2<arguments.length?sa.call(arguments,2):[];return!H(b)||b instanceof RegExp?b:c.length?function(){return arguments.length?b.apply(a,c.concat(sa.call(arguments,0))):b.apply(a,c)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Gc(a,b){var c=b;/^\$+/.test(a)?c=v:va(b)?c="$WINDOW":b&&N===b?c="$DOCUMENT":b&&(b.$evalAsync&&b.$watch)&&(c="$SCOPE");return c}function ma(a,b){return"undefined"===typeof a?v:JSON.stringify(a,Gc,b?" ":null)}function Ib(a){return z(a)?JSON.parse(a):
a}function Ga(a){a&&0!==a.length?(a=G(""+a),a=!("f"==a||"0"==a||"false"==a||"no"==a||"n"==a||"[]"==a)):a=!1;return a}function ga(a){a=C(a).clone();try{a.html("")}catch(b){}var c=C("<div>").append(a).html();try{return 3===a[0].nodeType?G(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(b,a){return"<"+G(a)})}catch(d){return G(c)}}function Jb(a){try{return decodeURIComponent(a)}catch(b){}}function Kb(a){var b={},c,d;q((a||"").split("&"),function(a){a&&(c=a.split("="),d=Jb(c[0]),A(d)&&(a=A(c[1])?
Jb(c[1]):!0,b[d]?I(b[d])?b[d].push(a):b[d]=[b[d],a]:b[d]=a))});return b}function Lb(a){var b=[];q(a,function(a,d){I(a)?q(a,function(a){b.push(ta(d,!0)+(!0===a?"":"="+ta(a,!0)))}):b.push(ta(d,!0)+(!0===a?"":"="+ta(a,!0)))});return b.length?b.join("&"):""}function ob(a){return ta(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ta(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,b?"%20":"+")}
function Hc(a,b){function c(a){a&&d.push(a)}var d=[a],e,g,k=["ng:app","ng-app","x-ng-app","data-ng-app"],f=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(k,function(b){k[b]=!0;c(N.getElementById(b));b=b.replace(":","\\:");a.querySelectorAll&&(q(a.querySelectorAll("."+b),c),q(a.querySelectorAll("."+b+"\\:"),c),q(a.querySelectorAll("["+b+"]"),c))});q(d,function(b){if(!e){var a=f.exec(" "+b.className+" ");a?(e=b,g=(a[2]||"").replace(/\s+/g,",")):q(b.attributes,function(a){!e&&k[a.name]&&(e=b,g=a.value)})}});
e&&b(e,g?[g]:[])}function Mb(a,b){var c=function(){a=C(a);if(a.injector()){var c=a[0]===N?"document":ga(a);throw Xa("btstrpd",c);}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);b.unshift("ng");c=Nb(b);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(b,a,c,d,e){b.$apply(function(){a.data("$injector",d);c(a)(b)});e.enabled(!0)}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(T&&!d.test(T.name))return c();T.name=T.name.replace(d,"");Ha.resumeBootstrap=
function(a){q(a,function(a){b.push(a)});c()}}function pb(a,b){b=b||"_";return a.replace(Ic,function(a,d){return(d?b:"")+a.toLowerCase()})}function qb(a,b,c){if(!a)throw Xa("areq",b||"?",c||"required");return a}function Ia(a,b,c){c&&I(a)&&(a=a[a.length-1]);qb(H(a),b,"not a function, got "+(a&&"object"==typeof a?a.constructor.name||"Object":typeof a));return a}function rb(a,b,c){if(!b)return a;b=b.split(".");for(var d,e=a,g=b.length,k=0;k<g;k++)d=b[k],a&&(a=(e=a)[d]);return!c&&H(a)?nb(e,a):a}function Jc(a){function b(a,
b,e){return a[b]||(a[b]=e())}return b(b(a,"angular",Object),"module",function(){var a={};return function(d,e,g){e&&a.hasOwnProperty(d)&&(a[d]=null);return b(a,d,function(){function a(c,d,e){return function(){b[e||"push"]([c,d,arguments]);return m}}if(!e)throw M("$injector")("nomod",d);var b=[],c=[],h=a("$injector","invoke"),m={_invokeQueue:b,_runBlocks:c,requires:e,name:d,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),
constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:h,run:function(a){c.push(a);return this}};g&&h(g);return m})}})}function Ja(a){return a.replace(Kc,function(a,c,d,e){return e?d.toUpperCase():d}).replace(Lc,"Moz$1")}function sb(a,b,c,d){function e(a){var e=c&&a?[this.filter(a)]:[this],l=b,h,m,p,n,s,r;if(!d||null!=a)for(;e.length;)for(h=
e.shift(),m=0,p=h.length;m<p;m++)for(n=C(h[m]),l?n.triggerHandler("$destroy"):l=!l,s=0,n=(r=n.children()).length;s<n;s++)e.push(ya(r[s]));return g.apply(this,arguments)}var g=ya.fn[a],g=g.$original||g;e.$original=g;ya.fn[a]=e}function O(a){if(a instanceof O)return a;if(!(this instanceof O)){if(z(a)&&"<"!=a.charAt(0))throw tb("nosel");return new O(a)}if(z(a)){var b=N.createElement("div");b.innerHTML="<div>&#160;</div>"+a;b.removeChild(b.firstChild);ub(this,b.childNodes);C(N.createDocumentFragment()).append(this)}else ub(this,
a)}function vb(a){return a.cloneNode(!0)}function Ka(a){Ob(a);var b=0;for(a=a.childNodes||[];b<a.length;b++)Ka(a[b])}function Pb(a,b,c,d){if(A(d))throw tb("offargs");var e=ha(a,"events");ha(a,"handle")&&(J(b)?q(e,function(b,c){wb(a,c,b);delete e[c]}):q(b.split(" "),function(b){J(c)?(wb(a,b,e[b]),delete e[b]):Fa(e[b]||[],c)}))}function Ob(a,b){var c=a[Ya],d=La[c];d&&(b?delete La[c].data[b]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Pb(a)),delete La[c],a[Ya]=v))}function ha(a,b,c){var d=
a[Ya],d=La[d||-1];if(A(c))d||(a[Ya]=d=++Mc,d=La[d]={}),d[b]=c;else return d&&d[b]}function Qb(a,b,c){var d=ha(a,"data"),e=A(c),g=!e&&A(b),k=g&&!Q(b);d||k||ha(a,"data",d={});if(e)d[b]=c;else if(g){if(k)return d&&d[b];F(d,b)}else return d}function Za(a,b){return-1<(" "+a.className+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" ")}function Rb(a,b){b&&q(b.split(" "),function(b){a.className=Z((" "+a.className+" ").replace(/[\n\t]/g," ").replace(" "+Z(b)+" "," "))})}function Sb(a,b){b&&q(b.split(" "),function(b){Za(a,
b)||(a.className=Z(a.className+" "+Z(b)))})}function ub(a,b){if(b){b=b.nodeName||!A(b.length)||va(b)?[b]:b;for(var c=0;c<b.length;c++)a.push(b[c])}}function Tb(a,b){return $a(a,"$"+(b||"ngController")+"Controller")}function $a(a,b,c){a=C(a);for(9==a[0].nodeType&&(a=a.find("html"));a.length;){if((c=a.data(b))!==v)return c;a=a.parent()}}function Ub(a,b){var c=ab[b.toLowerCase()];return c&&Vb[a.nodeName]&&c}function Nc(a,b){var c=function(c,e){c.preventDefault||(c.preventDefault=function(){c.returnValue=
!1});c.stopPropagation||(c.stopPropagation=function(){c.cancelBubble=!0});c.target||(c.target=c.srcElement||N);if(J(c.defaultPrevented)){var g=c.preventDefault;c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented=!1}c.isDefaultPrevented=function(){return c.defaultPrevented||!1==c.returnValue};q(b[e||c.type],function(b){b.call(a,c)});8>=R?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};
c.elem=a;return c}function za(a){var b=typeof a,c;"object"==b&&null!==a?"function"==typeof(c=a.$$hashKey)?c=a.$$hashKey():c===v&&(c=a.$$hashKey=Ua()):c=a;return b+":"+c}function Ma(a){q(a,this.put,this)}function Wb(a){var b,c;"function"==typeof a?(b=a.$inject)||(b=[],c=a.toString().replace(Oc,""),c=c.match(Pc),q(c[1].split(Qc),function(a){a.replace(Rc,function(a,c,d){b.push(d)})}),a.$inject=b):I(a)?(c=a.length-1,Ia(a[c],"fn"),b=a.slice(0,c)):Ia(a,"fn",!0);return b}function Nb(a){function b(a){return function(b,
c){if(Q(b))q(b,Gb(a));else return a(b,c)}}function c(a,b){if(H(b)||I(b))b=p.instantiate(b);if(!b.$get)throw Na("pget",a);return m[a+f]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[];q(a,function(a){if(!h.get(a)){h.put(a,!0);try{if(z(a)){var c=Oa(a);b=b.concat(e(c.requires)).concat(c._runBlocks);for(var d=c._invokeQueue,c=0,f=d.length;c<f;c++){var l=d[c],m=p.get(l[0]);m[l[1]].apply(m,l[2])}}else H(a)?b.push(p.invoke(a)):I(a)?b.push(p.invoke(a)):Ia(a,"module")}catch(g){throw I(a)&&(a=
a[a.length-1]),g.message&&(g.stack&&-1==g.stack.indexOf(g.message))&&(g=g.message+"\n"+g.stack),Na("modulerr",a,g.stack||g.message||g);}}});return b}function g(a,b){function c(d){if(a.hasOwnProperty(d)){if(a[d]===k)throw Na("cdep",l.join(" <- "));return a[d]}try{return l.unshift(d),a[d]=k,a[d]=b(d)}finally{l.shift()}}function d(a,b,e){var f=[],l=Wb(a),g,m,h;m=0;for(g=l.length;m<g;m++){h=l[m];if("string"!==typeof h)throw Na("itkn",h);f.push(e&&e.hasOwnProperty(h)?e[h]:c(h))}a.$inject||(a=a[g]);switch(b?
-1:f.length){case 0:return a();case 1:return a(f[0]);case 2:return a(f[0],f[1]);case 3:return a(f[0],f[1],f[2]);case 4:return a(f[0],f[1],f[2],f[3]);case 5:return a(f[0],f[1],f[2],f[3],f[4]);case 6:return a(f[0],f[1],f[2],f[3],f[4],f[5]);case 7:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6]);case 8:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7]);case 9:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8]);case 10:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9]);default:return a.apply(b,
f)}}return{invoke:d,instantiate:function(a,b){var c=function(){},e;c.prototype=(I(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return Q(e)?e:c},get:c,annotate:Wb,has:function(b){return m.hasOwnProperty(b+f)||a.hasOwnProperty(b)}}}var k={},f="Provider",l=[],h=new Ma,m={$provide:{provider:b(c),factory:b(d),service:b(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:b(function(a,b){return d(a,W(b))}),constant:b(function(a,b){m[a]=b;n[a]=b}),decorator:function(a,
b){var c=p.get(a+f),d=c.$get;c.$get=function(){var a=s.invoke(d,c);return s.invoke(b,null,{$delegate:a})}}}},p=m.$injector=g(m,function(){throw Na("unpr",l.join(" <- "));}),n={},s=n.$injector=g(n,function(a){a=p.get(a+f);return s.invoke(a.$get,a)});q(e(a),function(a){s.invoke(a||w)});return s}function Sc(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,c,d){function e(a){var b=null;q(a,function(a){b||"a"!==G(a.nodeName)||(b=a)});return b}
function g(){var a=c.hash(),d;a?(d=k.getElementById(a))?d.scrollIntoView():(d=e(k.getElementsByName(a)))?d.scrollIntoView():"top"===a&&b.scrollTo(0,0):b.scrollTo(0,0)}var k=b.document;a&&d.$watch(function(){return c.hash()},function(){d.$evalAsync(g)});return g}]}function Tc(a,b,c,d){function e(a){try{a.apply(null,sa.call(arguments,1))}finally{if(r--,0===r)for(;y.length;)try{y.pop()()}catch(b){c.error(b)}}}function g(a,b){(function ua(){q(u,function(a){a()});da=b(ua,a)})()}function k(){x!=f.url()&&
(x=f.url(),q(P,function(a){a(f.url())}))}var f=this,l=b[0],h=a.location,m=a.history,p=a.setTimeout,n=a.clearTimeout,s={};f.isMock=!1;var r=0,y=[];f.$$completeOutstandingRequest=e;f.$$incOutstandingRequestCount=function(){r++};f.notifyWhenNoOutstandingRequests=function(a){q(u,function(a){a()});0===r?a():y.push(a)};var u=[],da;f.addPollFn=function(a){J(da)&&g(100,p);u.push(a);return a};var x=h.href,B=b.find("base"),t=null;f.url=function(a,b){if(a){if(x!=a)return x=a,d.history?b?m.replaceState(null,
"",a):(m.pushState(null,"",a),B.attr("href",B.attr("href"))):b?(h.replace(a),t=a):(h.href=a,t=null),f}else return t||h.href.replace(/%27/g,"'")};var P=[],na=!1;f.onUrlChange=function(b){if(!na){if(d.history)C(a).on("popstate",k);if(d.hashchange)C(a).on("hashchange",k);else f.addPollFn(k);na=!0}P.push(b);return b};f.baseHref=function(){var a=B.attr("href");return a?a.replace(/^https?\:\/\/[^\/]*/,""):""};var V={},ia="",X=f.baseHref();f.cookies=function(a,b){var d,e,f,g;if(a)b===v?l.cookie=escape(a)+
"=;path="+X+";expires=Thu, 01 Jan 1970 00:00:00 GMT":z(b)&&(d=(l.cookie=escape(a)+"="+escape(b)+";path="+X).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(l.cookie!==ia)for(ia=l.cookie,d=ia.split("; "),V={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=unescape(e.substring(0,g)),V[a]===v&&(V[a]=unescape(e.substring(g+1))));return V}};f.defer=function(a,b){var c;r++;c=p(function(){delete s[c];e(a)},b||0);s[c]=!0;
return c};f.defer.cancel=function(a){return s[a]?(delete s[a],n(a),e(w),!0):!1}}function Vc(){this.$get=["$window","$log","$sniffer","$document",function(a,b,c,d){return new Tc(a,d,b,c)}]}function Wc(){this.$get=function(){function a(a,d){function e(a){a!=p&&(n?n==a&&(n=a.n):n=a,g(a.n,a.p),g(a,p),p=a,p.n=null)}function g(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw M("$cacheFactory")("iid",a);var k=0,f=F({},d,{id:a}),l={},h=d&&d.capacity||Number.MAX_VALUE,m={},p=null,n=null;return b[a]={put:function(a,
b){var c=m[a]||(m[a]={key:a});e(c);if(!J(b))return a in l||k++,l[a]=b,k>h&&this.remove(n.key),b},get:function(a){var b=m[a];if(b)return e(b),l[a]},remove:function(a){var b=m[a];b&&(b==p&&(p=b.p),b==n&&(n=b.n),g(b.n,b.p),delete m[a],delete l[a],k--)},removeAll:function(){l={};k=0;m={};p=n=null},destroy:function(){m=f=l=null;delete b[a]},info:function(){return F({},f,{size:k})}}}var b={};a.info=function(){var a={};q(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}
function Xc(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Xb(a){var b={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,g=/^\s*(https?|ftp|mailto|file):/,k=/^\s*(https?|ftp|file):|data:image\//,f=/^(on[a-z]*|formaction)$/;this.directive=function h(d,e){z(d)?(qb(e,"directiveFactory"),b.hasOwnProperty(d)||(b[d]=[],a.factory(d+c,["$injector","$exceptionHandler",function(a,c){var e=[];q(b[d],function(b){try{var f=a.invoke(b);H(f)?
f={compile:W(f)}:!f.compile&&f.link&&(f.compile=W(f.link));f.priority=f.priority||0;f.name=f.name||d;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(g){c(g)}});return e}])),b[d].push(e)):q(d,Gb(h));return this};this.aHrefSanitizationWhitelist=function(a){return A(a)?(g=a,this):g};this.imgSrcSanitizationWhitelist=function(a){return A(a)?(k=a,this):k};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope",
"$document","$sce","$$urlUtils","$animate",function(a,m,p,n,s,r,y,u,da,x,B,t){function P(a,b,c,d){a instanceof C||(a=C(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=C(b).wrap("<span></span>").parent()[0])});var e=V(a,b,a,c,d);return function(b,c){qb(b,"scope");for(var d=c?Pa.clone.call(a):a,f=0,g=d.length;f<g;f++){var m=d[f];1!=m.nodeType&&9!=m.nodeType||d.eq(f).data("$scope",b)}na(d,"ng-scope");c&&c(d,b);e&&e(b,d,d);return d}}function na(a,b){try{a.addClass(b)}catch(c){}}function V(a,
b,c,d,e){function f(a,c,d,e){var m,h,k,p,n,s,r,E=[];n=0;for(s=c.length;n<s;n++)E.push(c[n]);r=n=0;for(s=g.length;n<s;r++)h=E[r],c=g[n++],m=g[n++],c?(c.scope?(k=a.$new(Q(c.scope)),C(h).data("$scope",k)):k=a,(p=c.transclude)||!e&&b?c(m,k,h,d,function(b){return function(c){var d=a.$new();d.$$transcluded=!0;return b(d,c).on("$destroy",nb(d,d.$destroy))}}(p||b)):c(m,k,h,v,e)):m&&m(a,h.childNodes,v,e)}for(var g=[],m,h,k,p=0;p<a.length;p++)h=new xb,m=ia(a[p],[],h,0==p?d:v,e),h=(m=m.length?ja(m,a[p],h,b,
c):null)&&m.terminal||!a[p].childNodes||!a[p].childNodes.length?null:V(a[p].childNodes,m?m.transclude:b),g.push(m),g.push(h),k=k||m||h;return k?f:null}function ia(a,b,c,f,g){var m=c.$attr,h;switch(a.nodeType){case 1:D(b,ka(Aa(a).toLowerCase()),"E",f,g);var k,p,n;h=a.attributes;for(var s=0,r=h&&h.length;s<r;s++){var E,y,V;k=h[s];if(!R||8<=R||k.specified)p=k.name,n=ka(p),A.test(n)&&(p=n.substr(6).toLowerCase()),-1!=(V=n.lastIndexOf("Start"))&&V==n.length-5&&(E=p,y=p.substr(0,p.length-5)+"end",p=p.substr(0,
p.length-6)),n=ka(p.toLowerCase()),m[n]=p,c[n]=k=Z(R&&"href"==p?decodeURIComponent(a.getAttribute(p,2)):k.value),Ub(a,n)&&(c[n]=!0),oa(a,b,k,n),D(b,n,"A",f,g,E,y)}a=a.className;if(z(a)&&""!==a)for(;h=e.exec(a);)n=ka(h[2]),D(b,n,"C",f,g)&&(c[n]=Z(h[3])),a=a.substr(h.index+h[0].length);break;case 3:Y(b,a.nodeValue);break;case 8:try{if(h=d.exec(a.nodeValue))n=ka(h[1]),D(b,n,"M",f,g)&&(c[n]=Z(h[2]))}catch(u){}}b.sort(K);return b}function X(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ea("uterdir",
b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return C(d)}function ba(a,b,c){return function(d,e,f,g){e=X(e[0],b,c);return a(d,e,f,g)}}function ja(a,b,c,d,e,f){function g(a,b,c,d){a&&(c&&(a=ba(a,c,d)),a.require=t.require,s.push(a));b&&(c&&(b=ba(b,c,d)),b.require=t.require,V.push(b))}function h(a,b){var c,d="data",e=!1;if(z(a)){for(;"^"==(c=a.charAt(0))||"?"==c;)a=a.substr(1),"^"==c&&(d="inheritedData"),e=e||"?"==c;c=b[d]("$"+
a+"Controller");if(!c&&!e)throw ea("ctreq",a,x);}else I(a)&&(c=[],q(a,function(a){c.push(h(a,b))}));return c}function k(a,d,e,f,g){var n,E,t,u,B;n=b===e?c:Fc(c,new xb(C(e),c.$attr));E=n.$$element;if(D){var P=/^\s*([@=&])(\??)\s*(\w*)\s*$/,Y=d.$parent||d;q(D.scope,function(a,b){var c=a.match(P)||[],e=c[3]||b,f="?"==c[2],c=c[1],g,h,k;d.$$isolateBindings[b]=c+e;switch(c){case "@":n.$observe(e,function(a){d[b]=a});n.$$observers[e].$$scope=Y;n[e]&&(d[b]=m(n[e])(Y));break;case "=":if(f&&!n[e])break;h=r(n[e]);
k=h.assign||function(){g=d[b]=h(Y);throw ea("nonassign",n[e],D.name);};g=d[b]=h(Y);d.$watch(function(){var a=h(Y);a!==d[b]&&(a!==g?g=d[b]=a:k(Y,a=g=d[b]));return a});break;case "&":h=r(n[e]);d[b]=function(a){return h(Y,a)};break;default:throw ea("iscp",D.name,b,a);}})}oa&&q(oa,function(a){var b={$scope:d,$element:E,$attrs:n,$transclude:g},c;B=a.controller;"@"==B&&(B=n[a.name]);c=y(B,b);E.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(t=s.length;f<t;f++)try{u=
s[f],u(d,E,n,u.require&&h(u.require,E))}catch(L){p(L,ga(E))}a&&a(d,e.childNodes,v,g);f=0;for(t=V.length;f<t;f++)try{u=V[f],u(d,E,n,u.require&&h(u.require,E))}catch(Yc){p(Yc,ga(E))}}for(var n=-Number.MAX_VALUE,s=[],V=[],u=null,D=null,Y=null,B=c.$$element=C(b),t,x,L,da,pa=d,oa,ja,K=0,w=a.length;K<w;K++){t=a[K];var Qa=t.$$start,A=t.$$end;Qa&&(B=X(b,Qa,A));L=v;if(n>t.priority)break;if(L=t.scope)E("isolated scope",D,t,B),Q(L)&&(na(B,"ng-isolate-scope"),D=t),na(B,"ng-scope"),u=u||t;x=t.name;if(L=t.controller)oa=
oa||{},E("'"+x+"' controller",oa[x],t,B),oa[x]=t;if(L=t.transclude)E("transclusion",da,t,B),da=t,n=t.priority,"element"==L?(L=X(b,Qa,A),B=c.$$element=C(N.createComment(" "+x+": "+c[x]+" ")),b=B[0],bb(e,C(sa.call(L,0)),b),pa=P(L,d,n,f&&f.name)):(L=C(vb(b)).contents(),B.html(""),pa=P(L,d));if(t.template)if(E("template",Y,t,B),Y=t,L=H(t.template)?t.template(B,c):t.template,L=Yb(L),t.replace){f=t;L=C("<div>"+Z(L)+"</div>").contents();b=L[0];if(1!=L.length||1!==b.nodeType)throw ea("tplrt",x,"");bb(e,B,
b);w={$attr:{}};a=a.concat(ia(b,a.splice(K+1,a.length-(K+1)),w));ua(c,w);w=a.length}else B.html(L);if(t.templateUrl)E("template",Y,t,B),Y=t,t.replace&&(f=t),k=Uc(a.splice(K,a.length-K),k,B,c,e,pa),w=a.length;else if(t.compile)try{ja=t.compile(B,c,pa),H(ja)?g(null,ja,Qa,A):ja&&g(ja.pre,ja.post,Qa,A)}catch(F){p(F,ga(B))}t.terminal&&(k.terminal=!0,n=Math.max(n,t.priority))}k.scope=u&&u.scope;k.transclude=da&&pa;return k}function D(d,e,f,g,m,k,n){if(e===m)return null;m=null;if(b.hasOwnProperty(e)){var s;
e=a.get(e+c);for(var r=0,E=e.length;r<E;r++)try{s=e[r],(g===v||g>s.priority)&&-1!=s.restrict.indexOf(f)&&(k&&(s=Cc(s,{$$start:k,$$end:n})),d.push(s),m=s)}catch(t){p(t)}}return m}function ua(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(na(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?e.attr("style",e.attr("style")+";"+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||
(a[f]=b,d[f]=c[f])})}function Uc(a,b,c,d,e,f){var g=[],m,h,k=c[0],p=a.shift(),r=F({},p,{controller:null,templateUrl:null,transclude:null,scope:null,replace:null}),E=H(p.templateUrl)?p.templateUrl(c,d):p.templateUrl;c.html("");n.get(x.getTrustedResourceUrl(E),{cache:s}).success(function(n){var s;n=Yb(n);if(p.replace){n=C("<div>"+Z(n)+"</div>").contents();s=n[0];if(1!=n.length||1!==s.nodeType)throw ea("tplrt",p.name,E);n={$attr:{}};bb(e,c,s);ia(s,a,n);ua(d,n)}else s=k,c.html(n);a.unshift(r);m=ja(a,
s,d,f,c,p);q(e,function(a,b){a==s&&(e[b]=c[0])});for(h=V(c[0].childNodes,f);g.length;){n=g.shift();var t=g.shift(),u=g.shift(),y=g.shift(),B=c[0];t!==k&&(B=vb(s),bb(u,C(t),B));m(b(h,n,B,e,y),n,B,e,y)}g=null}).error(function(a,b,c,d){throw ea("tpload",d.url);});return function(a,c,d,e,f){g?(g.push(c),g.push(d),g.push(e),g.push(f)):m(function(){b(h,c,d,e,f)},c,d,e,f)}}function K(a,b){return b.priority-a.priority}function E(a,b,c,d){if(b)throw ea("multidir",b.name,c.name,a,ga(d));}function Y(a,b){var c=
m(b,!0);c&&a.push({priority:0,compile:W(function(a,b){var d=b.parent(),e=d.data("$binding")||[];e.push(c);na(d.data("$binding",e),"ng-binding");a.$watch(c,function(a){b[0].nodeValue=a})})})}function L(a,b){if("xlinkHref"==b||"IMG"!=Aa(a)&&("src"==b||"ngSrc"==b))return x.RESOURCE_URL}function oa(a,b,c,d){var e=m(c,!0);if(e){if("multiple"===d&&"SELECT"===Aa(a))throw ea("selmulti",ga(a));b.push({priority:100,compile:W(function(b,c,g){c=g.$$observers||(g.$$observers={});if(f.test(d))throw ea("nodomevents");
if(e=m(g[d],!0,L(a,d)))g[d]=e(b),(c[d]||(c[d]=[])).$$inter=!0,(g.$$observers&&g.$$observers[d].$$scope||b).$watch(e,function(a){g.$set(d,a)})})})}}function bb(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,m;if(a)for(g=0,m=a.length;g<m;g++)if(a[g]==d){a[g++]=c;m=g+e-1;for(var h=a.length;g<h;g++,m++)m<h?a[g]=a[m]:delete a[g];a.length-=e-1;break}f&&f.replaceChild(c,d);a=N.createDocumentFragment();a.appendChild(d);c[C.expando]=d[C.expando];d=1;for(e=b.length;d<e;d++)f=b[d],C(f).remove(),a.appendChild(f),
delete b[d];b[0]=c;b.length=1}var xb=function(a,b){this.$$element=a;this.$attr=b||{}};xb.prototype={$normalize:ka,$addClass:function(a){a&&0<a.length&&t.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&t.removeClass(this.$$element,a)},$set:function(a,b,c,d){function e(a,b){var c=[],d=a.split(/\s+/),f=b.split(/\s+/),g=0;a:for(;g<d.length;g++){for(var m=d[g],h=0;h<f.length;h++)if(m==f[h])continue a;c.push(m)}return c}if("class"==a)b=b||"",c=this.$$element.attr("class")||"",this.$removeClass(e(c,
b).join(" ")),this.$addClass(e(b,c).join(" "));else{var f=Ub(this.$$element[0],a);f&&(this.$$element.prop(a,b),d=f);this[a]=b;d?this.$attr[a]=d:(d=this.$attr[a])||(this.$attr[a]=d=pb(a,"-"));f=Aa(this.$$element);if("A"===f&&"href"===a||"IMG"===f&&"src"===a)if(!R||8<=R)f=B.resolve(b),""!==f&&("href"===a&&!f.match(g)||"src"===a&&!f.match(k))&&(this[a]=b="unsafe:"+f);!1!==c&&(null===b||b===v?this.$$element.removeAttr(d):this.$$element.attr(d,b))}(c=this.$$observers)&&q(c[a],function(a){try{a(b)}catch(c){p(c)}})},
$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);u.$evalAsync(function(){e.$$inter||b(c[a])});return b}};da[0].createElement("a");var w=m.startSymbol(),pa=m.endSymbol(),Yb="{{"==w||"}}"==pa?wa:function(a){return a.replace(/\{\{/g,w).replace(/}}/g,pa)},A=/^ngAttr[A-Z]/;return P}]}function ka(a){return Ja(a.replace(Zc,""))}function $c(){var a={},b=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(b,d){Q(b)?F(a,b):a[b]=d};this.$get=["$injector","$window",
function(c,d){return function(e,g){var k,f,l;z(e)&&(k=e.match(b),f=k[1],l=k[3],e=a.hasOwnProperty(f)?a[f]:rb(g.$scope,f,!0)||rb(d,f,!0),Ia(e,f,!0));k=c.instantiate(e,g);if(l){if(!g||"object"!=typeof g.$scope)throw M("$controller")("noscp",f||e.name,l);g.$scope[l]=k}return k}}]}function ad(){this.$get=["$window",function(a){return C(a.document)}]}function bd(){this.$get=["$log",function(a){return function(b,c){a.error.apply(a,arguments)}}]}function Zb(a){var b={},c,d,e;if(!a)return b;q(a.split("\n"),
function(a){e=a.indexOf(":");c=G(Z(a.substr(0,e)));d=Z(a.substr(e+1));c&&(b[c]=b[c]?b[c]+(", "+d):d)});return b}function $b(a){var b=Q(a)?a:v;return function(c){b||(b=Zb(a));return c?b[G(c)]||null:b}}function ac(a,b,c){if(H(c))return c(a,b);q(c,function(c){a=c(a,b)});return a}function cd(){var a=/^\s*(\[|\{[^\{])/,b=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d={"Content-Type":"application/json;charset=utf-8"},e=this.defaults={transformResponse:[function(d){z(d)&&(d=d.replace(c,""),a.test(d)&&b.test(d)&&(d=Ib(d,
!0)));return d}],transformRequest:[function(a){return Q(a)&&"[object File]"!==Va.apply(a)?ma(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:d,put:d,patch:d},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},g=this.interceptors=[],k=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector","$$urlUtils",function(a,b,c,d,p,n,s){function r(a){function c(a){var b=F({},a,{data:ac(a.data,a.headers,d.transformResponse)});
return 200<=a.status&&300>a.status?b:p.reject(b)}var d={transformRequest:e.transformRequest,transformResponse:e.transformResponse},f=function(a){function b(a){var c;q(a,function(b,d){H(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=F({},a.headers),f,g,c=F({},c.common,c[G(a.method)]);b(c);b(d);a:for(f in c){a=G(f);for(g in d)if(G(g)===a)continue a;d[f]=c[f]}return d}(a);F(d,a);d.headers=f;d.method=Ba(d.method);(a=s.isSameOrigin(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:v)&&
(f[d.xsrfHeaderName||e.xsrfHeaderName]=a);var g=[function(a){f=a.headers;var b=ac(a.data,$b(f),a.transformRequest);J(a.data)&&q(f,function(a,b){"content-type"===G(b)&&delete f[b]});J(a.withCredentials)&&!J(e.withCredentials)&&(a.withCredentials=e.withCredentials);return y(a,b,f).then(c,c)},v],m=p.when(d);for(q(x,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift();var h=g.shift(),m=m.then(a,
h)}m.success=function(a){m.then(function(b){a(b.data,b.status,b.headers,d)});return m};m.error=function(a){m.then(null,function(b){a(b.data,b.status,b.headers,d)});return m};return m}function y(b,c,g){function h(a,b,c){y&&(200<=a&&300>a?y.put(x,[a,b,Zb(c)]):y.remove(x));l(b,a,c);d.$$phase||d.$apply()}function l(a,c,d){c=Math.max(c,0);(200<=c&&300>c?k.resolve:k.reject)({data:a,status:c,headers:$b(d),config:b})}function n(){var a=Wa(r.pendingRequests,b);-1!==a&&r.pendingRequests.splice(a,1)}var k=p.defer(),
s=k.promise,y,q,x=u(b.url,b.params);r.pendingRequests.push(b);s.then(n,n);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(y=Q(b.cache)?b.cache:Q(e.cache)?e.cache:da);if(y)if(q=y.get(x)){if(q.then)return q.then(n,n),q;I(q)?l(q[1],q[0],aa(q[2])):l(q,200,{})}else y.put(x,s);q||a(b.method,x,c,h,g,b.timeout,b.withCredentials,b.responseType);return s}function u(a,b){if(!b)return a;var c=[];Bc(b,function(a,b){null!=a&&a!=v&&(I(a)||(a=[a]),q(a,function(a){Q(a)&&(a=ma(a));c.push(ta(b)+"="+ta(a))}))});
return a+(-1==a.indexOf("?")?"?":"&")+c.join("&")}var da=c("$http"),x=[];q(g,function(a){x.unshift(z(a)?n.get(a):n.invoke(a))});q(k,function(a,b){var c=z(a)?n.get(a):n.invoke(a);x.splice(b,0,{response:function(a){return c(p.when(a))},responseError:function(a){return c(p.reject(a))}})});r.pendingRequests=[];(function(a){q(arguments,function(a){r[a]=function(b,c){return r(F(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){r[a]=function(b,c,d){return r(F(d||
{},{method:a,url:b,data:c}))}})})("post","put");r.defaults=e;return r}]}function dd(){this.$get=["$browser","$window","$document",function(a,b,c){return ed(a,fd,a.defer,b.angular.callbacks,c[0],b.location.protocol.replace(":",""))}]}function ed(a,b,c,d,e,g){function k(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;R?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=d;e.body.appendChild(c);
return d}return function(e,l,h,m,p,n,s,r){function y(){v=-1;B&&B();t&&t.abort()}function u(b,d,e,f){var m=(l.match(bc)||["",g])[1];P&&c.cancel(P);B=t=null;d="file"==m?e?200:404:d;b(1223==d?204:d,e,f);a.$$completeOutstandingRequest(w)}var v;a.$$incOutstandingRequestCount();l=l||a.url();if("jsonp"==G(e)){var x="_"+(d.counter++).toString(36);d[x]=function(a){d[x].data=a};var B=k(l.replace("JSON_CALLBACK","angular.callbacks."+x),function(){d[x].data?u(m,200,d[x].data):u(m,v||-2);delete d[x]})}else{var t=
new b;t.open(e,l,!0);q(p,function(a,b){a&&t.setRequestHeader(b,a)});t.onreadystatechange=function(){if(4==t.readyState){var a=t.getAllResponseHeaders(),b="Cache-Control Content-Language Content-Type Expires Last-Modified Pragma".split(" ");a||(a="",q(b,function(b){var c=t.getResponseHeader(b);c&&(a+=b+": "+c+"\n")}));u(m,v||t.status,t.responseType?t.response:t.responseText,a)}};s&&(t.withCredentials=!0);r&&(t.responseType=r);t.send(h||"")}if(0<n)var P=c(y,n);else n&&n.then&&n.then(y)}}function gd(){var a=
"{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function g(g,h,m){for(var p,n,s=0,r=[],y=g.length,u=!1,q=[];s<y;)-1!=(p=g.indexOf(a,s))&&-1!=(n=g.indexOf(b,p+k))?(s!=p&&r.push(g.substring(s,p)),r.push(s=c(u=g.substring(p+k,n))),s.exp=u,s=n+f,u=!0):(s!=y&&r.push(g.substring(s)),s=y);(y=r.length)||(r.push(""),y=1);if(m&&1<r.length)throw cc("noconcat",g);if(!h||u)return q.length=
y,s=function(a){try{for(var b=0,c=y,f;b<c;b++)"function"==typeof(f=r[b])&&(f=f(a),f=m?e.getTrusted(m,f):e.valueOf(f),null==f||f==v?f="":"string"!=typeof f&&(f=ma(f))),q[b]=f;return q.join("")}catch(h){a=cc("interr",g,h.toString()),d(a)}},s.exp=g,s.parts=r,s}var k=a.length,f=b.length;g.startSymbol=function(){return a};g.endSymbol=function(){return b};return g}]}function hd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,
posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{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(a){return 1===a?"one":"other"}}}}function dc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=ob(a[b]);return a.join("/")}function ec(a,b){var c=bc.exec(a);b.$$protocol=c[1];b.$$host=c[3];b.$$port=U(c[5])||id[c[1]]||null}function fc(a,b){var c=gc.exec(a);b.$$path=decodeURIComponent(c[1]);b.$$search=
Kb(c[3]);b.$$hash=decodeURIComponent(c[5]||"");b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function la(a,b,c){return 0==b.indexOf(a)?b.substr(a.length):c}function Ra(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function yb(a){return a.substr(0,Ra(a).lastIndexOf("/")+1)}function hc(a,b){this.$$html5=!0;b=b||"";var c=yb(a);this.$$parse=function(a){var b={};ec(a,b);var g=la(c,a);if(!z(g))throw zb("ipthprfx",a,c);fc(g,b);F(this,b);this.$$path||(this.$$path="/");this.$$compose()};
this.$$compose=function(){var a=Lb(this.$$search),b=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=dc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=la(a,d))!==v)return d=e,(e=la(b,e))!==v?c+(la("/",e)||e):a+d;if((e=la(c,d))!==v)return c+e;if(c==d+"/")return c}}function Ab(a,b){var c=yb(a);ec(a,this);this.$$parse=function(d){var e=la(a,d)||la(c,d),e="#"==e.charAt(0)?la(b,e):this.$$html5?e:"";if(!z(e))throw zb("ihshprfx",d,b);fc(e,this);this.$$compose()};
this.$$compose=function(){var c=Lb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=dc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=a+(this.$$url?b+this.$$url:"")};this.$$rewrite=function(b){if(Ra(a)==Ra(b))return b}}function ic(a,b){this.$$html5=!0;Ab.apply(this,arguments);var c=yb(a);this.$$rewrite=function(d){var e;if(a==Ra(d))return d;if(e=la(c,d))return a+b+e;if(c===d+"/")return c}}function cb(a){return function(){return this[a]}}function jc(a,b){return function(c){if(J(c))return this[a];
this[a]=b(c);this.$$compose();return this}}function jd(){var a="",b=!1;this.hashPrefix=function(b){return A(b)?(a=b,this):a};this.html5Mode=function(a){return A(a)?(b=a,this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function k(a){c.$broadcast("$locationChangeSuccess",f.absUrl(),a)}var f,l=d.baseHref(),h=d.url();b?(l=h.substring(0,h.indexOf("/",h.indexOf("//")+2))+(l||"/"),e=e.history?hc:ic):(l=Ra(h),e=Ab);f=new e(l,"#"+a);f.$$parse(f.$$rewrite(h));g.on("click",
function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=C(a.target);"a"!==G(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return;var e=b.prop("href"),m=f.$$rewrite(e);e&&(!b.attr("target")&&m&&!a.isDefaultPrevented())&&(a.preventDefault(),m!=d.url()&&(f.$$parse(m),c.$apply(),T.angular["ff-684208-preventDefault"]=!0))}});f.absUrl()!=h&&d.url(f.absUrl(),!0);d.onUrlChange(function(a){f.absUrl()!=a&&(c.$broadcast("$locationChangeStart",a,f.absUrl()).defaultPrevented?d.url(f.absUrl()):(c.$evalAsync(function(){var b=
f.absUrl();f.$$parse(a);k(b)}),c.$$phase||c.$digest()))});var m=0;c.$watch(function(){var a=d.url(),b=f.$$replace;m&&a==f.absUrl()||(m++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",f.absUrl(),a).defaultPrevented?f.$$parse(a):(d.url(f.absUrl(),b),k(a))}));f.$$replace=!1;return m});return f}]}function kd(){var a=!0,b=this;this.debugEnabled=function(b){return A(b)?(a=b,this):a};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?
"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||w;return e.apply?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function qa(a,b){if("constructor"===a)throw Sa("isecfld",b);return a}function kc(a,
b){if(a&&a.constructor===a)throw Sa("isecfn",b);return a}function ld(a,b){function c(a){return-1!=a.indexOf(u)}function d(b){b=b||1;return r+b<a.length?a.charAt(r+b):!1}function e(a){return"0"<=a&&"9">=a}function g(a){return" "==a||"\r"==a||"\t"==a||"\n"==a||"\v"==a||"\u00a0"==a}function k(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"==a||"$"==a}function f(a){return"-"==a||"+"==a||e(a)}function l(b,c,d){d=d||r;c=A(c)?"s "+c+"-"+r+" ["+a.substring(c,d)+"]":" "+d;throw Sa("lexerr",b,c,a);}function h(){for(var b=
"",c=r;r<a.length;){var g=G(a.charAt(r));if("."==g||e(g))b+=g;else{var m=d();if("e"==g&&f(m))b+=g;else if(f(g)&&m&&e(m)&&"e"==b.charAt(b.length-1))b+=g;else if(!f(g)||m&&e(m)||"e"!=b.charAt(b.length-1))break;else l("Invalid exponent")}r++}b*=1;n.push({index:c,text:b,json:!0,fn:function(){return b}})}function m(){for(var c="",d=r,f,m,h,l;r<a.length;){l=a.charAt(r);if("."==l||k(l)||e(l))"."==l&&(f=r),c+=l;else break;r++}if(f)for(m=r;m<a.length;){l=a.charAt(m);if("("==l){h=c.substr(f-d+1);c=c.substr(0,
f-d);r=m;break}if(g(l))m++;else break}d={index:d,text:c};if(Ta.hasOwnProperty(c))d.fn=d.json=Ta[c];else{var p=lc(c,b,a);d.fn=F(function(a,b){return p(a,b)},{assign:function(b,d){return db(b,c,d,a)}})}n.push(d);h&&(n.push({index:f,text:".",json:!1}),n.push({index:f+1,text:h,json:!1}))}function p(b){var c=r;r++;for(var d="",e=b,f=!1;r<a.length;){var g=a.charAt(r),e=e+g;if(f)"u"==g?(g=a.substring(r+1,r+5),g.match(/[\da-f]{4}/i)||l("Invalid unicode escape [\\u"+g+"]"),r+=4,d+=String.fromCharCode(parseInt(g,
16))):d=(f=md[g])?d+f:d+g,f=!1;else if("\\"==g)f=!0;else{if(g==b){r++;n.push({index:c,text:e,string:d,json:!0,fn:function(){return d}});return}d+=g}r++}l("Unterminated quote",c)}for(var n=[],s,r=0,y=[],u,q=":";r<a.length;){u=a.charAt(r);if(c("\"'"))p(u);else if(e(u)||c(".")&&e(d()))h();else if(k(u))m(),-1!="{,".indexOf(q)&&("{"==y[0]&&(s=n[n.length-1]))&&(s.json=-1==s.text.indexOf("."));else if(c("(){}[].,;:?"))n.push({index:r,text:u,json:-1!=":[,".indexOf(q)&&c("{[")||c("}]:,")}),c("{[")&&y.unshift(u),
c("}]")&&y.shift(),r++;else if(g(u)){r++;continue}else{var x=u+d(),v=x+d(2),t=Ta[u],P=Ta[x],w=Ta[v];w?(n.push({index:r,text:v,fn:w}),r+=3):P?(n.push({index:r,text:x,fn:P}),r+=2):t?(n.push({index:r,text:u,fn:t,json:-1!="[,:".indexOf(q)&&c("+-")}),r+=1):l("Unexpected next character ",r,r+1)}q=u}return n}function nd(a,b,c,d){function e(b,c){throw Sa("syntax",c.text,b,c.index+1,a,a.substring(c.index));}function g(){if(0===ba.length)throw Sa("ueoe",a);return ba[0]}function k(a,b,c,d){if(0<ba.length){var e=
ba[0],f=e.text;if(f==a||f==b||f==c||f==d||!(a||b||c||d))return e}return!1}function f(a,c,d,f){return(a=k(a,c,d,f))?(b&&!a.json&&e("is not valid json",a),ba.shift(),a):!1}function l(a){f(a)||e("is unexpected, expecting ["+a+"]",k())}function h(a,b){return F(function(c,d){return a(c,d,b)},{constant:b.constant})}function m(a,b,c){return F(function(d,e){return a(d,e)?b(d,e):c(d,e)},{constant:a.constant&&b.constant&&c.constant})}function p(a,b,c){return F(function(d,e){return b(d,e,a,c)},{constant:a.constant&&
c.constant})}function n(){for(var a=[];;)if(0<ba.length&&!k("}",")",";","]")&&a.push(K()),!f(";"))return 1==a.length?a[0]:function(b,c){for(var d,e=0;e<a.length;e++){var f=a[e];f&&(d=f(b,c))}return d}}function s(){for(var a=f(),b=c(a.text),d=[];;)if(a=f(":"))d.push(z());else{var e=function(a,c,e){e=[e];for(var f=0;f<d.length;f++)e.push(d[f](a,c));return b.apply(a,e)};return function(){return e}}}function r(){var a=y(),b,c;if(f("?")){b=r();if(c=f(":"))return m(a,b,r());e("expected :",c)}else return a}
function y(){for(var a=u(),b;;)if(b=f("||"))a=p(a,b.fn,u());else return a}function u(){var a=q(),b;if(b=f("&&"))a=p(a,b.fn,u());return a}function q(){var a=x(),b;if(b=f("==","!=","===","!=="))a=p(a,b.fn,q());return a}function x(){var a;a=B();for(var b;b=f("+","-");)a=p(a,b.fn,B());if(b=f("<",">","<=",">="))a=p(a,b.fn,x());return a}function B(){for(var a=t(),b;b=f("*","/","%");)a=p(a,b.fn,t());return a}function t(){var a;return f("+")?P():(a=f("-"))?p(ia,a.fn,t()):(a=f("!"))?h(a.fn,t()):P()}function P(){var a;
if(f("("))a=K(),l(")");else if(f("["))a=C();else if(f("{"))a=A();else{var b=f();(a=b.fn)||e("not a primary expression",b);b.json&&(a.constant=a.literal=!0)}for(var c;b=f("(","[",".");)"("===b.text?(a=D(a,c),c=null):"["===b.text?(c=a,a=I(a)):"."===b.text?(c=a,a=ua(a)):e("IMPOSSIBLE");return a}function C(){var a=[],b=!0;if("]"!=g().text){do{var c=z();a.push(c);c.constant||(b=!1)}while(f(","))}l("]");return F(function(b,c){for(var d=[],e=0;e<a.length;e++)d.push(a[e](b,c));return d},{literal:!0,constant:b})}
function A(){var a=[],b=!0;if("}"!=g().text){do{var c=f(),c=c.string||c.text;l(":");var d=z();a.push({key:c,value:d});d.constant||(b=!1)}while(f(","))}l("}");return F(function(b,c){for(var d={},e=0;e<a.length;e++){var f=a[e];d[f.key]=f.value(b,c)}return d},{literal:!0,constant:b})}var ia=W(0),X,ba=ld(a,d),z=function(){var b=r(),c,d;return(d=f("="))?(b.assign||e("implies assignment but ["+a.substring(0,d.index)+"] can not be assigned to",d),c=r(),function(a,d){return b.assign(a,c(a,d),d)}):b},D=function(a,
b){var c=[];if(")"!=g().text){do c.push(z());while(f(","))}l(")");return function(d,e){for(var f=[],g=b?b(d,e):d,m=0;m<c.length;m++)f.push(c[m](d,e));m=a(d,e,g)||w;return m.apply?m.apply(g,f):m(f[0],f[1],f[2],f[3],f[4])}},ua=function(b){var c=f().text,e=lc(c,d,a);return F(function(a,c,d){return e(d||b(a,c),c)},{assign:function(d,e,f){return db(b(d,f),c,e,a)}})},I=function(b){var c=z();l("]");return F(function(d,e){var f=b(d,e),g=c(d,e),m;if(!f)return v;(f=kc(f[g],a))&&f.then&&(m=f,"$$v"in f||(m.$$v=
v,m.then(function(a){m.$$v=a})),f=f.$$v);return f},{assign:function(d,e,f){var g=c(d,f);return kc(b(d,f),a)[g]=e}})},K=function(){for(var a=z(),b;;)if(b=f("|"))a=p(a,b.fn,s());else return a};b?(z=y,D=ua=I=K=function(){e("is not valid json",{text:a,index:0})},X=P()):X=n();0!==ba.length&&e("is an unexpected token",ba[0]);X.literal=!!X.literal;X.constant=!!X.constant;return X}function db(a,b,c,d){b=b.split(".");for(var e,g=0;1<b.length;g++){e=qa(b.shift(),d);var k=a[e];k||(k={},a[e]=k);a=k;a.then&&("$$v"in
a||function(a){a.then(function(b){a.$$v=b})}(a),a.$$v===v&&(a.$$v={}),a=a.$$v)}e=qa(b.shift(),d);return a[e]=c}function mc(a,b,c,d,e,g){qa(a,g);qa(b,g);qa(c,g);qa(d,g);qa(e,g);return function(g,f){var l=f&&f.hasOwnProperty(a)?f:g,h;if(null===l||l===v)return l;(l=l[a])&&l.then&&("$$v"in l||(h=l,h.$$v=v,h.then(function(a){h.$$v=a})),l=l.$$v);if(!b||null===l||l===v)return l;(l=l[b])&&l.then&&("$$v"in l||(h=l,h.$$v=v,h.then(function(a){h.$$v=a})),l=l.$$v);if(!c||null===l||l===v)return l;(l=l[c])&&l.then&&
("$$v"in l||(h=l,h.$$v=v,h.then(function(a){h.$$v=a})),l=l.$$v);if(!d||null===l||l===v)return l;(l=l[d])&&l.then&&("$$v"in l||(h=l,h.$$v=v,h.then(function(a){h.$$v=a})),l=l.$$v);if(!e||null===l||l===v)return l;(l=l[e])&&l.then&&("$$v"in l||(h=l,h.$$v=v,h.then(function(a){h.$$v=a})),l=l.$$v);return l}}function lc(a,b,c){if(Bb.hasOwnProperty(a))return Bb[a];var d=a.split("."),e=d.length;if(b)b=6>e?mc(d[0],d[1],d[2],d[3],d[4],c):function(a,b){var g=0,h;do h=mc(d[g++],d[g++],d[g++],d[g++],d[g++],c)(a,
b),b=v,a=h;while(g<e);return h};else{var g="var l, fn, p;\n";q(d,function(a,b){qa(a,c);g+="if(s === null || s === undefined) return s;\nl=s;\ns="+(b?"s":'((k&&k.hasOwnProperty("'+a+'"))?k:s)')+'["'+a+'"];\nif (s && s.then) {\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n'});g+="return s;";b=Function("s","k",g);b.toString=function(){return g}}return Bb[a]=b}function od(){var a={};this.$get=["$filter","$sniffer",function(b,c){return function(d){switch(typeof d){case "string":return a.hasOwnProperty(d)?
a[d]:a[d]=nd(d,!1,b,c.csp);case "function":return d;default:return w}}}]}function pd(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return qd(function(b){a.$evalAsync(b)},b)}]}function qd(a,b){function c(a){return a}function d(a){return k(a)}var e=function(){var f=[],l,h;return h={resolve:function(b){if(f){var c=f;f=v;l=g(b);c.length&&a(function(){for(var a,b=0,d=c.length;b<d;b++)a=c[b],l.then(a[0],a[1],a[2])})}},reject:function(a){h.resolve(k(a))},notify:function(b){if(f){var c=f;f.length&&
a(function(){for(var a,d=0,e=c.length;d<e;d++)a=c[d],a[2](b)})}},promise:{then:function(a,g,h){var k=e(),r=function(d){try{k.resolve((a||c)(d))}catch(e){k.reject(e),b(e)}},y=function(a){try{k.resolve((g||d)(a))}catch(c){k.reject(c),b(c)}},u=function(a){try{k.notify((h||c)(a))}catch(d){b(d)}};f?f.push([r,y,u]):l.then(r,y,u);return k.promise},"catch":function(a){return this.then(null,a)},"finally":function(a){function b(a,c){var d=e();c?d.resolve(a):d.reject(a);return d.promise}function d(e,f){var g=
null;try{g=(a||c)()}catch(h){return b(h,!1)}return g&&g.then?g.then(function(){return b(e,f)},function(a){return b(a,!1)}):b(e,f)}return this.then(function(a){return d(a,!0)},function(a){return d(a,!1)})}}}},g=function(b){return b&&b.then?b:{then:function(c){var d=e();a(function(){d.resolve(c(b))});return d.promise}}},k=function(b){return{then:function(c,g){var m=e();a(function(){m.resolve((g||d)(b))});return m.promise}}};return{defer:e,reject:k,when:function(f,l,h,m){var p=e(),n,s=function(a){try{return(l||
c)(a)}catch(d){return b(d),k(d)}},r=function(a){try{return(h||d)(a)}catch(c){return b(c),k(c)}},y=function(a){try{return(m||c)(a)}catch(d){b(d)}};a(function(){g(f).then(function(a){n||(n=!0,p.resolve(g(a).then(s,r,y)))},function(a){n||(n=!0,p.resolve(r(a)))},function(a){n||p.notify(y(a))})});return p.promise},all:function(a){var b=e(),c=0,d=I(a)?[]:{};q(a,function(a,e){c++;g(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&
b.resolve(d);return b.promise}}}function rd(){var a=10,b=M("$rootScope");this.digestTtl=function(b){arguments.length&&(a=b);return a};this.$get=["$injector","$exceptionHandler","$parse",function(c,d,e){function g(){this.$id=Ua();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this;this.$$destroyed=!1;this.$$asyncQueue=[];this.$$listeners={};this.$$isolateBindings={}}function k(a){if(h.$$phase)throw b("inprog",
h.$$phase);h.$$phase=a}function f(a,b){var c=e(a);Ia(c,b);return c}function l(){}g.prototype={$new:function(a){a?(a=new g,a.$root=this.$root,a.$$asyncQueue=this.$$asyncQueue):(a=function(){},a.prototype=this,a=new a,a.$id=Ua());a["this"]=a;a.$$listeners={};a.$parent=this;a.$$watchers=a.$$nextSibling=a.$$childHead=a.$$childTail=null;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=this.$$childTail=a;return a},$watch:function(a,b,c){var d=
f(a,"watch"),e=this.$$watchers,g={fn:b,last:l,get:d,exp:a,eq:!!c};if(!H(b)){var h=f(b||w,"listener");g.fn=function(a,b,c){h(c)}}if("string"==typeof a&&d.constant){var k=g.fn;g.fn=function(a,b,c){k.call(this,a,b,c);Fa(e,g)}}e||(e=this.$$watchers=[]);e.unshift(g);return function(){Fa(e,g)}},$watchCollection:function(a,b){var c=this,d,f,g=0,h=e(a),k=[],l={},q=0;return this.$watch(function(){f=h(c);var a,b;if(Q(f))if(kb(f))for(d!==k&&(d=k,q=d.length=0,g++),a=f.length,q!==a&&(g++,d.length=q=a),b=0;b<a;b++)d[b]!==
f[b]&&(g++,d[b]=f[b]);else{d!==l&&(d=l={},q=0,g++);a=0;for(b in f)f.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==f[b]&&(g++,d[b]=f[b]):(q++,d[b]=f[b],g++));if(q>a)for(b in g++,d)d.hasOwnProperty(b)&&!f.hasOwnProperty(b)&&(q--,delete d[b])}else d!==f&&(d=f,g++);return g},function(){b(f,d,c)})},$digest:function(){var c,e,f,g,r=this.$$asyncQueue,q,u,v=a,x,B=[],t,w;k("$digest");do{u=!1;for(x=this;r.length;)try{x.$eval(r.shift())}catch(C){d(C)}do{if(g=x.$$watchers)for(q=g.length;q--;)try{(c=g[q])&&
((e=c.get(x))!==(f=c.last)&&!(c.eq?xa(e,f):"number"==typeof e&&"number"==typeof f&&isNaN(e)&&isNaN(f)))&&(u=!0,c.last=c.eq?aa(e):e,c.fn(e,f===l?e:f,x),5>v&&(t=4-v,B[t]||(B[t]=[]),w=H(c.exp)?"fn: "+(c.exp.name||c.exp.toString()):c.exp,w+="; newVal: "+ma(e)+"; oldVal: "+ma(f),B[t].push(w)))}catch(z){d(z)}if(!(g=x.$$childHead||x!==this&&x.$$nextSibling))for(;x!==this&&!(g=x.$$nextSibling);)x=x.$parent}while(x=g);if(u&&!v--)throw h.$$phase=null,b("infdig",a,ma(B));}while(u||r.length);h.$$phase=null},
$destroy:function(){if(h!=this&&!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null}},$eval:function(a,b){return e(a)(this,
b)},$evalAsync:function(a){this.$$asyncQueue.push(a)},$apply:function(a){try{return k("$apply"),this.$eval(a)}catch(b){d(b)}finally{h.$$phase=null;try{h.$digest()}catch(c){throw d(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);return function(){c[Wa(c,b)]=null}},$emit:function(a,b){var c=[],e,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=[h].concat(sa.call(arguments,
1)),l,q;do{e=f.$$listeners[a]||c;h.currentScope=f;l=0;for(q=e.length;l<q;l++)if(e[l])try{if(e[l].apply(null,k),g)return h}catch(t){d(t)}else e.splice(l,1),l--,q--;f=f.$parent}while(f);return h},$broadcast:function(a,b){var c=this,e=this,f={name:a,targetScope:this,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1},g=[f].concat(sa.call(arguments,1)),h,l;do{c=e;f.currentScope=c;e=c.$$listeners[a]||[];h=0;for(l=e.length;h<l;h++)if(e[h])try{e[h].apply(null,g)}catch(k){d(k)}else e.splice(h,
1),h--,l--;if(!(e=c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(e=c.$$nextSibling);)c=c.$parent}while(c=e);return f}};var h=new g;return h}]}function sd(){this.SCE_CONTEXTS=ca;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=b);return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=a);return b};this.$get=["$log","$document","$injector","$$urlUtils",function(c,d,e,g){function k(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};
a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ca("unsafe");};e.has("$sanitize")&&(f=e.get("$sanitize"));var l=k(),h={};h[ca.HTML]=k(l);h[ca.CSS]=k(l);h[ca.URL]=k(l);h[ca.JS]=k(l);h[ca.RESOURCE_URL]=k(h[ca.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ca("icontext",a,b);if(null===b||b===v||""===b)return b;if("string"!==
typeof b)throw Ca("itype",a);return new c(b)},getTrusted:function(c,d){if(null===d||d===v||""===d)return d;var e=h.hasOwnProperty(c)?h[c]:null;if(e&&d instanceof e)return d.$$unwrapTrustedValue();if(c===ca.RESOURCE_URL){var e=g.resolve(d.toString(),!0),l,k,q=!1;l=0;for(k=a.length;l<k;l++)if("self"===a[l]?g.isSameOrigin(e):e.href.match(a[l])){q=!0;break}if(q)for(l=0,k=b.length;l<k;l++)if("self"===b[l]?g.isSameOrigin(e):e.href.match(b[l])){q=!1;break}if(q)return d;throw Ca("insecurl",d.toString());
}if(c===ca.HTML)return f(d);throw Ca("unsafe");},valueOf:function(a){return a instanceof l?a.$$unwrapTrustedValue():a}}}]}function td(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$document","$sceDelegate",function(b,c,d){if(a&&R&&(c=c[0].documentMode,c!==v&&8>c))throw Ca("iequirks");var e=aa(ca);e.isEnabled=function(){return a};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;a||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=
wa);e.parseAs=function(a,c){var d=b(c);return d.literal&&d.constant?d:function(b,c){return e.getTrusted(a,d(b,c))}};var g=e.parseAs,k=e.getTrusted,f=e.trustAs;Ha.forEach(ca,function(a,b){var c=G(b);e[Ja("parse_as_"+c)]=function(b){return g(a,b)};e[Ja("get_trusted_"+c)]=function(b){return k(a,b)};e[Ja("trust_as_"+c)]=function(b){return f(a,b)}});return e}]}function ud(){this.$get=["$window","$document",function(a,b){var c={},d=U((/android (\d+)/.exec(G((a.navigator||{}).userAgent))||[])[1]),e=b[0]||
{},g,k=/^(Moz|webkit|O|ms)(?=[A-Z])/,f=e.body&&e.body.style,l=!1,h=!1;if(f){for(var m in f)if(l=k.exec(m)){g=l[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}l=!!("transition"in f||g+"Transition"in f);h=!!("animation"in f||g+"Animation"in f);!d||l&&h||(l=z(e.body.style.webkitTransition),h=z(e.body.style.webkitAnimation))}return{history:!(!a.history||!a.history.pushState||4>d),hashchange:"onhashchange"in a&&(!e.documentMode||7<e.documentMode),hasEvent:function(a){if("input"==a&&9==R)return!1;if(J(c[a])){var b=
e.createElement("div");c[a]="on"+a in b}return c[a]},csp:e.securityPolicy?e.securityPolicy.isActive:!1,vendorPrefix:g,transitions:l,animations:h}}]}function vd(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(a,b,c,d){function e(e,f,l){var h=c.defer(),m=h.promise,p=A(l)&&!l;f=b.defer(function(){try{h.resolve(e())}catch(b){h.reject(b),d(b)}p||a.$apply()},f);l=function(){delete g[m.$$timeoutId]};m.$$timeoutId=f;g[f]=h;m.then(l,l);return m}var g={};e.cancel=function(a){return a&&
a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),b.defer.cancel(a.$$timeoutId)):!1};return e}]}function wd(){this.$get=[function(){function a(a,c){var g=a;R&&(b.setAttribute("href",g),g=b.href);b.setAttribute("href",g);return c?{href:b.href,protocol:b.protocol,host:b.host}:b.href}var b=N.createElement("a"),c=a(T.location.href,!0);return{resolve:a,isSameOrigin:function(b){b="string"===typeof b?a(b,!0):b;return b.protocol===c.protocol&&b.host===c.host}}}]}function xd(){this.$get=W(T)}function nc(a){function b(b,
e){return a.factory(b+c,e)}var c="Filter";this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];b("currency",oc);b("date",pc);b("filter",yd);b("json",zd);b("limitTo",Ad);b("lowercase",Bd);b("number",qc);b("orderBy",rc);b("uppercase",Cd)}function yd(){return function(a,b,c){if(!I(a))return a;var d=[];d.check=function(a){for(var b=0;b<d.length;b++)if(!d[b](a))return!1;return!0};switch(typeof c){case "function":break;case "boolean":if(!0==c){c=function(a,b){return Ha.equals(a,
b)};break}default:c=function(a,b){b=(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)}}var e=function(a,b){if("string"==typeof b&&"!"===b.charAt(0))return!e(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,b);case "object":switch(typeof b){case "object":return c(a,b);default:for(var d in a)if("$"!==d.charAt(0)&&e(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(e(a[d],b))return!0;return!1;default:return!1}};switch(typeof b){case "boolean":case "number":case "string":b=
{$:b};case "object":for(var g in b)"$"==g?function(){if(b[g]){var a=g;d.push(function(c){return e(c,b[a])})}}():function(){if(b[g]){var a=g;d.push(function(c){return e(rb(c,a),b[a])})}}();break;case "function":d.push(b);break;default:return a}for(var k=[],f=0;f<a.length;f++){var l=a[f];d.check(l)&&k.push(l)}return k}}function oc(a){var b=a.NUMBER_FORMATS;return function(a,d){J(d)&&(d=b.CURRENCY_SYM);return sc(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function qc(a){var b=
a.NUMBER_FORMATS;return function(a,d){return sc(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,d)}}function sc(a,b,c,d,e){if(isNaN(a)||!isFinite(a))return"";var g=0>a;a=Math.abs(a);var k=a+"",f="",l=[],h=!1;if(-1!==k.indexOf("e")){var m=k.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?k="0":(f=k,h=!0)}if(h)0<e&&(-1<a&&1>a)&&(f=a.toFixed(e));else{k=(k.split(tc)[1]||"").length;J(e)&&(e=Math.min(Math.max(b.minFrac,k),b.maxFrac));k=Math.pow(10,e);a=Math.round(a*k)/k;a=(""+a).split(tc);k=a[0];a=a[1]||
"";var h=0,m=b.lgSize,p=b.gSize;if(k.length>=m+p)for(var h=k.length-m,n=0;n<h;n++)0===(h-n)%p&&0!==n&&(f+=c),f+=k.charAt(n);for(n=h;n<k.length;n++)0===(k.length-n)%m&&0!==n&&(f+=c),f+=k.charAt(n);for(;a.length<e;)a+="0";e&&"0"!==e&&(f+=d+a.substr(0,e))}l.push(g?b.negPre:b.posPre);l.push(f);l.push(g?b.negSuf:b.posSuf);return l.join("")}function Cb(a,b,c){var d="";0>a&&(d="-",a=-a);for(a=""+a;a.length<b;)a="0"+a;c&&(a=a.substr(a.length-b));return d+a}function S(a,b,c,d){c=c||0;return function(e){e=
e["get"+a]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Cb(e,b,d)}}function eb(a,b){return function(c,d){var e=c["get"+a](),g=Ba(b?"SHORT"+a:a);return d[g][e]}}function pc(a){function b(a){var b;if(b=a.match(c)){a=new Date(0);var g=0,k=0,f=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=U(b[9]+b[10]),k=U(b[9]+b[11]));f.call(a,U(b[1]),U(b[2])-1,U(b[3]));g=U(b[4]||0)-g;k=U(b[5]||0)-k;f=U(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,g,k,f,b)}return a}
var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",k=[],f,l;e=e||"mediumDate";e=a.DATETIME_FORMATS[e]||e;z(c)&&(c=Dd.test(c)?U(c):b(c));lb(c)&&(c=new Date(c));if(!Ea(c))return c;for(;e;)(l=Ed.exec(e))?(k=k.concat(sa.call(l,1)),e=k.pop()):(k.push(e),e=null);q(k,function(b){f=Fd[b];g+=f?f(c,a.DATETIME_FORMATS):b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function zd(){return function(a){return ma(a,!0)}}
function Ad(){return function(a,b){if(!I(a)&&!z(a))return a;b=U(b);if(z(a))return b?0<=b?a.slice(0,b):a.slice(b,a.length):"";var c=[],d,e;b>a.length?b=a.length:b<-a.length&&(b=-a.length);0<b?(d=0,e=b):(d=a.length+b,e=a.length);for(;d<e;d++)c.push(a[d]);return c}}function rc(a){return function(b,c,d){function e(a,b){return Ga(b)?function(b,c){return a(c,b)}:a}if(!I(b)||!c)return b;c=I(c)?c:[c];c=Ec(c,function(b){var c=!1,d=b||wa;if(z(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0),b=b.substring(1);
d=a(b)}return e(function(a,b){var c;c=d(a);var e=d(b),f=typeof c,g=typeof e;f==g?("string"==f&&(c=c.toLowerCase()),"string"==f&&(e=e.toLowerCase()),c=c===e?0:c<e?-1:1):c=f<g?-1:1;return c},c)});for(var g=[],k=0;k<b.length;k++)g.push(b[k]);return g.sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function ra(a){H(a)&&(a={link:a});a.restrict=a.restrict||"AC";return W(a)}function uc(a,b){function c(b,c){c=c?"-"+pb(c,"-"):"";a.removeClass((b?fb:gb)+c).addClass((b?
gb:fb)+c)}var d=this,e=a.parent().controller("form")||hb,g=0,k=d.$error={},f=[];d.$name=b.name||b.ngForm;d.$dirty=!1;d.$pristine=!0;d.$valid=!0;d.$invalid=!1;e.$addControl(d);a.addClass(Da);c(!0);d.$addControl=function(a){f.push(a);a.$name&&!d.hasOwnProperty(a.$name)&&(d[a.$name]=a)};d.$removeControl=function(a){a.$name&&d[a.$name]===a&&delete d[a.$name];q(k,function(b,c){d.$setValidity(c,!0,a)});Fa(f,a)};d.$setValidity=function(a,b,f){var p=k[a];if(b)p&&(Fa(p,f),p.length||(g--,g||(c(b),d.$valid=
!0,d.$invalid=!1),k[a]=!1,c(!0,a),e.$setValidity(a,!0,d)));else{g||c(b);if(p){if(-1!=Wa(p,f))return}else k[a]=p=[],g++,c(!1,a),e.$setValidity(a,!1,d);p.push(f);d.$valid=!1;d.$invalid=!0}};d.$setDirty=function(){a.removeClass(Da).addClass(ib);d.$dirty=!0;d.$pristine=!1;e.$setDirty()};d.$setPristine=function(){a.removeClass(ib).addClass(Da);d.$dirty=!1;d.$pristine=!0;q(f,function(a){a.$setPristine()})}}function $(a){return J(a)||""===a||null===a||a!==a}function jb(a,b,c,d,e,g){var k=function(){var e=
b.val();Ga(c.ngTrim||"T")&&(e=Z(e));d.$viewValue!==e&&a.$apply(function(){d.$setViewValue(e)})};if(e.hasEvent("input"))b.on("input",k);else{var f,l=function(){f||(f=g.defer(function(){k();f=null}))};b.on("keydown",function(a){a=a.keyCode;91===a||(15<a&&19>a||37<=a&&40>=a)||l()});b.on("change",k);if(e.hasEvent("paste"))b.on("paste cut",l)}d.$render=function(){b.val($(d.$viewValue)?"":d.$viewValue)};var h=c.ngPattern,m=function(a,b){if($(b)||a.test(b))return d.$setValidity("pattern",!0),b;d.$setValidity("pattern",
!1);return v};h&&((e=h.match(/^\/(.*)\/([gim]*)$/))?(h=RegExp(e[1],e[2]),e=function(a){return m(h,a)}):e=function(c){var d=a.$eval(h);if(!d||!d.test)throw M("ngPattern")("noregexp",h,d,ga(b));return m(d,c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var p=U(c.ngMinlength);e=function(a){if(!$(a)&&a.length<p)return d.$setValidity("minlength",!1),v;d.$setValidity("minlength",!0);return a};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var n=U(c.ngMaxlength);e=function(a){if(!$(a)&&
a.length>n)return d.$setValidity("maxlength",!1),v;d.$setValidity("maxlength",!0);return a};d.$parsers.push(e);d.$formatters.push(e)}}function Db(a,b){a="ngClass"+a;return function(){return{restrict:"AC",link:function(c,d,e){function g(a){if(!0===b||c.$index%2===b)f&&!xa(a,f)&&e.$removeClass(k(f)),e.$addClass(k(a));f=aa(a)}function k(a){if(I(a))return a.join(" ");if(Q(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var f=v;c.$watch(e[a],g,!0);e.$observe("class",function(b){g(c.$eval(e[a]))});
"ngClass"!==a&&c.$watch("$index",function(d,f){var g=d&1;g!==f&1&&(g===b?(g=c.$eval(e[a]),e.$addClass(k(g))):(g=c.$eval(e[a]),e.$removeClass(k(g))))})}}}}var G=function(a){return z(a)?a.toLowerCase():a},Ba=function(a){return z(a)?a.toUpperCase():a},R=U((/msie (\d+)/.exec(G(navigator.userAgent))||[])[1]),C,ya,sa=[].slice,Gd=[].push,Va=Object.prototype.toString,Xa=M("ng"),Ha=T.angular||(T.angular={}),Oa,Aa,fa=["0","0","0"];w.$inject=[];wa.$inject=[];var Z=function(){return String.prototype.trim?function(a){return z(a)?
a.trim():a}:function(a){return z(a)?a.replace(/^\s*/,"").replace(/\s*$/,""):a}}();Aa=9>R?function(a){a=a.nodeName?a:a[0];return a.scopeName&&"HTML"!=a.scopeName?Ba(a.scopeName+":"+a.nodeName):a.nodeName}:function(a){return a.nodeName?a.nodeName:a[0].nodeName};var Ic=/[A-Z]/g,Hd={full:"1.2.0rc1",major:1,minor:2,dot:0,codeName:"spooky-giraffe"},La=O.cache={},Ya=O.expando="ng-"+(new Date).getTime(),Mc=1,vc=T.document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+
b,c)},wb=T.document.removeEventListener?function(a,b,c){a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent("on"+b,c)},Kc=/([\:\-\_]+(.))/g,Lc=/^moz([A-Z])/,tb=M("jqLite"),Pa=O.prototype={ready:function(a){function b(){c||(c=!0,a())}var c=!1;"complete"===N.readyState?setTimeout(b):(this.on("DOMContentLoaded",b),O(T).on("load",b))},toString:function(){var a=[];q(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?C(this[a]):C(this[this.length+a])},length:0,
push:Gd,sort:[].sort,splice:[].splice},ab={};q("multiple selected checked disabled readOnly required open".split(" "),function(a){ab[G(a)]=a});var Vb={};q("input select option textarea button form details".split(" "),function(a){Vb[Ba(a)]=!0});q({data:Qb,inheritedData:$a,scope:function(a){return $a(a,"$scope")},controller:Tb,injector:function(a){return $a(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Za,css:function(a,b,c){b=Ja(b);if(A(c))a.style[b]=c;else{var d;8>=R&&(d=
a.currentStyle&&a.currentStyle[b],""===d&&(d="auto"));d=d||a.style[b];8>=R&&(d=""===d?v:d);return d}},attr:function(a,b,c){var d=G(b);if(ab[d])if(A(c))c?(a[b]=!0,a.setAttribute(b,d)):(a[b]=!1,a.removeAttribute(d));else return a[b]||(a.attributes.getNamedItem(b)||w).specified?d:v;else if(A(c))a.setAttribute(b,c);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?v:a},prop:function(a,b,c){if(A(c))a[b]=c;else return a[b]},text:function(){function a(a,d){var e=b[a.nodeType];if(J(d))return e?
a[e]:"";a[e]=d}var b=[];9>R?(b[1]="innerText",b[3]="nodeValue"):b[1]=b[3]="textContent";a.$dv="";return a}(),val:function(a,b){if(J(b)){if("SELECT"===Aa(a)&&a.multiple){var c=[];q(a.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return a.value}a.value=b},html:function(a,b){if(J(b))return a.innerHTML;for(var c=0,d=a.childNodes;c<d.length;c++)Ka(d[c]);a.innerHTML=b}},function(a,b){O.prototype[b]=function(b,d){var e,g;if((2==a.length&&a!==Za&&a!==Tb?b:d)===v){if(Q(b)){for(e=
0;e<this.length;e++)if(a===Qb)a(this[e],b);else for(g in b)a(this[e],g,b[g]);return this}e=a.$dv;g=e==v?Math.min(this.length,1):this.length;for(var k=0;k<g;k++){var f=a(this[k],b,d);e=e?e+f:f}return e}for(e=0;e<this.length;e++)a(this[e],b,d);return this}});q({removeData:Ob,dealoc:Ka,on:function b(c,d,e,g){if(A(g))throw tb("onargs");var k=ha(c,"events"),f=ha(c,"handle");k||ha(c,"events",k={});f||ha(c,"handle",f=Nc(c,k));q(d.split(" "),function(d){var g=k[d];if(!g){if("mouseenter"==d||"mouseleave"==
d){var m=N.body.contains||N.body.compareDocumentPosition?function(b,c){var d=9===b.nodeType?b.documentElement:b,e=c&&c.parentNode;return b===e||!!(e&&1===e.nodeType&&(d.contains?d.contains(e):b.compareDocumentPosition&&b.compareDocumentPosition(e)&16))}:function(b,c){if(c)for(;c=c.parentNode;)if(c===b)return!0;return!1};k[d]=[];b(c,{mouseleave:"mouseout",mouseenter:"mouseover"}[d],function(b){var c=b.relatedTarget;c&&(c===this||m(this,c))||f(b,d)})}else vc(c,d,f),k[d]=[];g=k[d]}g.push(e)})},off:Pb,
replaceWith:function(b,c){var d,e=b.parentNode;Ka(b);q(new O(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,b);d=c})},children:function(b){var c=[];q(b.childNodes,function(b){1===b.nodeType&&c.push(b)});return c},contents:function(b){return b.childNodes||[]},append:function(b,c){q(new O(c),function(c){1!==b.nodeType&&11!==b.nodeType||b.appendChild(c)})},prepend:function(b,c){if(1===b.nodeType){var d=b.firstChild;q(new O(c),function(c){b.insertBefore(c,d)})}},wrap:function(b,c){c=
C(c)[0];var d=b.parentNode;d&&d.replaceChild(c,b);c.appendChild(b)},remove:function(b){Ka(b);var c=b.parentNode;c&&c.removeChild(b)},after:function(b,c){var d=b,e=b.parentNode;q(new O(c),function(b){e.insertBefore(b,d.nextSibling);d=b})},addClass:Sb,removeClass:Rb,toggleClass:function(b,c,d){J(d)&&(d=!Za(b,c));(d?Sb:Rb)(b,c)},parent:function(b){return(b=b.parentNode)&&11!==b.nodeType?b:null},next:function(b){if(b.nextElementSibling)return b.nextElementSibling;for(b=b.nextSibling;null!=b&&1!==b.nodeType;)b=
b.nextSibling;return b},find:function(b,c){return b.getElementsByTagName(c)},clone:vb,triggerHandler:function(b,c,d){c=(ha(b,"events")||{})[c];d=d||{preventDefault:w,stopPropagation:w};q(c,function(c){c.call(b,d)})}},function(b,c){O.prototype[c]=function(c,e,g){for(var k,f=0;f<this.length;f++)k==v?(k=b(this[f],c,e,g),k!==v&&(k=C(k))):ub(k,b(this[f],c,e,g));return k==v?this:k};O.prototype.bind=O.prototype.on;O.prototype.unbind=O.prototype.off});Ma.prototype={put:function(b,c){this[za(b)]=c},get:function(b){return this[za(b)]},
remove:function(b){var c=this[b=za(b)];delete this[b];return c}};var Pc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,Qc=/,/,Rc=/^\s*(_?)(\S+?)\1\s*$/,Oc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Na=M("$injector"),Id=M("$animate"),Jd=["$provide",function(b){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Id("notcsel",c);this.$$selectors[c.substr(1)]=e;b.factory(e,d)};this.$get=["$timeout",function(b){return{enter:function(d,e,g,k){g=g&&g[g.length-1];var f=e&&e[0]||
g&&g.parentNode,l=g&&g.nextSibling||null;q(d,function(b){f.insertBefore(b,l)});b(k||w,0,!1)},leave:function(d,e){d.remove();b(e||w,0,!1)},move:function(b,c,g,k){this.enter(b,c,g,k)},addClass:function(d,e,g){e=z(e)?e:I(e)?e.join(" "):"";d.addClass(e);b(g||w,0,!1)},removeClass:function(d,e,g){e=z(e)?e:I(e)?e.join(" "):"";d.removeClass(e);b(g||w,0,!1)},enabled:w}}]}],ea=M("$compile");Xb.$inject=["$provide"];var Zc=/^(x[\:\-_]|data[\:\-_])/i,fd=T.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(b){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw M("$httpBackend")("noxhr");
},cc=M("$interpolate"),bc=/^([^:]+):\/\/(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,gc=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,id={http:80,https:443,ftp:21},zb=M("$location");ic.prototype=Ab.prototype=hc.prototype={$$html5:!1,$$replace:!1,absUrl:cb("$$absUrl"),url:function(b,c){if(J(b))return this.$$url;var d=gc.exec(b);d[1]&&this.path(decodeURIComponent(d[1]));(d[2]||d[1])&&this.search(d[3]||"");this.hash(d[5]||"",c);return this},protocol:cb("$$protocol"),host:cb("$$host"),
port:cb("$$port"),path:jc("$$path",function(b){return"/"==b.charAt(0)?b:"/"+b}),search:function(b,c){switch(arguments.length){case 0:return this.$$search;case 1:if(z(b))this.$$search=Kb(b);else if(Q(b))this.$$search=b;else throw zb("isrcharg");break;default:c==v||null==c?delete this.$$search[b]:this.$$search[b]=c}this.$$compose();return this},hash:jc("$$hash",wa),replace:function(){this.$$replace=!0;return this}};var Sa=M("$parse"),Ta={"null":function(){return null},"true":function(){return!0},"false":function(){return!1},
undefined:w,"+":function(b,c,d,e){d=d(b,c);e=e(b,c);return A(d)?A(e)?d+e:d:A(e)?e:v},"-":function(b,c,d,e){d=d(b,c);e=e(b,c);return(A(d)?d:0)-(A(e)?e:0)},"*":function(b,c,d,e){return d(b,c)*e(b,c)},"/":function(b,c,d,e){return d(b,c)/e(b,c)},"%":function(b,c,d,e){return d(b,c)%e(b,c)},"^":function(b,c,d,e){return d(b,c)^e(b,c)},"=":w,"===":function(b,c,d,e){return d(b,c)===e(b,c)},"!==":function(b,c,d,e){return d(b,c)!==e(b,c)},"==":function(b,c,d,e){return d(b,c)==e(b,c)},"!=":function(b,c,d,e){return d(b,
c)!=e(b,c)},"<":function(b,c,d,e){return d(b,c)<e(b,c)},">":function(b,c,d,e){return d(b,c)>e(b,c)},"<=":function(b,c,d,e){return d(b,c)<=e(b,c)},">=":function(b,c,d,e){return d(b,c)>=e(b,c)},"&&":function(b,c,d,e){return d(b,c)&&e(b,c)},"||":function(b,c,d,e){return d(b,c)||e(b,c)},"&":function(b,c,d,e){return d(b,c)&e(b,c)},"|":function(b,c,d,e){return e(b,c)(b,c,d(b,c))},"!":function(b,c,d){return!d(b,c)}},md={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Bb={},Ca=M("$sce"),ca={HTML:"html",
CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"};nc.$inject=["$provide"];oc.$inject=["$locale"];qc.$inject=["$locale"];var tc=".",Fd={yyyy:S("FullYear",4),yy:S("FullYear",2,0,!0),y:S("FullYear",1),MMMM:eb("Month"),MMM:eb("Month",!0),MM:S("Month",2,1),M:S("Month",1,1),dd:S("Date",2),d:S("Date",1),HH:S("Hours",2),H:S("Hours",1),hh:S("Hours",2,-12),h:S("Hours",1,-12),mm:S("Minutes",2),m:S("Minutes",1),ss:S("Seconds",2),s:S("Seconds",1),sss:S("Milliseconds",3),EEEE:eb("Day"),EEE:eb("Day",!0),a:function(b,
c){return 12>b.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(b){b=-1*b.getTimezoneOffset();return b=(0<=b?"+":"")+(Cb(Math[0<b?"floor":"ceil"](b/60),2)+Cb(Math.abs(b%60),2))}},Ed=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,Dd=/^\d+$/;pc.$inject=["$locale"];var Bd=W(G),Cd=W(Ba);rc.$inject=["$parse"];var Kd=W({restrict:"E",compile:function(b,c){8>=R&&(c.href||c.name||c.$set("href",""),b.append(N.createComment("IE fix")));return function(b,c){c.on("click",function(b){c.attr("href")||
b.preventDefault()})}}}),Eb={};q(ab,function(b,c){if("multiple"!=b){var d=ka("ng-"+c);Eb[d]=function(){return{priority:100,compile:function(){return function(b,g,k){b.$watch(k[d],function(b){k.$set(c,!!b)})}}}}}});q(["src","srcset","href"],function(b){var c=ka("ng-"+b);Eb[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(b,c),R&&e.prop(b,g[b]))})}}}});var hb={$addControl:w,$removeControl:w,$setValidity:w,$setDirty:w,$setPristine:w};uc.$inject=["$element","$attrs",
"$scope"];var wc=function(b){return["$timeout",function(c){var d={name:"form",restrict:"E",controller:uc,compile:function(){return{pre:function(b,d,k,f){if(!k.action){var l=function(b){b.preventDefault?b.preventDefault():b.returnValue=!1};vc(d[0],"submit",l);d.on("$destroy",function(){c(function(){wb(d[0],"submit",l)},0,!1)})}var h=d.parent().controller("form"),m=k.name||k.ngForm;m&&db(b,m,f,m);if(h)d.on("$destroy",function(){h.$removeControl(f);m&&db(b,m,v,m);F(f,hb)})}}}};return b?F(aa(d),{restrict:"EAC"}):
d}]},Ld=wc(),Md=wc(!0),Nd=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Od=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/,Pd=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,xc={text:jb,number:function(b,c,d,e,g,k){jb(b,c,d,e,g,k);e.$parsers.push(function(b){var c=$(b);if(c||Pd.test(b))return e.$setValidity("number",!0),""===b?null:c?b:parseFloat(b);e.$setValidity("number",!1);return v});e.$formatters.push(function(b){return $(b)?"":""+b});if(d.min){var f=parseFloat(d.min);
b=function(b){if(!$(b)&&b<f)return e.$setValidity("min",!1),v;e.$setValidity("min",!0);return b};e.$parsers.push(b);e.$formatters.push(b)}if(d.max){var l=parseFloat(d.max);d=function(b){if(!$(b)&&b>l)return e.$setValidity("max",!1),v;e.$setValidity("max",!0);return b};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(b){if($(b)||lb(b))return e.$setValidity("number",!0),b;e.$setValidity("number",!1);return v})},url:function(b,c,d,e,g,k){jb(b,c,d,e,g,k);b=function(b){if($(b)||Nd.test(b))return e.$setValidity("url",
!0),b;e.$setValidity("url",!1);return v};e.$formatters.push(b);e.$parsers.push(b)},email:function(b,c,d,e,g,k){jb(b,c,d,e,g,k);b=function(b){if($(b)||Od.test(b))return e.$setValidity("email",!0),b;e.$setValidity("email",!1);return v};e.$formatters.push(b);e.$parsers.push(b)},radio:function(b,c,d,e){J(d.name)&&c.attr("name",Ua());c.on("click",function(){c[0].checked&&b.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},
checkbox:function(b,c,d,e){var g=d.ngTrueValue,k=d.ngFalseValue;z(g)||(g=!0);z(k)||(k=!1);c.on("click",function(){b.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$formatters.push(function(b){return b===g});e.$parsers.push(function(b){return b?g:k})},hidden:w,button:w,submit:w,reset:w},yc=["$browser","$sniffer",function(b,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,k){k&&(xc[G(g.type)]||xc.text)(d,e,g,k,c,b)}}}],gb="ng-valid",
fb="ng-invalid",Da="ng-pristine",ib="ng-dirty",Qd=["$scope","$exceptionHandler","$attrs","$element","$parse",function(b,c,d,e,g){function k(b,c){c=c?"-"+pb(c,"-"):"";e.removeClass((b?fb:gb)+c).addClass((b?gb:fb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var f=g(d.ngModel),l=f.assign;if(!l)throw M("ngModel")("nonassign",d.ngModel,ga(e));this.$render=
w;var h=e.inheritedData("$formController")||hb,m=0,p=this.$error={};e.addClass(Da);k(!0);this.$setValidity=function(b,c){p[b]!==!c&&(c?(p[b]&&m--,m||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,m++),p[b]=!c,k(c,b),h.$setValidity(b,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(ib).addClass(Da)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,e.removeClass(Da).addClass(ib),h.$setDirty());
q(this.$parsers,function(b){d=b(d)});this.$modelValue!==d&&(this.$modelValue=d,l(b,d),q(this.$viewChangeListeners,function(b){try{b()}catch(d){c(d)}}))};var n=this;b.$watch(function(){var c=f(b);if(n.$modelValue!==c){var d=n.$formatters,e=d.length;for(n.$modelValue=c;e--;)c=d[e](c);n.$viewValue!==c&&(n.$viewValue=c,n.$render())}})}],Rd=function(){return{require:["ngModel","^?form"],controller:Qd,link:function(b,c,d,e){var g=e[0],k=e[1]||hb;k.$addControl(g);c.on("$destroy",function(){k.$removeControl(g)})}}},
Sd=W({require:"ngModel",link:function(b,c,d,e){e.$viewChangeListeners.push(function(){b.$eval(d.ngChange)})}}),zc=function(){return{require:"?ngModel",link:function(b,c,d,e){if(e){d.required=!0;var g=function(b){if(d.required&&($(b)||!1===b))e.$setValidity("required",!1);else return e.$setValidity("required",!0),b};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},Td=function(){return{require:"ngModel",link:function(b,c,d,e){var g=(b=/\/(.*)\//.exec(d.ngList))&&
RegExp(b[1])||d.ngList||",";e.$parsers.push(function(b){var c=[];b&&q(b.split(g),function(b){b&&c.push(Z(b))});return c});e.$formatters.push(function(b){return I(b)?b.join(", "):v})}}},Ud=/^(true|false|\d+)$/,Vd=function(){return{priority:100,compile:function(b,c){return Ud.test(c.ngValue)?function(b,c,g){g.$set("value",b.$eval(g.ngValue))}:function(b,c,g){b.$watch(g.ngValue,function(b){g.$set("value",b)})}}}},Wd=ra(function(b,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);b.$watch(d.ngBind,
function(b){c.text(b==v?"":b)})}),Xd=["$interpolate",function(b){return function(c,d,e){c=b(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(b){d.text(b)})}}],Yd=["$sce",function(b){return function(c,d,e){d.addClass("ng-binding").data("$binding",e.ngBindHtml);c.$watch(b.parseAsHtml(e.ngBindHtml),function(b){d.html(b||"")})}}],Zd=Db("",!0),$d=Db("Odd",0),ae=Db("Even",1),be=ra({compile:function(b,c){c.$set("ngCloak",v);b.removeClass("ng-cloak")}}),
ce=[function(){return{scope:!0,controller:"@"}}],de=["$sniffer",function(b){return{priority:1E3,compile:function(){b.csp=!0}}}],Ac={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur".split(" "),function(b){var c=ka("ng-"+b);Ac[c]=["$parse",function(d){return function(e,g,k){var f=d(k[c]);g.on(G(b),function(b){e.$apply(function(){f(e,{$event:b})})})}}]});var ee=["$animate",function(b){return{transclude:"element",priority:1E3,
terminal:!0,restrict:"A",compile:function(c,d,e){return function(c,d,f){var l,h;c.$watch(f.ngIf,function(f){l&&(b.leave(l),l=v);h&&(h.$destroy(),h=v);Ga(f)&&(h=c.$new(),e(h,function(c){l=c;b.enter(c,d.parent(),d)}))})}}}}],fe=["$http","$templateCache","$anchorScroll","$compile","$animate","$sce",function(b,c,d,e,g,k){return{restrict:"ECA",terminal:!0,priority:500,compile:function(f,l){var h=l.ngInclude||l.src,m=l.onload||"",p=l.autoscroll;f.html("");var n=C(N.createComment(" ngInclude: "+h+" "));
f.replaceWith(n);return function(l){var q=0,v,u,w=function(){v&&(v.$destroy(),v=null);u&&(g.leave(u),u=null)};l.$watch(k.parseAsResourceUrl(h),function(k){var h=++q;k?(b.get(k,{cache:c}).success(function(b){if(h===q){var c=l.$new();w();v=c;u=f.clone();u.html(b);g.enter(u,null,n);e(u,!1,499)(v);!A(p)||p&&!l.$eval(p)||d();v.$emit("$includeContentLoaded");l.$eval(m)}}).error(function(){h===q&&w()}),l.$emit("$includeContentRequested")):w()})}}}}],ge=ra({compile:function(){return{pre:function(b,c,d){b.$eval(d.ngInit)}}}}),
he=ra({terminal:!0,priority:1E3}),ie=["$locale","$interpolate",function(b,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,k){var f=k.count,l=k.$attr.when&&g.attr(k.$attr.when),h=k.offset||0,m=e.$eval(l)||{},p={},n=c.startSymbol(),s=c.endSymbol(),r=/^when(Minus)?(.+)$/;q(k,function(b,c){r.test(c)&&(m[G(c.replace("when","").replace("Minus","-"))]=g.attr(k.$attr[c]))});q(m,function(b,e){p[e]=c(b.replace(d,n+f+"-"+h+s))});e.$watch(function(){var c=parseFloat(e.$eval(f));if(isNaN(c))return"";c in
m||(c=b.pluralCat(c-h));return p[c](e,g,!0)},function(b){g.text(b)})}}}],je=["$parse","$animate",function(b,c){var d=M("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,compile:function(e,g,k){return function(e,g,h){var m=h.ngRepeat,p=m.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),n,s,r,v,u,w,x,B={$id:za};if(!p)throw d("iexp",m);h=p[1];u=p[2];(p=p[4])?(n=b(p),s=function(b,c,d){x&&(B[x]=b);B[w]=c;B.$index=d;return n(e,B)}):(r=function(b,c){return za(c)},v=function(b){return b});
p=h.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!p)throw d("iidexp",h);w=p[3]||p[1];x=p[2];var t={};e.$watchCollection(u,function(b){var h,n,p=g[0],u,B={},z,D,A,I,K,E,F=[];if(kb(b))K=b,s=s||r;else{s=s||v;K=[];for(A in b)b.hasOwnProperty(A)&&"$"!=A.charAt(0)&&K.push(A);K.sort()}z=K.length;n=F.length=K.length;for(h=0;h<n;h++)if(A=b===K?h:K[h],I=b[A],u=s(A,I,h),t.hasOwnProperty(u))E=t[u],delete t[u],B[u]=E,F[h]=E;else{if(B.hasOwnProperty(u))throw q(F,function(b){b&&b.startNode&&(t[b.id]=
b)}),d("dupes",m,u);F[h]={id:u};B[u]=!1}for(A in t)t.hasOwnProperty(A)&&(E=t[A],c.leave(E.elements),q(E.elements,function(b){b.$$NG_REMOVED=!0}),E.scope.$destroy());h=0;for(n=K.length;h<n;h++){A=b===K?h:K[h];I=b[A];E=F[h];if(E.startNode){D=E.scope;u=p;do u=u.nextSibling;while(u&&u.$$NG_REMOVED);E.startNode!=u&&c.move(E.elements,null,C(p));p=E.endNode}else D=e.$new();D[w]=I;x&&(D[x]=A);D.$index=h;D.$first=0===h;D.$last=h===z-1;D.$middle=!(D.$first||D.$last);D.$odd=!(D.$even=0==h%2);E.startNode||k(D,
function(b){c.enter(b,null,C(p));p=b;E.scope=D;E.startNode=b[0];E.elements=b;E.endNode=b[b.length-1];B[E.id]=E})}t=B})}}}}],ke=["$animate",function(b){return function(c,d,e){c.$watch(e.ngShow,function(c){b[Ga(c)?"removeClass":"addClass"](d,"ng-hide")})}}],le=["$animate",function(b){return function(c,d,e){c.$watch(e.ngHide,function(c){b[Ga(c)?"addClass":"removeClass"](d,"ng-hide")})}}],me=ra(function(b,c,d){b.$watch(d.ngStyle,function(b,d){d&&b!==d&&q(d,function(b,d){c.css(d,"")});b&&c.css(b)},!0)}),
ne=["$animate",function(b){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,g){var k,f,l=[];c.$watch(e.ngSwitch||e.on,function(d){for(var m=0,p=l.length;m<p;m++)l[m].$destroy(),b.leave(f[m]);f=[];l=[];if(k=g.cases["!"+d]||g.cases["?"])c.$eval(e.change),q(k,function(d){var e=c.$new();l.push(e);d.transclude(e,function(c){var e=d.element;f.push(c);b.enter(c,e.parent(),e)})})})}}}],oe=ra({transclude:"element",priority:500,require:"^ngSwitch",
compile:function(b,c,d){return function(b,g,k,f){f.cases["!"+c.ngSwitchWhen]=f.cases["!"+c.ngSwitchWhen]||[];f.cases["!"+c.ngSwitchWhen].push({transclude:d,element:g})}}}),pe=ra({transclude:"element",priority:500,require:"^ngSwitch",compile:function(b,c,d){return function(b,c,k,f){f.cases["?"]=f.cases["?"]||[];f.cases["?"].push({transclude:d,element:c})}}}),qe=ra({controller:["$transclude","$element","$scope",function(b,c,d){d.$evalAsync(function(){b(function(b){c.append(b)})})}]}),re=["$templateCache",
function(b){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&b.put(d.id,c[0].text)}}}],se=W({terminal:!0}),te=["$compile","$parse",function(b,c){var d=/^\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+(.*?))?$/,e={$setViewValue:w};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(b,c,d){var l=this,
h={},m=e,p;l.databound=d.ngModel;l.init=function(b,c,d){m=b;p=d};l.addOption=function(c){h[c]=!0;m.$viewValue==c&&(b.val(c),p.parent()&&p.remove())};l.removeOption=function(b){this.hasOption(b)&&(delete h[b],m.$viewValue==b&&this.renderUnknownOption(b))};l.renderUnknownOption=function(c){c="? "+za(c)+" ?";p.val(c);b.prepend(p);b.val(c);p.prop("selected",!0)};l.hasOption=function(b){return h.hasOwnProperty(b)};c.$on("$destroy",function(){l.renderUnknownOption=w})}],link:function(e,k,f,l){function h(b,
c,d,e){d.$render=function(){var b=d.$viewValue;e.hasOption(b)?(t.parent()&&t.remove(),c.val(b),""===b&&z.prop("selected",!0)):J(b)&&z?c.val(""):e.renderUnknownOption(b)};c.on("change",function(){b.$apply(function(){t.parent()&&t.remove();d.$setViewValue(c.val())})})}function m(b,c,d){var e;d.$render=function(){var b=new Ma(d.$viewValue);q(c.find("option"),function(c){c.selected=A(b.get(c.value))})};b.$watch(function(){xa(e,d.$viewValue)||(e=aa(d.$viewValue),d.$render())});c.on("change",function(){b.$apply(function(){var b=
[];q(c.find("option"),function(c){c.selected&&b.push(c.value)});d.$setViewValue(b)})})}function p(e,f,g){function k(){var b={"":[]},c=[""],d,h,w,z,y;w=g.$modelValue;z=t(e)||[];var C=n?Fb(z):z,F,D,G;D={};y=!1;var H,J;if(r)if(s&&I(w))for(y=new Ma([]),h=0;h<w.length;h++)D[m]=w[h],y.put(s(e,D),w[h]);else y=new Ma(w);for(G=0;F=C.length,G<F;G++)D[m]=z[n?D[n]=C[G]:G],d=p(e,D)||"",(h=b[d])||(h=b[d]=[],c.push(d)),r?d=y.remove(s?s(e,D):q(e,D))!=v:(s?(d={},d[m]=w,d=s(e,d)===s(e,D)):d=w===q(e,D),y=y||d),H=l(e,
D),H=H===v?"":H,h.push({id:s?s(e,D):n?C[G]:G,label:H,selected:d});r||(u||null===w?b[""].unshift({id:"",label:"",selected:!y}):y||b[""].unshift({id:"?",label:"",selected:!0}));D=0;for(C=c.length;D<C;D++){d=c[D];h=b[d];A.length<=D?(w={element:B.clone().attr("label",d),label:h.label},z=[w],A.push(z),f.append(w.element)):(z=A[D],w=z[0],w.label!=d&&w.element.attr("label",w.label=d));H=null;G=0;for(F=h.length;G<F;G++)d=h[G],(y=z[G+1])?(H=y.element,y.label!==d.label&&H.text(y.label=d.label),y.id!==d.id&&
H.val(y.id=d.id),H[0].selected!==d.selected&&H.prop("selected",y.selected=d.selected)):(""===d.id&&u?J=u:(J=x.clone()).val(d.id).attr("selected",d.selected).text(d.label),z.push({element:J,label:d.label,id:d.id,selected:d.selected}),H?H.after(J):w.element.append(J),H=J);for(G++;z.length>G;)z.pop().element.remove()}for(;A.length>D;)A.pop()[0].element.remove()}var h;if(!(h=w.match(d)))throw M("ngOptions")("iexp",w,ga(f));var l=c(h[2]||h[1]),m=h[4]||h[6],n=h[5],p=c(h[3]||""),q=c(h[2]?h[1]:m),t=c(h[7]),
s=h[8]?c(h[8]):null,A=[[{element:f,label:""}]];u&&(b(u)(e),u.removeClass("ng-scope"),u.remove());f.html("");f.on("change",function(){e.$apply(function(){var b,c=t(e)||[],d={},h,k,l,p,u,w;if(r)for(k=[],p=0,w=A.length;p<w;p++)for(b=A[p],l=1,u=b.length;l<u;l++){if((h=b[l].element)[0].selected){h=h.val();n&&(d[n]=h);if(s)for(var x=0;x<c.length&&(d[m]=c[x],s(e,d)!=h);x++);else d[m]=c[h];k.push(q(e,d))}}else if(h=f.val(),"?"==h)k=v;else if(""==h)k=null;else if(s)for(x=0;x<c.length;x++){if(d[m]=c[x],s(e,
d)==h){k=q(e,d);break}}else d[m]=c[h],n&&(d[n]=h),k=q(e,d);g.$setViewValue(k)})});g.$render=k;e.$watch(k)}if(l[1]){var n=l[0],s=l[1],r=f.multiple,w=f.ngOptions,u=!1,z,x=C(N.createElement("option")),B=C(N.createElement("optgroup")),t=x.clone();l=0;for(var F=k.children(),G=F.length;l<G;l++)if(""==F[l].value){z=u=F.eq(l);break}n.init(s,u,t);if(r&&(f.required||f.ngRequired)){var H=function(b){s.$setValidity("required",!f.required||b&&b.length);return b};s.$parsers.push(H);s.$formatters.unshift(H);f.$observe("required",
function(){H(s.$viewValue)})}w?p(e,k,s):r?m(e,k,s):h(e,k,s,n)}}}}],ue=["$interpolate",function(b){var c={addOption:w,removeOption:w};return{restrict:"E",priority:100,compile:function(d,e){if(J(e.value)){var g=b(d.text(),!0);g||e.$set("value",d.text())}return function(b,d,e){var h=d.parent(),m=h.data("$selectController")||h.parent().data("$selectController");m&&m.databound?d.prop("selected",!1):m=c;g?b.$watch(g,function(b,c){e.$set("value",b);b!==c&&m.removeOption(c);m.addOption(b)}):m.addOption(e.value);
d.on("$destroy",function(){m.removeOption(e.value)})}}}}],ve=W({restrict:"E",terminal:!0});(ya=T.jQuery)?(C=ya,F(ya.fn,{scope:Pa.scope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),sb("remove",!0,!0,!1),sb("empty",!1,!1,!1),sb("html",!1,!1,!0)):C=O;Ha.element=C;(function(b){F(b,{bootstrap:Mb,copy:aa,extend:F,equals:xa,element:C,forEach:q,injector:Nb,noop:w,bind:nb,toJson:ma,fromJson:Ib,identity:wa,isUndefined:J,isDefined:A,isString:z,isFunction:H,isObject:Q,isNumber:lb,
isElement:Dc,isArray:I,$$minErr:M,version:Hd,isDate:Ea,lowercase:G,uppercase:Ba,callbacks:{counter:0}});Oa=Jc(T);try{Oa("ngLocale")}catch(c){Oa("ngLocale",[]).provider("$locale",hd)}Oa("ng",["ngLocale"],["$provide",function(b){b.provider("$compile",Xb).directive({a:Kd,input:yc,textarea:yc,form:Ld,script:re,select:te,style:ve,option:ue,ngBind:Wd,ngBindHtml:Yd,ngBindTemplate:Xd,ngClass:Zd,ngClassEven:ae,ngClassOdd:$d,ngCsp:de,ngCloak:be,ngController:ce,ngForm:Md,ngHide:le,ngIf:ee,ngInclude:fe,ngInit:ge,
ngNonBindable:he,ngPluralize:ie,ngRepeat:je,ngShow:ke,ngStyle:me,ngSwitch:ne,ngSwitchWhen:oe,ngSwitchDefault:pe,ngOptions:se,ngTransclude:qe,ngModel:Rd,ngList:Td,ngChange:Sd,required:zc,ngRequired:zc,ngValue:Vd}).directive(Eb).directive(Ac);b.provider({$anchorScroll:Sc,$animate:Jd,$browser:Vc,$cacheFactory:Wc,$controller:$c,$document:ad,$exceptionHandler:bd,$filter:nc,$interpolate:gd,$http:cd,$httpBackend:dd,$location:jd,$log:kd,$parse:od,$rootScope:rd,$q:pd,$sce:td,$sceDelegate:sd,$sniffer:ud,$templateCache:Xc,
$timeout:vd,$window:xd,$$urlUtils:wd})}])})(Ha);C(N).ready(function(){Hc(N,Mb)})})(window,document);angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}</style>');
/*
//@ sourceMappingURL=angular.min.js.map
*/

File diff suppressed because one or more lines are too long

View file

@ -8,7 +8,7 @@
Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_COOKIE} ng-offline=1.2.0rc1
RewriteCond %{HTTP_COOKIE} ng-offline=1.2.0-rc.2
RewriteRule appcache.manifest appcache-offline.manifest
## Redirect to the latest manifest

View file

@ -1,5 +1,5 @@
CACHE MANIFEST
# 2013-08-13T21:50:44.131Z
# 2013-09-04T12:51:17.228Z
# cache all of these
CACHE:

View file

@ -1,5 +1,5 @@
CACHE MANIFEST
# 2013-08-13T21:50:42.875Z
# 2013-09-04T12:51:15.973Z
# cache all of these
CACHE:

View file

@ -102,8 +102,13 @@ directive.prettyprint = ['reindentCode', function(reindentCode) {
//ensure that angular won't compile {{ curly }} values
html = html.replace(/\{\{/g, '<span>{{</span>')
.replace(/\}\}/g, '<span>}}</span>');
if (window.RUNNING_IN_NG_TEST_RUNNER) {
element.html(html);
}
else {
element.html(window.prettyPrintOne(reindentCode(html), undefined, true));
}
}
};
}];
@ -194,7 +199,6 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location',
deregisterEmbedRootScope;
modules.push(['$provide', function($provide) {
$provide.value('$animate', $animate);
$provide.value('$templateCache', $templateCache);
$provide.value('$anchorScroll', angular.noop);
$provide.value('$browser', $browser);

View file

@ -8,5 +8,6 @@
},
"_release": "e-tag:51ba48cd2",
"_source": "https://raw.github.com/twbs/bootstrap/v2.0.2/docs/assets/bootstrap.zip",
"_target": "*"
"_target": "*",
"_originalSource": "https://raw.github.com/twbs/bootstrap/v2.0.2/docs/assets/bootstrap.zip"
}

View file

@ -16,9 +16,9 @@
.nav-list li {
margin:0!important;
padding:0 15px;
height:20px;
padding:2px 15px;
overflow:hidden;
line-height:1.1em;
}
.slide-reveal.ng-enter {
@ -64,13 +64,6 @@
height:0;
}
.animate-container.animations-off * {
-webkit-transition: none;
-moz-transition: none;
-o-transition: color 0 ease-in; /* opera is special :) */
transition: none;
}
.foldout.ng-enter,
.foldout.ng-hide-add,
.foldout.ng-hide-remove {

View file

@ -502,5 +502,4 @@ pre ol li {
top: 10px;
font-size: 16px;
word-break: normal;
word-wrap: normal;
}

File diff suppressed because one or more lines are too long

View file

@ -6,8 +6,8 @@
var production = location.hostname === 'docs.angularjs.org',
headEl = document.head,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('script', {src: path('angular-scenario.js')}, function() {

File diff suppressed because it is too large Load diff

View file

@ -20,6 +20,11 @@
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
(function() {
if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
//TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
window.RUNNING_IN_NG_TEST_RUNNER = true;
}
var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
rUrl = /(#!\/|api|guide|misc|tutorial|cookbook|error|index[^\.]*\.html).*$/,
baseUrl = location.href.replace(rUrl, indexFile),
@ -29,8 +34,8 @@
headEl = document.getElementsByTagName('head')[0],
sync = true,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('base', {href: baseUrl});
@ -49,8 +54,10 @@
addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
}
addTag('script', {src: 'components/marked.js' }, sync);
addTag('script', {src: 'docs-data.js'}, sync);
addTag('script', {src: 'js/docs.js'}, sync);
@ -112,11 +119,13 @@
_gaq.push(['_setAccount', 'UA-8594346-3']);
_gaq.push(['_setDomainName', '.angularjs.org']);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}
</script>
</head>
@ -241,9 +250,9 @@
<div class="span3">
<div class="well">
<div ng-controller="DocsVersionsCtrl">
<select ng-options="v.version as v.title group by v.group for v in versions"
ng-model="version"
ng-change="jumpToDocsVersion(version)"
<select ng-options="v as v.title group by v.group for v in docs_versions"
ng-model="docs_version"
ng-change="jumpToDocsVersion(docs_version)"
class="docs-version-jump">
</select>
</div>

View file

@ -20,6 +20,11 @@
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
(function() {
if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
//TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
window.RUNNING_IN_NG_TEST_RUNNER = true;
}
var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
rUrl = /(#!\/|api|guide|misc|tutorial|cookbook|error|index[^\.]*\.html).*$/,
baseUrl = location.href.replace(rUrl, indexFile),
@ -29,8 +34,8 @@
headEl = document.getElementsByTagName('head')[0],
sync = true,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('base', {href: baseUrl});
@ -49,8 +54,10 @@
addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
}
addTag('script', {src: 'components/marked.js' }, sync);
addTag('script', {src: 'docs-data.js'}, sync);
addTag('script', {src: 'js/docs.js'}, sync);
@ -112,11 +119,13 @@
_gaq.push(['_setAccount', 'UA-8594346-3']);
_gaq.push(['_setDomainName', '.angularjs.org']);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}
</script>
</head>
@ -241,9 +250,9 @@
<div class="span3">
<div class="well">
<div ng-controller="DocsVersionsCtrl">
<select ng-options="v.version as v.title group by v.group for v in versions"
ng-model="version"
ng-change="jumpToDocsVersion(version)"
<select ng-options="v as v.title group by v.group for v in docs_versions"
ng-model="docs_version"
ng-change="jumpToDocsVersion(docs_version)"
class="docs-version-jump">
</select>
</div>

View file

@ -20,6 +20,11 @@
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
(function() {
if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
//TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
window.RUNNING_IN_NG_TEST_RUNNER = true;
}
var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
rUrl = /(#!\/|api|guide|misc|tutorial|cookbook|error|index[^\.]*\.html).*$/,
baseUrl = location.href.replace(rUrl, indexFile),
@ -29,8 +34,8 @@
headEl = document.getElementsByTagName('head')[0],
sync = true,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('base', {href: baseUrl});
@ -49,8 +54,10 @@
addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
}
addTag('script', {src: 'components/marked.js' }, sync);
addTag('script', {src: 'docs-data.js'}, sync);
addTag('script', {src: 'js/docs.js'}, sync);
@ -112,11 +119,13 @@
_gaq.push(['_setAccount', 'UA-8594346-3']);
_gaq.push(['_setDomainName', '.angularjs.org']);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}
</script>
</head>
@ -241,9 +250,9 @@
<div class="span3">
<div class="well">
<div ng-controller="DocsVersionsCtrl">
<select ng-options="v.version as v.title group by v.group for v in versions"
ng-model="version"
ng-change="jumpToDocsVersion(version)"
<select ng-options="v as v.title group by v.group for v in docs_versions"
ng-model="docs_version"
ng-change="jumpToDocsVersion(docs_version)"
class="docs-version-jump">
</select>
</div>

View file

@ -20,6 +20,11 @@
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
(function() {
if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
//TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
window.RUNNING_IN_NG_TEST_RUNNER = true;
}
var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
rUrl = /(#!\/|api|guide|misc|tutorial|cookbook|error|index[^\.]*\.html).*$/,
baseUrl = location.href.replace(rUrl, indexFile),
@ -29,8 +34,8 @@
headEl = document.getElementsByTagName('head')[0],
sync = true,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('base', {href: baseUrl});
@ -49,8 +54,10 @@
addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
}
addTag('script', {src: 'components/marked.js' }, sync);
addTag('script', {src: 'docs-data.js'}, sync);
addTag('script', {src: 'js/docs.js'}, sync);
@ -112,11 +119,13 @@
_gaq.push(['_setAccount', 'UA-8594346-3']);
_gaq.push(['_setDomainName', '.angularjs.org']);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}
</script>
</head>
@ -241,9 +250,9 @@
<div class="span3">
<div class="well">
<div ng-controller="DocsVersionsCtrl">
<select ng-options="v.version as v.title group by v.group for v in versions"
ng-model="version"
ng-change="jumpToDocsVersion(version)"
<select ng-options="v as v.title group by v.group for v in docs_versions"
ng-model="docs_version"
ng-change="jumpToDocsVersion(docs_version)"
class="docs-version-jump">
</select>
</div>

View file

@ -20,6 +20,11 @@
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
(function() {
if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
//TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
window.RUNNING_IN_NG_TEST_RUNNER = true;
}
var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
rUrl = /(#!\/|api|guide|misc|tutorial|cookbook|error|index[^\.]*\.html).*$/,
baseUrl = location.href.replace(rUrl, indexFile),
@ -29,8 +34,8 @@
headEl = document.getElementsByTagName('head')[0],
sync = true,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('base', {href: baseUrl});
@ -49,8 +54,10 @@
addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
}
addTag('script', {src: 'components/marked.js' }, sync);
addTag('script', {src: 'docs-data.js'}, sync);
addTag('script', {src: 'js/docs.js'}, sync);
@ -112,11 +119,13 @@
_gaq.push(['_setAccount', 'UA-8594346-3']);
_gaq.push(['_setDomainName', '.angularjs.org']);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}
</script>
</head>
@ -241,9 +250,9 @@
<div class="span3">
<div class="well">
<div ng-controller="DocsVersionsCtrl">
<select ng-options="v.version as v.title group by v.group for v in versions"
ng-model="version"
ng-change="jumpToDocsVersion(version)"
<select ng-options="v as v.title group by v.group for v in docs_versions"
ng-model="docs_version"
ng-change="jumpToDocsVersion(docs_version)"
class="docs-version-jump">
</select>
</div>

View file

@ -20,6 +20,11 @@
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
(function() {
if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
//TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
window.RUNNING_IN_NG_TEST_RUNNER = true;
}
var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
rUrl = /(#!\/|api|guide|misc|tutorial|cookbook|error|index[^\.]*\.html).*$/,
baseUrl = location.href.replace(rUrl, indexFile),
@ -29,8 +34,8 @@
headEl = document.getElementsByTagName('head')[0],
sync = true,
angularVersion = {
current: '1.2.0rc1', // rewrite during build
cdn: '1.1.4'
current: '1.2.0-rc.2', // rewrite during build
cdn: '1.2.0rc1'
};
addTag('base', {href: baseUrl});
@ -49,8 +54,10 @@
addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
}
addTag('script', {src: 'components/marked.js' }, sync);
addTag('script', {src: 'docs-data.js'}, sync);
addTag('script', {src: 'js/docs.js'}, sync);
@ -112,11 +119,13 @@
_gaq.push(['_setAccount', 'UA-8594346-3']);
_gaq.push(['_setDomainName', '.angularjs.org']);
if (!window.RUNNING_IN_NG_TEST_RUNNER) {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}
</script>
</head>
@ -241,9 +250,9 @@
<div class="span3">
<div class="well">
<div ng-controller="DocsVersionsCtrl">
<select ng-options="v.version as v.title group by v.group for v in versions"
ng-model="version"
ng-change="jumpToDocsVersion(version)"
<select ng-options="v as v.title group by v.group for v in docs_versions"
ng-model="docs_version"
ng-change="jumpToDocsVersion(docs_version)"
class="docs-version-jump">
</select>
</div>

View file

@ -4,61 +4,11 @@ var docsApp = {
serviceFactory: {}
};
docsApp.controller.DocsVersionsCtrl = ['$scope', '$window', 'NG_VERSIONS', function($scope, $window, NG_VERSIONS) {
$scope.versions = expandVersions(NG_VERSIONS);
$scope.version = ($scope.version || angular.version.full).match(/^([\d\.]+\d+)/)[1]; //match only the number
$scope.jumpToDocsVersion = function(value) {
var isLastStable,
version,
versions = $scope.versions;
for(var i=versions.length-1;i>=0;i--) {
var v = versions[i];
if(v.version == value) {
var next = versions[i - 1];
isLastStable = v.stable && (!next || next && !next.stable);
version = v;
break;
}
};
if(version && version.version >= '1.0.0') {
//the older versions have a different path to the docs within their repo directory
var docsPath = version.version < '1.0.2' ? 'docs-' + version.version : 'docs';
//the last stable version should redirect to docs.angularjs.org instead of code.angularjs.org
var url = 'http://' +
(isLastStable ?
'docs.angularjs.org' :
'code.angularjs.org/' + version.version + '/' + docsPath);
$window.location = url;
}
};
function expandVersions(angularVersions) {
var unstableVersionStart = 0;
angularVersions.forEach(function(version) {
var split = version.split('.');
unstableVersionStart = split[1] % 2 == 1 ?
Math.max(unstableVersionStart, parseInt(split[0] + '' + split[1])) :
unstableVersionStart;
});
var versions = [];
for(var i=angularVersions.length-1;i>=0;i--) {
var version = angularVersions[i];
var split = version.split('.');
var stable = parseInt(split[0] + '' + split[1]) < unstableVersionStart;
versions.push({
version : version,
stable : stable,
title : 'AngularJS - v' + version,
group : (stable ? 'Stable' : 'Unstable')
});
};
return versions;
docsApp.controller.DocsVersionsCtrl = ['$scope', '$window', 'NG_VERSIONS', 'NG_VERSION', function($scope, $window, NG_VERSIONS, NG_VERSION) {
$scope.docs_versions = NG_VERSIONS;
$scope.docs_version = NG_VERSIONS[0];
$scope.jumpToDocsVersion = function(version) {
$window.location = version.url;
};
}];
@ -109,6 +59,8 @@ docsApp.controller.DocsNavigationCtrl = ['$scope', '$location', 'docsSearch', fu
docsApp.serviceFactory.lunrSearch = function() {
return function(properties) {
if (window.RUNNING_IN_NG_TEST_RUNNER) return null;
var engine = lunr(properties);
return {
store : function(values) {
@ -123,6 +75,9 @@ docsApp.serviceFactory.lunrSearch = function() {
docsApp.serviceFactory.docsSearch = ['$rootScope','lunrSearch', 'NG_PAGES',
function($rootScope, lunrSearch, NG_PAGES) {
if (window.RUNNING_IN_NG_TEST_RUNNER) {
return null;
}
var index = lunrSearch(function() {
this.ref('id');

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/auto/injector.js#L76" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/auto/injector.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$injector</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/auto/injector.js#L78" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/auto/injector.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$injector</code>
<div><span class="hint">service in module <code ng:non-bindable="">AUTO</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/auto/injector.js#L263" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/auto/injector.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$provide</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/auto/injector.js#L265" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/auto/injector.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$provide</code>
<div><span class="hint">service in module <code ng:non-bindable="">AUTO</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L734" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.bind</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L744" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.bind</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L1034" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.bootstrap</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L1044" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.bootstrap</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L580" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.copy</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L590" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.copy</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L657" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.equals</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L667" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.equals</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L223" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.extend</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L233" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.extend</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L98" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.forEach</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L108" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.forEach</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L806" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.fromJson</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L816" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.fromJson</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L278" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.identity</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L288" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.identity</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L386" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isArray</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L396" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isArray</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L370" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isDate</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L380" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isDate</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L313" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isDefined</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L323" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isDefined</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L470" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isElement</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L480" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isElement</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L402" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isFunction</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L412" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isFunction</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L356" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isNumber</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L366" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isNumber</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L327" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isObject</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L337" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isObject</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L342" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isString</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L352" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isString</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L299" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isUndefined</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L309" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.isUndefined</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngMock/angular-mocks.js#L1874" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngMock/angular-mocks.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.mock.inject</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngMock/angular-mocks.js#L1884" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngMock/angular-mocks.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.mock.inject</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -11,8 +11,10 @@ which will be used when the injector is created by <a href="api/angular.mock.inj
</div></div>
<h2 id="Usage">Usage</h2>
<div class="usage"><pre class="prettyprint linenums">angular.mock.module(fns);</pre>
<h4 id="parameters">Parameters</h4><table class="variables-matrix table table-bordered table-striped"><thead><tr><th>Param</th><th>Type</th><th>Details</th></tr></thead><tbody><tr><td>fns</td><td><a href="" class="label type-hint type-hint-object">...(string</a><a href="" class="label type-hint type-hint-function">Function</a></td><td><div class="angular-mock-module-page"><p>any number of modules which are represented as string
<h4 id="parameters">Parameters</h4><table class="variables-matrix table table-bordered table-striped"><thead><tr><th>Param</th><th>Type</th><th>Details</th></tr></thead><tbody><tr><td>fns</td><td><a href="" class="label type-hint type-hint-object">...(string</a><a href="" class="label type-hint type-hint-function">Function</a><a href="" class="label type-hint type-hint-object">Object</a></td><td><div class="angular-mock-module-page"><p>any number of modules which are represented as string
aliases or as anonymous module initialization functions. The modules are used to
configure the injector. The &#39;ng&#39; and &#39;ngMock&#39; modules are automatically loaded.</p>
configure the injector. The &#39;ng&#39; and &#39;ngMock&#39; modules are automatically loaded. If an
object literal is passed they will be register as values in the module, the key being
the module name and the value being what is returned.</p>
</div></td></tr></tbody></table></div>
</div>

View file

@ -4,9 +4,11 @@
</div>
</h1>
<div><h2 id="Description">Description</h2>
<div class="description"><div class="angular-module-page"><p>The <code>angular.module</code> is a global place for creating and registering Angular modules. All
modules (angular core or 3rd party) that should be available to an application must be
<div class="description"><div class="angular-module-page"><p>The <code>angular.module</code> is a global place for creating, registering and retrieving Angular modules.
All modules (angular core or 3rd party) that should be available to an application must be
registered using this mechanism.</p>
<p>When passed two or more arguments, a new module is created. If passed only one argument, an
existing module (the name passed as the first argument to <code>module</code>) is retrieved.</p>
<h3>Module</h3>
<p>A module is a collection of services, directives, filters, and configuration information.
<code>angular.module</code> is used to configure the <a href="api/AUTO.$injector"><code>$injector</code></a>.</p>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L259" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.noop</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L269" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.noop</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L787" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.toJson</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L797" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">angular.toJson</code>
<div><span class="hint">API in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -200,6 +200,7 @@ takes a <a href="api/ng.$q"><code>promise</code></a> and returns the original or
return function(promise) {
return promise.then(function(response) {
// do something on success
return response;
}, function(response) {
// do something on error
if (canRecover(response)) {

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/interpolate.js#L79" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/interpolate.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$interpolate</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/interpolate.js#L88" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/interpolate.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$interpolate</code>
<div><span class="hint">service in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -23,29 +23,41 @@
</div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-interpolateprovider-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-130" source-edit-css="" source-edit-js="script.js-129" source-edit-json="" source-edit-unit="" source-edit-scenario=""></div>
<div source-edit="customInterpolationApp" source-edit-deps="angular.js script.js" source-edit-html="index.html-130" source-edit-css="" source-edit-js="script.js-129" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-131"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-130" ng-html-wrap=" angular.js script.js"></pre>
<pre class="prettyprint linenums" ng-set-text="index.html-130" ng-html-wrap="customInterpolationApp angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-130">
<div ng-app="App" ng-controller="Controller">
//label//
<div ng-app="App" ng-controller="DemoController as demo">
//demo.label//
</div>
</script>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-129"></pre>
<script type="text/ng-template" id="script.js-129">
var myApp = angular.module('App', [], function($interpolateProvider) {
var customInterpolationApp = angular.module('customInterpolationApp', []);
customInterpolationApp.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('//');
$interpolateProvider.endSymbol('//');
});
function Controller($scope) {
$scope.label = "Interpolation Provider Sample";
}
customInterpolationApp.controller('DemoController', function DemoController() {
this.label = "This bindings is brought you you by // interpolation symbols.";
});
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-131"></pre>
<script type="text/ng-template" id="scenario.js-131">
it('should interpolate binding with custom symbols', function() {
expect(binding('demo.label')).toBe('This bindings is brought you you by // interpolation symbols.');
});
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-130" ng-eval-javascript="script.js-129"></div>
<div class="well doc-example-live animate-container" ng-embed-app="customInterpolationApp" ng-set-html="index.html-130" ng-eval-javascript="script.js-129"></div>
</div></div>
</div>

View file

@ -37,10 +37,10 @@ into the browser&#39;s console (if present).</p>
</div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-log-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-132" source-edit-css="" source-edit-js="script.js-131" source-edit-json="" source-edit-unit="" source-edit-scenario=""></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-133" source-edit-css="" source-edit-js="script.js-132" source-edit-json="" source-edit-unit="" source-edit-scenario=""></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-132" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-132">
<pre class="prettyprint linenums" ng-set-text="index.html-133" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-133">
<div ng-controller="LogCtrl">
<p>Reload this page with open console, enter text and hit the log button...</p>
Message:
@ -53,8 +53,8 @@ into the browser&#39;s console (if present).</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-131"></pre>
<script type="text/ng-template" id="script.js-131">
<pre class="prettyprint linenums" ng-set-text="script.js-132"></pre>
<script type="text/ng-template" id="script.js-132">
function LogCtrl($scope, $log) {
$scope.$log = $log;
$scope.message = 'Hello World!';
@ -62,6 +62,6 @@ into the browser&#39;s console (if present).</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-132" ng-eval-javascript="script.js-131"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-133" ng-eval-javascript="script.js-132"></div>
</div></div>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/parse.js#L916" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/parse.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$parse</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/parse.js#L927" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/parse.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$parse</code>
<div><span class="hint">service in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -21,6 +21,8 @@ asynchronous programming what <code>try</code>, <code>catch</code> and <code>thr
// since this fn executes async in a future turn of the event loop, we need to wrap
// our code into an $apply call so that the model changes are properly observed.
scope.$apply(function() {
deferred.notify('About to greet ' + name + '.');
if (okToGreet(name)) {
deferred.resolve('Hello, ' + name + '!');
} else {
@ -37,6 +39,8 @@ asynchronous programming what <code>try</code>, <code>catch</code> and <code>thr
alert('Success: ' + greeting);
}, function(reason) {
alert('Failed: ' + reason);
}, function(update) {
alert('Got notification: ' + update);
});
</pre>
<p>At first it might not be obvious why this extra complexity is worth the trouble. The payoff
@ -49,13 +53,16 @@ section on serial or parallel joining of promises.</p>
<h3>The Deferred API</h1>
<p>A new instance of deferred is constructed by calling <code>$q.defer()</code>.</p>
<p>The purpose of the deferred object is to expose the associated Promise instance as well as APIs
that can be used for signaling the successful or unsuccessful completion of the task.</p>
that can be used for signaling the successful or unsuccessful completion, as well as the status
of the task.</p>
<p><strong>Methods</strong></p>
<ul>
<li><code>resolve(value)</code> resolves the derived promise with the <code>value</code>. If the value is a rejection
constructed via <code>$q.reject</code>, the promise will be rejected instead.</li>
<li><code>reject(reason)</code> rejects the derived promise with the <code>reason</code>. This is equivalent to
resolving it with a rejection constructed via <code>$q.reject</code>.</li>
<li><code>notify(value)</code> - provides updates on the status of the promises execution. This may be called
multiple times before the promise is either resolved or rejected.</li>
</ul>
<p><strong>Properties</strong></p>
<ul>
@ -68,11 +75,14 @@ calling <code>deferred.promise</code>.</p>
of the deferred task when it completes.</p>
<p><strong>Methods</strong></p>
<ul>
<li><p><code>then(successCallback, errorCallback)</code> regardless of when the promise was or will be resolved
or rejected, <code>then</code> 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.</p>
<li><p><code>then(successCallback, errorCallback, notifyCallback)</code> regardless of when the promise was or
will be resolved or rejected, <code>then</code> 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. Additionally, the notify callback may be called zero or more times to
provide a progress indication, before the promise is resolved or rejected.</p>
<p>This method <em>returns a new promise</em> which is resolved or rejected via the return value of the
<code>successCallback</code> or <code>errorCallback</code>.</p>
<code>successCallback</code>, <code>errorCallback</code>. It also notifies via the return value of the <code>notifyCallback</code>
method. The promise can not be resolved or rejected from the notifyCallback method.</p>
</li>
<li><p><code>catch(errorCallback)</code> shorthand for <code>promise.then(null, errorCallback)</code></p>
</li>

View file

@ -196,12 +196,14 @@ expression are propagated (uncaught). This is useful when evaluating Angular exp
<div class="$evalasync"><div class="ng-rootscope-scope-evalasync-page"><p>Executes the expression on the current scope at a later point in time.</p>
<p>The <code>$evalAsync</code> makes no guarantees as to when the <code>expression</code> will be executed, only that:</p>
<ul>
<li>it will execute in the current script execution context (before any DOM rendering).</li>
<li>at least one <a href="api/ng.$rootScope.Scope#$digest"><code>$digest cycle</code></a> will be performed after
<code>expression</code> execution.</li>
<li>it will execute after the function that schedule the evaluation is done running (preferably before DOM rendering).</li>
<li>at least one <a href="api/ng.$rootScope.Scope#$digest"><code>$digest cycle</code></a> will be performed after <code>expression</code> execution.</li>
</ul>
<p>Any exceptions from the execution of the expression are forwarded to the
<a href="api/ng.$exceptionHandler"><code>$exceptionHandler</code></a> service.</p>
<p><strong>Note:</strong> if this function is called outside of <code>$digest</code> cycle, a new $digest cycle will be scheduled.
It is however encouraged to always call code that changes the model from withing an <code>$apply</code> call.
That includes code evaluated via <code>$evalAsync</code>.</p>
</div><h5 id="parameters">Parameters</h5><table class="variables-matrix table table-bordered table-striped"><thead><tr><th>Param</th><th>Type</th><th>Details</th></tr></thead><tbody><tr><td>expression <div><em>(optional)</em></div></td><td><a href="" class="label type-hint type-hint-string">string</a><a href="" class="label type-hint type-hint-function">function()</a></td><td><div class="ng-rootscope-scope-evalasync-page"><p>An angular expression to be executed.</p>
<ul>
<li><code>string</code>: execute using the rules as defined in <a href="guide/expression">expression</a>.</li>

View file

@ -47,7 +47,7 @@ accepted by SCE / privileged contexts.</p>
<h4>How does it work?</h2>
<p>In privileged contexts, directives and code will bind to the result of <a href="../../../../../index.htmle#getTrusted"><code>$sce.getTrusted(context, value)</code></a> rather than to the value directly. Directives use <a href="../../../../../index.htmle#parse"><code>$sce.parseAs</code></a> rather than <code>$parse</code> to watch attribute bindings, which performs the
<a href="../../../../../index.htmle#getTrusted"><code>$sce.getTrusted</code></a> behind the scenes on non-constant literals.</p>
<p>As an example, <a href="../../../../../index.htmlective:ngBindHtml"><code>ngBindHtml</code></a> uses <a href="../../../../../index.htmle#parseHtml"><code>$sce.parseAsHtml(binding expression)</code></a>. Here&#39;s the actual code (slightly
<p>As an example, <a href="../../../../../index.htmlective:ngBindHtml"><code>ngBindHtml</code></a> uses <a href="../../../../../index.htmle#parseAsHtml"><code>$sce.parseAsHtml(binding expression)</code></a>. Here&#39;s the actual code (slightly
simplified):</p>
<pre class="prettyprint" class="prettyprint linenums">
var ngBindHtmlDirective = ['$sce', function($sce) {
@ -86,13 +86,36 @@ served document. You can change these by setting your own custom <a href="../..
application that&#39;s secure and can be audited to verify that with much more ease than bolting
security onto an application later.</p>
<h2>What trusted context types are supported?<a name="contexts"></a></h2>
<p>| Context | Notes |
|=====================|================|
| <code>$sce.HTML</code> | For HTML that&#39;s safe to source into the application. The <a href="../../../../../index.htmlective:ngBindHtml"><code>ngBindHtml</code></a> directive uses this context for bindings. |
| <code>$sce.CSS</code> | For CSS that&#39;s safe to source into the application. Currently unused. Feel free to use it in your own directives. |
| <code>$sce.URL</code> | For URLs that are safe to follow as links. Currently unused (<code>&lt;a href=</code> and <code>&lt;img src=</code> sanitize their urls and don&#39;t consititute an SCE context. |
| <code>$sce.RESOURCE_URL</code> | For URLs that are not only safe to follow as links, but whose contens are also safe to include in your application. Examples include <code>ng-include</code>, <code>src</code> / <code>ngSrc</code> bindings for tags other than <code>IMG</code> (e.g. <code>IFRAME</code>, <code>OBJECT</code>, etc.) <br><br>Note that <code>$sce.RESOURCE_URL</code> makes a stronger statement about the URL than <code>$sce.URL</code> does and therefore contexts requiring values trusted for <code>$sce.RESOURCE_URL</code> can be used anywhere that values trusted for <code>$sce.URL</code> are required. |
| <code>$sce.JS</code> | For JavaScript that is safe to execute in your application&#39;s context. Currently unused. Feel free to use it in your own directives. |</p>
<table>
<thead>
<tr>
<th>Context</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>$sce.HTML</code></td>
<td>For HTML that&#39;s safe to source into the application. The <a href="../../../../../index.htmlective:ngBindHtml"><code>ngBindHtml</code></a> directive uses this context for bindings.</td>
</tr>
<tr>
<td><code>$sce.CSS</code></td>
<td>For CSS that&#39;s safe to source into the application. Currently unused. Feel free to use it in your own directives.</td>
</tr>
<tr>
<td><code>$sce.URL</code></td>
<td>For URLs that are safe to follow as links. Currently unused (<code>&lt;a href=</code> and <code>&lt;img src=</code> sanitize their urls and don&#39;t consititute an SCE context.</td>
</tr>
<tr>
<td><code>$sce.RESOURCE_URL</code></td>
<td>For URLs that are not only safe to follow as links, but whose contens are also safe to include in your application. Examples include <code>ng-include</code>, <code>src</code> / <code>ngSrc</code> bindings for tags other than <code>IMG</code> (e.g. <code>IFRAME</code>, <code>OBJECT</code>, etc.) <br><br>Note that <code>$sce.RESOURCE_URL</code> makes a stronger statement about the URL than <code>$sce.URL</code> does and therefore contexts requiring values trusted for <code>$sce.RESOURCE_URL</code> can be used anywhere that values trusted for <code>$sce.URL</code> are required.</td>
</tr>
<tr>
<td><code>$sce.JS</code></td>
<td>For JavaScript that is safe to execute in your application&#39;s context. Currently unused. Feel free to use it in your own directives.</td>
</tr>
</tbody>
</table>
<h2>Show me an example.</h4>
</div></div>
<div class="member method"><h2 id="Methods">Methods</h2>
@ -266,10 +289,10 @@ have to do it at module config time on <a href="../../../../../index.htmleProvid
</div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-sce-page"><h4>Source</h2>
<div source-edit="mySceApp" source-edit-deps="angular.js script.js" source-edit-html="index.html-133" source-edit-css="" source-edit-js="script.js-134" source-edit-json="test_data.json" source-edit-unit="" source-edit-scenario="scenario.js-135"></div>
<div source-edit="mySceApp" source-edit-deps="angular.js script.js" source-edit-html="index.html-134" source-edit-css="" source-edit-js="script.js-135" source-edit-json="test_data.json" source-edit-unit="" source-edit-scenario="scenario.js-136"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-133" ng-html-wrap="mySceApp angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-133">
<pre class="prettyprint linenums" ng-set-text="index.html-134" ng-html-wrap="mySceApp angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-134">
<div ng-controller="myAppController as myCtrl">
<i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
<b>User comments</b><br>
@ -285,8 +308,8 @@ have to do it at module config time on <a href="../../../../../index.htmleProvid
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-134"></pre>
<script type="text/ng-template" id="script.js-134">
<pre class="prettyprint linenums" ng-set-text="script.js-135"></pre>
<script type="text/ng-template" id="script.js-135">
var mySceApp = angular.module('mySceApp', ['ngSanitize']);
mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) {
@ -314,8 +337,8 @@ have to do it at module config time on <a href="../../../../../index.htmleProvid
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-135"></pre>
<script type="text/ng-template" id="scenario.js-135">
<pre class="prettyprint linenums" ng-set-text="scenario.js-136"></pre>
<script type="text/ng-template" id="scenario.js-136">
describe('SCE doc demo', function() {
it('should sanitize untrusted values', function() {
expect(element('.htmlComment').html()).toBe('<span>Is <i>anyone</i> reading this?</span>');
@ -329,7 +352,7 @@ have to do it at module config time on <a href="../../../../../index.htmleProvid
</script>
</div>
</div><h2>Demo</h2>
<div class="well doc-example-live animate-container" ng-embed-app="mySceApp" ng-set-html="index.html-133" ng-eval-javascript="script.js-134"></div>
<div class="well doc-example-live animate-container" ng-embed-app="mySceApp" ng-set-html="index.html-134" ng-eval-javascript="script.js-135"></div>
<h2>Can I disable SCE completely?</h4>
<p>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

View file

@ -15,10 +15,10 @@ expression.</p>
</div></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-window-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-137" source-edit-css="" source-edit-js="script.js-136" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-138"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-138" source-edit-css="" source-edit-js="script.js-137" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-139"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-137" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-137">
<pre class="prettyprint linenums" ng-set-text="index.html-138" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-138">
<div ng-controller="Ctrl">
<input type="text" ng-model="greeting" />
@ -27,8 +27,8 @@ expression.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-136"></pre>
<script type="text/ng-template" id="script.js-136">
<pre class="prettyprint linenums" ng-set-text="script.js-137"></pre>
<script type="text/ng-template" id="script.js-137">
function Ctrl($scope, $window) {
$scope.$window = $window;
$scope.greeting = 'Hello, World!';
@ -36,8 +36,8 @@ expression.</p>
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-138"></pre>
<script type="text/ng-template" id="scenario.js-138">
<pre class="prettyprint linenums" ng-set-text="scenario.js-139"></pre>
<script type="text/ng-template" id="scenario.js-139">
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
@ -46,6 +46,6 @@ expression.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-137" ng-eval-javascript="script.js-136"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-138" ng-eval-javascript="script.js-137"></div>
</div></div>
</div>

View file

@ -22,10 +22,10 @@ interaction with the input element.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-checkbox-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-51" source-edit-css="" source-edit-js="script.js-50" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-52"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-38" source-edit-css="" source-edit-js="script.js-37" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-39"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-51" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-51">
<pre class="prettyprint linenums" ng-set-text="index.html-38" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-38">
<form name="myForm" ng-controller="Ctrl">
Value1: <input type="checkbox" ng-model="value1"> <br/>
@ -37,8 +37,8 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-50"></pre>
<script type="text/ng-template" id="script.js-50">
<pre class="prettyprint linenums" ng-set-text="script.js-37"></pre>
<script type="text/ng-template" id="script.js-37">
function Ctrl($scope) {
$scope.value1 = true;
$scope.value2 = 'YES'
@ -46,8 +46,8 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-52"></pre>
<script type="text/ng-template" id="scenario.js-52">
<pre class="prettyprint linenums" ng-set-text="scenario.js-39"></pre>
<script type="text/ng-template" id="scenario.js-39">
it('should change state', function() {
expect(binding('value1')).toEqual('true');
expect(binding('value2')).toEqual('YES');
@ -60,6 +60,6 @@ interaction with the input element.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-51" ng-eval-javascript="script.js-50"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-38" ng-eval-javascript="script.js-37"></div>
</div></div>
</div>

View file

@ -35,10 +35,10 @@ interaction with the input element.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-email-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-45" source-edit-css="" source-edit-js="script.js-44" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-46"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-32" source-edit-css="" source-edit-js="script.js-31" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-33"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-45" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-45">
<pre class="prettyprint linenums" ng-set-text="index.html-32" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-32">
<form name="myForm" ng-controller="Ctrl">
Email: <input type="email" name="input" ng-model="text" required>
@ -56,16 +56,16 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-44"></pre>
<script type="text/ng-template" id="script.js-44">
<pre class="prettyprint linenums" ng-set-text="script.js-31"></pre>
<script type="text/ng-template" id="script.js-31">
function Ctrl($scope) {
$scope.text = 'me@example.com';
}
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-46"></pre>
<script type="text/ng-template" id="scenario.js-46">
<pre class="prettyprint linenums" ng-set-text="scenario.js-33"></pre>
<script type="text/ng-template" id="scenario.js-33">
it('should initialize to model', function() {
expect(binding('text')).toEqual('me@example.com');
expect(binding('myForm.input.$valid')).toEqual('true');
@ -84,6 +84,6 @@ interaction with the input element.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-45" ng-eval-javascript="script.js-44"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-32" ng-eval-javascript="script.js-31"></div>
</div></div>
</div>

View file

@ -34,10 +34,10 @@ interaction with the input element.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-54" source-edit-css="" source-edit-js="script.js-53" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-55"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-41" source-edit-css="" source-edit-js="script.js-40" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-42"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-54" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-54">
<pre class="prettyprint linenums" ng-set-text="index.html-41" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-41">
<div ng-controller="Ctrl">
<form name="myForm">
@ -65,16 +65,16 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-53"></pre>
<script type="text/ng-template" id="script.js-53">
<pre class="prettyprint linenums" ng-set-text="script.js-40"></pre>
<script type="text/ng-template" id="script.js-40">
function Ctrl($scope) {
$scope.user = {name: 'guest', last: 'visitor'};
}
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-55"></pre>
<script type="text/ng-template" id="scenario.js-55">
<pre class="prettyprint linenums" ng-set-text="scenario.js-42"></pre>
<script type="text/ng-template" id="scenario.js-42">
it('should initialize to model', function() {
expect(binding('user')).toEqual('{"name":"guest","last":"visitor"}');
expect(binding('myForm.userName.$valid')).toEqual('true');
@ -114,6 +114,6 @@ interaction with the input element.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-54" ng-eval-javascript="script.js-53"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-41" ng-eval-javascript="script.js-40"></div>
</div></div>
</div>

View file

@ -39,10 +39,10 @@ interaction with the input element.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-number-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-39" source-edit-css="" source-edit-js="script.js-38" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-40"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-26" source-edit-css="" source-edit-js="script.js-25" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-27"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-39" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-39">
<pre class="prettyprint linenums" ng-set-text="index.html-26" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-26">
<form name="myForm" ng-controller="Ctrl">
Number: <input type="number" name="input" ng-model="value"
@ -60,16 +60,16 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-38"></pre>
<script type="text/ng-template" id="script.js-38">
<pre class="prettyprint linenums" ng-set-text="script.js-25"></pre>
<script type="text/ng-template" id="script.js-25">
function Ctrl($scope) {
$scope.value = 12;
}
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-40"></pre>
<script type="text/ng-template" id="scenario.js-40">
<pre class="prettyprint linenums" ng-set-text="scenario.js-27"></pre>
<script type="text/ng-template" id="scenario.js-27">
it('should initialize to model', function() {
expect(binding('value')).toEqual('12');
expect(binding('myForm.input.$valid')).toEqual('true');
@ -89,6 +89,6 @@ interaction with the input element.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-39" ng-eval-javascript="script.js-38"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-26" ng-eval-javascript="script.js-25"></div>
</div></div>
</div>

View file

@ -20,10 +20,10 @@ interaction with the input element.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-radio-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-48" source-edit-css="" source-edit-js="script.js-47" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-49"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-35" source-edit-css="" source-edit-js="script.js-34" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-36"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-48" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-48">
<pre class="prettyprint linenums" ng-set-text="index.html-35" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-35">
<form name="myForm" ng-controller="Ctrl">
<input type="radio" ng-model="color" value="red"> Red <br/>
@ -34,16 +34,16 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-47"></pre>
<script type="text/ng-template" id="script.js-47">
<pre class="prettyprint linenums" ng-set-text="script.js-34"></pre>
<script type="text/ng-template" id="script.js-34">
function Ctrl($scope) {
$scope.color = 'blue';
}
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-49"></pre>
<script type="text/ng-template" id="scenario.js-49">
<pre class="prettyprint linenums" ng-set-text="scenario.js-36"></pre>
<script type="text/ng-template" id="scenario.js-36">
it('should change state', function() {
expect(binding('color')).toEqual('blue');
@ -53,6 +53,6 @@ interaction with the input element.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-48" ng-eval-javascript="script.js-47"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-35" ng-eval-javascript="script.js-34"></div>
</div></div>
</div>

View file

@ -37,10 +37,10 @@ input.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-text-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-36" source-edit-css="" source-edit-js="script.js-35" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-37"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-23" source-edit-css="" source-edit-js="script.js-22" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-24"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-36" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-36">
<pre class="prettyprint linenums" ng-set-text="index.html-23" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-23">
<form name="myForm" ng-controller="Ctrl">
Single word: <input type="text" name="input" ng-model="text"
@ -59,8 +59,8 @@ input.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-35"></pre>
<script type="text/ng-template" id="script.js-35">
<pre class="prettyprint linenums" ng-set-text="script.js-22"></pre>
<script type="text/ng-template" id="script.js-22">
function Ctrl($scope) {
$scope.text = 'guest';
$scope.word = /^\s*\w*\s*$/;
@ -68,8 +68,8 @@ input.</p>
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-37"></pre>
<script type="text/ng-template" id="scenario.js-37">
<pre class="prettyprint linenums" ng-set-text="scenario.js-24"></pre>
<script type="text/ng-template" id="scenario.js-24">
it('should initialize to model', function() {
expect(binding('text')).toEqual('guest');
expect(binding('myForm.input.$valid')).toEqual('true');
@ -94,6 +94,6 @@ input.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-36" ng-eval-javascript="script.js-35"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-23" ng-eval-javascript="script.js-22"></div>
</div></div>
</div>

View file

@ -35,10 +35,10 @@ interaction with the input element.</p>
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-input-url-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-42" source-edit-css="" source-edit-js="script.js-41" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-43"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-29" source-edit-css="" source-edit-js="script.js-28" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-30"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-42" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-42">
<pre class="prettyprint linenums" ng-set-text="index.html-29" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-29">
<form name="myForm" ng-controller="Ctrl">
URL: <input type="url" name="input" ng-model="text" required>
@ -56,16 +56,16 @@ interaction with the input element.</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-41"></pre>
<script type="text/ng-template" id="script.js-41">
<pre class="prettyprint linenums" ng-set-text="script.js-28"></pre>
<script type="text/ng-template" id="script.js-28">
function Ctrl($scope) {
$scope.text = 'http://google.com';
}
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-43"></pre>
<script type="text/ng-template" id="scenario.js-43">
<pre class="prettyprint linenums" ng-set-text="scenario.js-30"></pre>
<script type="text/ng-template" id="scenario.js-30">
it('should initialize to model', function() {
expect(binding('text')).toEqual('http://google.com');
expect(binding('myForm.input.$valid')).toEqual('true');
@ -84,6 +84,6 @@ interaction with the input element.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-42" ng-eval-javascript="script.js-41"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-29" ng-eval-javascript="script.js-28"></div>
</div></div>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L958" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">ngApp</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/Angular.js#L968" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/Angular.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">ngApp</code>
<div><span class="hint">directive in module <code ng:non-bindable="">ng</code>
</span>
</div>

View file

@ -14,10 +14,10 @@ The expression is not evaluated when the value change is coming from the model.<
</div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-ngchange-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-61" source-edit-css="" source-edit-js="script.js-60" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-62"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-47" source-edit-css="" source-edit-js="script.js-46" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-48"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-61" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-61">
<pre class="prettyprint linenums" ng-set-text="index.html-47" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-47">
<div ng-controller="Controller">
<input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
@ -29,8 +29,8 @@ The expression is not evaluated when the value change is coming from the model.<
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-60"></pre>
<script type="text/ng-template" id="script.js-60">
<pre class="prettyprint linenums" ng-set-text="script.js-46"></pre>
<script type="text/ng-template" id="script.js-46">
function Controller($scope) {
$scope.counter = 0;
$scope.change = function() {
@ -40,8 +40,8 @@ The expression is not evaluated when the value change is coming from the model.<
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-62"></pre>
<script type="text/ng-template" id="scenario.js-62">
<pre class="prettyprint linenums" ng-set-text="scenario.js-48"></pre>
<script type="text/ng-template" id="scenario.js-48">
it('should evaluate the expression if changing from view', function() {
expect(binding('counter')).toEqual('0');
element('#ng-change-example1').click();
@ -57,6 +57,6 @@ The expression is not evaluated when the value change is coming from the model.<
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-61" ng-eval-javascript="script.js-60"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-47" ng-eval-javascript="script.js-46"></div>
</div></div>
</div>

View file

@ -28,10 +28,10 @@ element.</p>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-ngclass-page"><p>Example that demostrates basic bindings via ngClass directive.
<h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-22" source-edit-css="style.css" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-23"></div>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-52" source-edit-css="style.css-53" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-54"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-22" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-22">
<pre class="prettyprint linenums" ng-set-text="index.html-52" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-52">
<p ng-class="{strike: strike, bold: bold, red: red}">Map Syntax Example</p>
<input type="checkbox" ng-model="bold"> bold
<input type="checkbox" ng-model="strike"> strike
@ -47,8 +47,8 @@ element.</p>
</script>
</div>
<div class="tab-pane" title="style.css">
<pre class="prettyprint linenums" ng-set-text="style.css"></pre>
<style type="text/css" id="style.css">
<pre class="prettyprint linenums" ng-set-text="style.css-53"></pre>
<style type="text/css" id="style.css-53">
.strike {
text-decoration: line-through;
}
@ -61,8 +61,8 @@ element.</p>
</style>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-23"></pre>
<script type="text/ng-template" id="scenario.js-23">
<pre class="prettyprint linenums" ng-set-text="scenario.js-54"></pre>
<script type="text/ng-template" id="scenario.js-54">
it('should let you toggle the class', function() {
expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/bold/);
@ -91,14 +91,14 @@ element.</p>
</script>
</div>
</div><h2>Demo</h2>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-22" ng-eval-javascript=""></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-52" ng-eval-javascript=""></div>
<h2>Animations</h2>
<p>Example that demostrates how addition and removal of classes can be animated.</p>
<p>The example below demonstrates how to perform animations using ngClass.</p>
<h2>Source</h2>
<div source-edit="" source-edit-deps="angular.js angular-animate.js" source-edit-html="index.html-24" source-edit-css="style.css-25" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-26"></div>
<div source-edit="" source-edit-deps="angular.js angular-animate.js" source-edit-html="index.html-55" source-edit-css="style.css-56" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-57"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-24" ng-html-wrap=" angular.js angular-animate.js"></pre>
<script type="text/ng-template" id="index.html-24">
<pre class="prettyprint linenums" ng-set-text="index.html-55" ng-html-wrap=" angular.js angular-animate.js"></pre>
<script type="text/ng-template" id="index.html-55">
<input type="button" value="set" ng-click="myVar='my-class'">
<input type="button" value="clear" ng-click="myVar=''">
<br>
@ -106,8 +106,8 @@ element.</p>
</script>
</div>
<div class="tab-pane" title="style.css">
<pre class="prettyprint linenums" ng-set-text="style.css-25"></pre>
<style type="text/css" id="style.css-25">
<pre class="prettyprint linenums" ng-set-text="style.css-56"></pre>
<style type="text/css" id="style.css-56">
.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;
@ -128,8 +128,8 @@ element.</p>
</style>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-26"></pre>
<script type="text/ng-template" id="scenario.js-26">
<pre class="prettyprint linenums" ng-set-text="scenario.js-57"></pre>
<script type="text/ng-template" id="scenario.js-57">
it('should check ng-class', function() {
expect(element('.doc-example-live span').prop('className')).not().
toMatch(/my-class/);
@ -146,7 +146,13 @@ element.</p>
});
</script>
</div>
</div><div class="pull-right"> <button class="btn btn-primary" ng-click="animationsOff=true" ng-hide="animationsOff">Animations on</button> <button class="btn btn-primary disabled" ng-click="animationsOff=false" ng-show="animationsOff">Animations off</button></div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-class="{'animations-off':animationsOff == true}" ng-embed-app="" ng-set-html="index.html-24" ng-eval-javascript=""></div>
</div><div class="pull-right"> <button class="btn btn-primary" ng-click="animationsOff=true" ng-hide="animationsOff">Animations on</button> <button class="btn btn-primary disabled" ng-click="animationsOff=false" ng-show="animationsOff">Animations off</button></div><h2>Demo</h2>
<div class="well doc-example-live animate-container" ng-class="{'animations-off':animationsOff == true}" ng-embed-app="" ng-set-html="index.html-55" ng-eval-javascript=""></div>
<h2>ngClass and pre-existing CSS3 Transitions/Animations</h4>
<p>The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
Therefore, if any CSS3 Transition/Animation styles (outside of ngAnimate) are set on the element, then, if a ngClass animation
is triggered, the ngClass animation will be skipped so that ngAnimate can allow for the pre-existing transition or animation to
take over. This restriction allows for ngClass to still work with standard CSS3 Transitions/Animations that are defined
outside of ngAnimate.</p>
</div></div>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/directive/ngClass.js#L249" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/directive/ngClass.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">ngClassEven</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/directive/ngClass.js#L257" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/directive/ngClass.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">ngClassEven</code>
<div><span class="hint">directive in module <code ng:non-bindable="">ng</code>
</span>
</div>
@ -22,10 +22,10 @@ result of the evaluation can be a string representing space delimited class name
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-ngclasseven-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-30" source-edit-css="style.css-31" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-32"></div>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-61" source-edit-css="style.css-62" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-63"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-30" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-30">
<pre class="prettyprint linenums" ng-set-text="index.html-61" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-61">
<ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
<li ng-repeat="name in names">
<span ng-class-odd="'odd'" ng-class-even="'even'">
@ -36,8 +36,8 @@ result of the evaluation can be a string representing space delimited class name
</script>
</div>
<div class="tab-pane" title="style.css">
<pre class="prettyprint linenums" ng-set-text="style.css-31"></pre>
<style type="text/css" id="style.css-31">
<pre class="prettyprint linenums" ng-set-text="style.css-62"></pre>
<style type="text/css" id="style.css-62">
.odd {
color: red;
}
@ -47,8 +47,8 @@ result of the evaluation can be a string representing space delimited class name
</style>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-32"></pre>
<script type="text/ng-template" id="scenario.js-32">
<pre class="prettyprint linenums" ng-set-text="scenario.js-63"></pre>
<script type="text/ng-template" id="scenario.js-63">
it('should check ng-class-odd and ng-class-even', function() {
expect(element('.doc-example-live li:first span').prop('className')).
toMatch(/odd/);
@ -58,6 +58,6 @@ result of the evaluation can be a string representing space delimited class name
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-30" ng-eval-javascript=""></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-61" ng-eval-javascript=""></div>
</div></div>
</div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/directive/ngClass.js#L202" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/directive/ngClass.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">ngClassOdd</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ng/directive/ngClass.js#L210" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ng/directive/ngClass.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">ngClassOdd</code>
<div><span class="hint">directive in module <code ng:non-bindable="">ng</code>
</span>
</div>
@ -22,10 +22,10 @@ of the evaluation can be a string representing space delimited class names or an
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-ngclassodd-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-27" source-edit-css="style.css-28" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-29"></div>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-58" source-edit-css="style.css-59" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-60"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-27" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-27">
<pre class="prettyprint linenums" ng-set-text="index.html-58" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-58">
<ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
<li ng-repeat="name in names">
<span ng-class-odd="'odd'" ng-class-even="'even'">
@ -36,8 +36,8 @@ of the evaluation can be a string representing space delimited class names or an
</script>
</div>
<div class="tab-pane" title="style.css">
<pre class="prettyprint linenums" ng-set-text="style.css-28"></pre>
<style type="text/css" id="style.css-28">
<pre class="prettyprint linenums" ng-set-text="style.css-59"></pre>
<style type="text/css" id="style.css-59">
.odd {
color: red;
}
@ -47,8 +47,8 @@ of the evaluation can be a string representing space delimited class names or an
</style>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-29"></pre>
<script type="text/ng-template" id="scenario.js-29">
<pre class="prettyprint linenums" ng-set-text="scenario.js-60"></pre>
<script type="text/ng-template" id="scenario.js-60">
it('should check ng-class-odd and ng-class-even', function() {
expect(element('.doc-example-live li:first span').prop('className')).
toMatch(/odd/);
@ -58,6 +58,6 @@ of the evaluation can be a string representing space delimited class names or an
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-27" ng-eval-javascript=""></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-58" ng-eval-javascript=""></div>
</div></div>
</div>

View file

@ -37,17 +37,17 @@ as class<pre class="prettyprint linenums">&lt;ANY class="ng-cloak"&gt;
</div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-ngcloak-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-33" source-edit-css="" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-34"></div>
<div source-edit="" source-edit-deps="angular.js" source-edit-html="index.html-64" source-edit-css="" source-edit-js="" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-65"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-33" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-33">
<pre class="prettyprint linenums" ng-set-text="index.html-64" ng-html-wrap=" angular.js"></pre>
<script type="text/ng-template" id="index.html-64">
<div id="template1" ng-cloak>{{ 'hello' }}</div>
<div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div>
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-34"></pre>
<script type="text/ng-template" id="scenario.js-34">
<pre class="prettyprint linenums" ng-set-text="scenario.js-65"></pre>
<script type="text/ng-template" id="scenario.js-65">
it('should remove the template directive and css class', function() {
expect(element('.doc-example-live #template1').attr('ng-cloak')).
not().toBeDefined();
@ -57,6 +57,6 @@ as class<pre class="prettyprint linenums">&lt;ANY class="ng-cloak"&gt;
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-33" ng-eval-javascript=""></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-64" ng-eval-javascript=""></div>
</div></div>
</div>

View file

@ -18,10 +18,10 @@ specified in form <code>/something/</code> then the value will be converted into
</div></td></tr></tbody></table></div>
<h2 id="Example">Example</h2>
<div class="example"><div class="ng-directive-page ng-directive-nglist-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-64" source-edit-css="" source-edit-js="script.js-63" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-65"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-50" source-edit-css="" source-edit-js="script.js-49" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-51"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-64" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-64">
<pre class="prettyprint linenums" ng-set-text="index.html-50" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-50">
<form name="myForm" ng-controller="Ctrl">
List: <input name="namesInput" ng-model="names" ng-list required>
@ -37,16 +37,16 @@ specified in form <code>/something/</code> then the value will be converted into
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-63"></pre>
<script type="text/ng-template" id="script.js-63">
<pre class="prettyprint linenums" ng-set-text="script.js-49"></pre>
<script type="text/ng-template" id="script.js-49">
function Ctrl($scope) {
$scope.names = ['igor', 'misko', 'vojta'];
}
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-65"></pre>
<script type="text/ng-template" id="scenario.js-65">
<pre class="prettyprint linenums" ng-set-text="scenario.js-51"></pre>
<script type="text/ng-template" id="scenario.js-51">
it('should initialize to model', function() {
expect(binding('names')).toEqual('["igor","misko","vojta"]');
expect(binding('myForm.namesInput.$valid')).toEqual('true');
@ -62,6 +62,6 @@ specified in form <code>/something/</code> then the value will be converted into
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-64" ng-eval-javascript="script.js-63"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-50" ng-eval-javascript="script.js-49"></div>
</div></div>
</div>

View file

@ -16,10 +16,10 @@ propogated to the parent scope.</p>
data-binding. Notice how different directives (<code>contenteditable</code>, <code>ng-model</code>, and <code>required</code>)
collaborate together to achieve the desired result.</p>
<h4>Source</h2>
<div source-edit="customControl" source-edit-deps="angular.js script.js" source-edit-html="index.html-58" source-edit-css="style.css-56" source-edit-js="script.js-57" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-59"></div>
<div source-edit="customControl" source-edit-deps="angular.js script.js" source-edit-html="index.html-44" source-edit-css="style.css" source-edit-js="script.js-43" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-45"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-58" ng-html-wrap="customControl angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-58">
<pre class="prettyprint linenums" ng-set-text="index.html-44" ng-html-wrap="customControl angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-44">
<form name="myForm">
<div contenteditable
name="myWidget" ng-model="userContent"
@ -32,8 +32,8 @@ collaborate together to achieve the desired result.</p>
</script>
</div>
<div class="tab-pane" title="style.css">
<pre class="prettyprint linenums" ng-set-text="style.css-56"></pre>
<style type="text/css" id="style.css-56">
<pre class="prettyprint linenums" ng-set-text="style.css"></pre>
<style type="text/css" id="style.css">
[contenteditable] {
border: 1px solid black;
background-color: white;
@ -47,8 +47,8 @@ collaborate together to achieve the desired result.</p>
</style>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-57"></pre>
<script type="text/ng-template" id="script.js-57">
<pre class="prettyprint linenums" ng-set-text="script.js-43"></pre>
<script type="text/ng-template" id="script.js-43">
angular.module('customControl', []).
directive('contenteditable', function() {
return {
@ -84,8 +84,8 @@ collaborate together to achieve the desired result.</p>
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-59"></pre>
<script type="text/ng-template" id="scenario.js-59">
<pre class="prettyprint linenums" ng-set-text="scenario.js-45"></pre>
<script type="text/ng-template" id="scenario.js-45">
it('should data-bind and become invalid', function() {
var contentEditable = element('[contenteditable]');
@ -97,7 +97,7 @@ collaborate together to achieve the desired result.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="customControl" ng-set-html="index.html-58" ng-eval-javascript="script.js-57"></div>
<div class="well doc-example-live animate-container" ng-embed-app="customControl" ng-set-html="index.html-44" ng-eval-javascript="script.js-43"></div>
</div></div>
<div class="member method"><h2 id="Methods">Methods</h2>
<ul class="methods"><li><h3 id="$render">$render()</h3>

View file

@ -4,7 +4,8 @@
</div>
</h1>
<div><h2 id="Description">Description</h2>
<div class="description"><div class="ng-directive-page ng-directive-ngtransclude-page"><p>Insert the transcluded DOM here.</p>
<div class="description"><div class="ng-directive-page ng-directive-ngtransclude-page"><p>Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.</p>
<p>Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.</p>
</div></div>
<h2 id="Usage">Usage</h2>
<div class="usage">as attribute<pre class="prettyprint linenums">&lt;ANY ng-transclude&gt;

View file

@ -2,5 +2,5 @@
<div><span class="hint"></span>
</div>
</h1>
<div><div class="ng-page"><p>The <code>ng</code> is an angular module which contains all of the core angular services.</p>
<div><div class="ng-page"><p><code>ng</code> is the name of the <a href="../../../../../index.htmlle">angular module</a> that contains all of the core angular services.</p>
</div></div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngAnimate/animate.js#L236" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngAnimate/animate.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$animate</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngAnimate/animate.js#L233" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngAnimate/animate.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$animate</code>
<div><span class="hint">service in module <code ng:non-bindable="">ngAnimate</code>
</span>
</div>
@ -10,7 +10,8 @@ will examine any JavaScript-defined animations (which are defined by using the $
as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.</p>
<p>The <code>$animate</code> 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.</p>
<p>Please visit the <a href="api/ngAnimate">ngAnimate</a> module overview page learn more about how to use animations in your application.</p>
<p>Requires the <a href="api/ngAnimate"><code>ngAnimate</code></a> module to be installed.</p>
<p>Please visit the <a href="api/ngAnimate"><code>ngAnimate</code></a> module overview page learn more about how to use animations in your application.</p>
</div></div>
<h2 id="Dependencies">Dependencies</h2>
<ul class="dependencies"><li><code ng:non-bindable=""><a href="api/ng.$timeout,">$timeout,</a></code>
@ -21,7 +22,8 @@ will work out of the box without any extra configuration.</p>
<ul class="methods"><li><h3 id="addClass">addClass(element, className, done)</h3>
<div class="addclass"><div class="nganimate-animate-addclass-page"><p>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 <a href="#" class="label type-hint type-hint--add">-add</a> in order to provide
the animate service the setup and active CSS classes in order to trigger the animation.</p>
the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions
or keyframes are defined on the -add CSS class).</p>
<p>Below is a breakdown of each step that occurs during addClass animation:</p>
<table>
<thead>
@ -36,11 +38,11 @@ the animate service the setup and active CSS classes in order to trigger the ani
<td>class=&quot;&quot;</td>
</tr>
<tr>
<td>2. the .super-add class is added to the element</td>
<td>class=&quot;super-add&quot;</td>
<td>2. $animate runs any JavaScript-defined animations on the element</td>
<td>class=&quot;&quot;</td>
</tr>
<tr>
<td>3. $animate runs any JavaScript-defined animations on the element</td>
<td>3. the .super-add class is added to the element</td>
<td>class=&quot;super-add&quot;</td>
</tr>
<tr>
@ -101,11 +103,11 @@ the animation is started, the following CSS classes will be present on the eleme
<td>class=&quot;my-animation&quot;</td>
</tr>
<tr>
<td>3. the .ng-enter class is added to the element</td>
<td>class=&quot;my-animation ng-enter&quot;</td>
<td>3. $animate runs any JavaScript-defined animations on the element</td>
<td>class=&quot;my-animation&quot;</td>
</tr>
<tr>
<td>4. $animate runs any JavaScript-defined animations on the element</td>
<td>4. the .ng-enter class is added to the element</td>
<td>class=&quot;my-animation ng-enter&quot;</td>
</tr>
<tr>
@ -153,11 +155,11 @@ the animation is started, the following CSS classes will be added for the durati
<td>class=&quot;my-animation&quot;</td>
</tr>
<tr>
<td>2. the .ng-leave class is added to the element</td>
<td>class=&quot;my-animation ng-leave&quot;</td>
<td>2. $animate runs any JavaScript-defined animations on the element</td>
<td>class=&quot;my-animation&quot;</td>
</tr>
<tr>
<td>3. $animate runs any JavaScript-defined animations on the element</td>
<td>3. the .ng-leave class is added to the element</td>
<td>class=&quot;my-animation ng-leave&quot;</td>
</tr>
<tr>
@ -212,11 +214,11 @@ the animation is started, the following CSS classes will be added for the durati
<td>class=&quot;my-animation&quot;</td>
</tr>
<tr>
<td>3. the .ng-move class is added to the element</td>
<td>class=&quot;my-animation ng-move&quot;</td>
<td>3. $animate runs any JavaScript-defined animations on the element</td>
<td>class=&quot;my-animation&quot;</td>
</tr>
<tr>
<td>4. $animate runs any JavaScript-defined animations on the element</td>
<td>4. the .ng-move class is added to the element</td>
<td>class=&quot;my-animation ng-move&quot;</td>
</tr>
<tr>
@ -250,7 +252,8 @@ the animation is started, the following CSS classes will be added for the durati
<li><h3 id="removeClass">removeClass(element, className, done)</h3>
<div class="removeclass"><div class="nganimate-animate-removeclass-page"><p>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 <a href="#" class="label type-hint type-hint--remove">-remove</a> in
order to provide the animate service the setup and active CSS classes in order to trigger the animation.</p>
order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if
no CSS transitions or keyframes are defined on the -remove CSS class).</p>
<p>Below is a breakdown of each step that occurs during removeClass animation:</p>
<table>
<thead>
@ -265,11 +268,11 @@ order to provide the animate service the setup and active CSS classes in order t
<td>class=&quot;super&quot;</td>
</tr>
<tr>
<td>2. the .super-remove class is added to the element</td>
<td>class=&quot;super super-remove&quot;</td>
<td>2. $animate runs any JavaScript-defined animations on the element</td>
<td>class=&quot;super&quot;</td>
</tr>
<tr>
<td>3. $animate runs any JavaScript-defined animations on the element</td>
<td>3. the .super-remove class is added to the element</td>
<td>class=&quot;super super-remove&quot;</td>
</tr>
<tr>

View file

@ -1,12 +1,13 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngAnimate/animate.js#L188" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngAnimate/animate.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$animateProvider</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngAnimate/animate.js#L183" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngAnimate/animate.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$animateProvider</code>
<div><span class="hint">service in module <code ng:non-bindable="">ngAnimate</code>
</span>
</div>
</h1>
<div><h2 id="Description">Description</h2>
<div class="description"><div class="nganimate-animateprovider-page"><p>The $AnimationProvider provider allows developers to register and access custom JavaScript animations directly inside
<div class="description"><div class="nganimate-animateprovider-page"><p>The <code>$AnimationProvider</code> 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.</p>
<p>Please visit the <a href="api/ngAnimate">ngAnimate</a> module overview page learn more about how to use animations in your application.</p>
<p>Requires the <a href="api/ngAnimate"><code>ngAnimate</code></a> module to be installed.</p>
<p>Please visit the <a href="api/ngAnimate"><code>ngAnimate</code></a> module overview page learn more about how to use animations in your application.</p>
</div></div>
</div>

View file

@ -2,15 +2,12 @@
<div><span class="hint"></span>
</div>
</h1>
<div><div class="nganimate-page"><h2>ngAnimate</h2>
<p>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.</p>
<p>To make use of animations with AngularJS, the <code>angular-animate.js</code> JavaScript file must be included into your application
and the <code>ngAnimate</code> module must be included as a dependency.</p>
<pre class="prettyprint linenums">
angular.module('App', ['ngAnimate']);
</pre>
<p>Then, to see animations in action, all that is required is to define the appropriate CSS classes
<div><div class="nganimate-page"><h2>ngAnimate</h1>
<p><code>ngAnimate</code> is an optional module that provides CSS and JavaScript animation hooks.</p>
<p><h1>Installation</h1><p>First include <code>angular-animate.js</code> in your HTML:</p><pre><code> &lt;script src=&quot;angular.js&quot;&gt;
&lt;script src=&quot;angular-animate.js&quot;&gt;</pre></code><p>You can also find this file on the <a href="https://developers.google.com/speed/libraries/devguide#angularjs">Google CDN</a>, <a href="http://bower.io/">Bower</a> (as <code>angular-animate</code>), and on <a href="http://code.angularjs.org/">code.angularjs.org</a>.</p><p>Then load the module in your application by adding it as a dependant module:</p><pre><code> angular.module(&#39;app&#39;, [&#39;ngAnimate&#39;]);</pre></code><p>With that you&#39;re ready to get started!</p></p>
<h1>Usage</h2>
<p>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:
<code>ngRepeat</code>, <code>ngInclude</code>, <code>ngSwitch</code>, <code>ngShow</code>, <code>ngHide</code> and <code>ngView</code>. Custom directives can take advantage of animation
by using the <code>$animate</code> service.</p>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngCookies/cookies.js#L116" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngCookies/cookies.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$cookieStore</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngCookies/cookies.js#L129" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngCookies/cookies.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$cookieStore</code>
<div><span class="hint">service in module <code ng:non-bindable="">ngCookies</code>
</span>
</div>
@ -7,6 +7,7 @@
<div class="description"><div class="ngcookies-cookiestore-page"><p>Provides a key-value (string-object) storage, that is backed by session cookies.
Objects put or retrieved from this storage are automatically serialized or
deserialized by angular&#39;s toJson/fromJson.</p>
<p>Requires the <a href="api/ngCookies"><code>ngCookies</code></a> module to be installed.</p>
</div></div>
<h2 id="Dependencies">Dependencies</h2>
<ul class="dependencies"><li><code ng:non-bindable=""><a href="api/ng.$cookies">$cookies</a></code>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngCookies/cookies.js#L10" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngCookies/cookies.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$cookies</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngCookies/cookies.js#L21" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngCookies/cookies.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$cookies</code>
<div><span class="hint">service in module <code ng:non-bindable="">ngCookies</code>
</span>
</div>
@ -7,6 +7,7 @@
<div class="description"><div class="ngcookies-cookies-page"><p>Provides read/write access to browser&#39;s cookies.</p>
<p>Only a simple Object is exposed and by adding or removing properties to/from
this object, new cookies are created/deleted at the end of current $eval.</p>
<p>Requires the <a href="api/ngCookies"><code>ngCookies</code></a> module to be installed.</p>
</div></div>
<h2 id="Dependencies">Dependencies</h2>
<ul class="dependencies"><li><code ng:non-bindable=""><a href="api/ng.$browser">$browser</a></code>
@ -14,16 +15,16 @@ this object, new cookies are created/deleted at the end of current $eval.</p>
</ul>
<h2 id="Example">Example</h2>
<div class="example"><div class="ngcookies-cookies-page"><h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-140" source-edit-css="" source-edit-js="script.js-139" source-edit-json="" source-edit-unit="" source-edit-scenario=""></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-141" source-edit-css="" source-edit-js="script.js-140" source-edit-json="" source-edit-unit="" source-edit-scenario=""></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-140" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-140">
<pre class="prettyprint linenums" ng-set-text="index.html-141" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-141">
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-139"></pre>
<script type="text/ng-template" id="script.js-139">
<pre class="prettyprint linenums" ng-set-text="script.js-140"></pre>
<script type="text/ng-template" id="script.js-140">
function ExampleController($cookies) {
// Retrieving a cookie
var favoriteCookie = $cookies.myFavorite;
@ -33,6 +34,6 @@ this object, new cookies are created/deleted at the end of current $eval.</p>
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-140" ng-eval-javascript="script.js-139"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-141" ng-eval-javascript="script.js-140"></div>
</div></div>
</div>

View file

@ -2,4 +2,11 @@
<div><span class="hint"></span>
</div>
</h1>
<div></div>
<div><div class="ngcookies-page"><h2>ngCookies</h1>
<p>Provides the <a href="api/ngCookies.$cookies"><code>$cookies</code></a> and
<a href="api/ngCookies.$cookieStore"><code>$cookieStore</code></a> services.</p>
<p><h1>Installation</h2><p>First include <code>angular-cookies.js</code> in your HTML:</p><pre><code> &lt;script src=&quot;angular.js&quot;&gt;
&lt;script src=&quot;angular-cookies.js&quot;&gt;</pre></code><p>You can also find this file on the <a href="https://developers.google.com/speed/libraries/devguide#angularjs">Google CDN</a>, <a href="http://bower.io/">Bower</a> (as <code>angular-cookies</code>), and on <a href="http://code.angularjs.org/">code.angularjs.org</a>.</p><p>Then load the module in your application by adding it as a dependant module:</p><pre><code> angular.module(&#39;app&#39;, [&#39;ngCookies&#39;]);</pre></code><p>With that you&#39;re ready to get started!</p></p>
<p>See <a href="api/ngCookies.$cookies"><code>$cookies</code></a> and
<a href="api/ngCookies.$cookieStore"><code>$cookieStore</code></a> for usage.</p>
</div></div>

View file

@ -1,4 +1,4 @@
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngResource/resource.js#L11" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngResource/resource.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$resource</code>
<a href="http://github.com/angular/angular.js/tree/v1.2.0rc1/src/ngResource/resource.js#L21" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a><a href="http://github.com/angular/angular.js/edit/master/src/ngResource/resource.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a><h1><code ng:non-bindable="">$resource</code>
<div><span class="hint">service in module <code ng:non-bindable="">ngResource</code>
</span>
</div>
@ -8,13 +8,7 @@
<a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful</a> server-side data sources.</p>
<p>The returned resource object has action methods which provide high-level behaviors without
the need to interact with the low level <a href="api/ng.$http"><code>$http</code></a> service.</p>
<h3>Installation</h3>
<p>To use $resource make sure you have included the <code>angular-resource.js</code> that comes in Angular
package. You can also find this file on Google CDN, bower as well as at
<a href="http://code.angularjs.org/">code.angularjs.org</a>.</p>
<p>Finally load the module in your application:</p>
<pre><code> angular.module(&#39;app&#39;, [&#39;ngResource&#39;]);</code></pre>
<p>and you are ready to get started!</p>
<p>Requires the <a href="api/ngResource"><code>ngResource</code></a> module to be installed.</p>
</div></div>
<h2 id="Dependencies">Dependencies</h2>
<ul class="dependencies"><li><code ng:non-bindable=""><a href="api/ng.$http">$http</a></code>
@ -26,8 +20,8 @@ package. You can also find this file on Google CDN, bower as well as at
<code>/user/:username</code>. If you are using a URL with a port number (e.g.
<code>http://example.com:8080/api</code>), it will be respected.</p>
<p>If you are using a url with a suffix, just add the suffix, like this:
<code>$resource(&#39;http://example.com/resource.json&#39;)</code> or <code>$resource(&#39;http://example.com/:id.json&#39;)
or even</code>$resource(&#39;<a href="http://example.com/resource/:resource_id.:format&#39;)`">http://example.com/resource/:resource_id.:format&#39;)`</a>
<code>$resource(&#39;http://example.com/resource.json&#39;)</code> or <code>$resource(&#39;http://example.com/:id.json&#39;)</code>
or even <code>$resource(&#39;http://example.com/resource/:resource_id.:format&#39;)</code>
If the parameter before the suffix is empty, :resource_id in this case, then the <code>/.</code> will be
collapsed down to a single <code>.</code>. If you need this sequence to appear and not collapse then you
can escape it with <code>/\.</code>.</p>
@ -195,10 +189,10 @@ could rewrite the above example and get access to http headers as:</p>
<h1>Buzz client</h1>
<p> Let&#39;s look at what a buzz client created with the <code>$resource</code> service looks like:
<h4>Source</h2>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-145" source-edit-css="" source-edit-js="script.js-144" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-146"></div>
<div source-edit="" source-edit-deps="angular.js script.js" source-edit-html="index.html-143" source-edit-css="" source-edit-js="script.js-142" source-edit-json="" source-edit-unit="" source-edit-scenario="scenario.js-144"></div>
<div class="tabbable"><div class="tab-pane" title="index.html">
<pre class="prettyprint linenums" ng-set-text="index.html-145" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-145">
<pre class="prettyprint linenums" ng-set-text="index.html-143" ng-html-wrap=" angular.js script.js"></pre>
<script type="text/ng-template" id="index.html-143">
<div ng-controller="BuzzController">
@ -221,8 +215,8 @@ could rewrite the above example and get access to http headers as:</p>
</script>
</div>
<div class="tab-pane" title="script.js">
<pre class="prettyprint linenums" ng-set-text="script.js-144"></pre>
<script type="text/ng-template" id="script.js-144">
<pre class="prettyprint linenums" ng-set-text="script.js-142"></pre>
<script type="text/ng-template" id="script.js-142">
function BuzzController($resource) {
this.userId = 'googlebuzz';
this.Activity = $resource(
@ -244,11 +238,11 @@ could rewrite the above example and get access to http headers as:</p>
</script>
</div>
<div class="tab-pane" title="End to end test">
<pre class="prettyprint linenums" ng-set-text="scenario.js-146"></pre>
<script type="text/ng-template" id="scenario.js-146">
<pre class="prettyprint linenums" ng-set-text="scenario.js-144"></pre>
<script type="text/ng-template" id="scenario.js-144">
</script>
</div>
</div><h2>Demo</h4>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-145" ng-eval-javascript="script.js-144"></div>
<div class="well doc-example-live animate-container" ng-embed-app="" ng-set-html="index.html-143" ng-eval-javascript="script.js-142"></div>
</div></div>
</div>

Some files were not shown because too many files have changed in this diff Show more