angular-gem 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/lib/angular-gem/version.rb +1 -1
  2. data/lib/tasks/copy.rake +22 -11
  3. data/lib/tasks/tag.rake +2 -11
  4. data/vendor/assets/javascripts/1.2.0/angular-animate.js +1226 -0
  5. data/vendor/assets/javascripts/1.2.0/angular-animate.min.js +21 -0
  6. data/vendor/assets/javascripts/1.2.0/angular-animate.min.js.map +8 -0
  7. data/vendor/assets/javascripts/{angular-cookies-unstable.js → 1.2.0/angular-cookies.js} +21 -4
  8. data/vendor/assets/javascripts/1.2.0/angular-cookies.min.js +8 -0
  9. data/vendor/assets/javascripts/1.2.0/angular-cookies.min.js.map +8 -0
  10. data/vendor/assets/javascripts/1.2.0/angular-csp.css +24 -0
  11. data/vendor/assets/javascripts/{angular-loader-unstable.js → 1.2.0/angular-loader.js} +48 -29
  12. data/vendor/assets/javascripts/1.2.0/angular-loader.min.js +8 -0
  13. data/vendor/assets/javascripts/1.2.0/angular-loader.min.js.map +8 -0
  14. data/vendor/assets/javascripts/{angular-mocks-unstable.js → 1.2.0/angular-mocks.js} +460 -216
  15. data/vendor/assets/javascripts/{angular-resource-unstable.js → 1.2.0/angular-resource.js} +189 -148
  16. data/vendor/assets/javascripts/1.2.0/angular-resource.min.js +12 -0
  17. data/vendor/assets/javascripts/1.2.0/angular-resource.min.js.map +8 -0
  18. data/vendor/assets/javascripts/1.2.0/angular-route.js +880 -0
  19. data/vendor/assets/javascripts/1.2.0/angular-route.min.js +14 -0
  20. data/vendor/assets/javascripts/1.2.0/angular-route.min.js.map +8 -0
  21. data/vendor/assets/javascripts/{angular-sanitize-unstable.js → 1.2.0/angular-sanitize.js} +142 -123
  22. data/vendor/assets/javascripts/1.2.0/angular-sanitize.min.js +14 -0
  23. data/vendor/assets/javascripts/1.2.0/angular-sanitize.min.js.map +8 -0
  24. data/vendor/assets/javascripts/{angular-scenario-unstable.js → 1.2.0/angular-scenario.js} +15978 -12405
  25. data/vendor/assets/javascripts/{angular-mobile-unstable.js → 1.2.0/angular-touch.js} +214 -111
  26. data/vendor/assets/javascripts/1.2.0/angular-touch.min.js +13 -0
  27. data/vendor/assets/javascripts/1.2.0/angular-touch.min.js.map +8 -0
  28. data/vendor/assets/javascripts/{angular-unstable.js → 1.2.0/angular.js} +10167 -7012
  29. data/vendor/assets/javascripts/1.2.0/angular.min.js +200 -0
  30. data/vendor/assets/javascripts/1.2.0/angular.min.js.map +8 -0
  31. data/vendor/assets/javascripts/1.2.0/errors.json +1 -0
  32. data/vendor/assets/javascripts/1.2.0/version.json +1 -0
  33. data/vendor/assets/javascripts/1.2.0/version.txt +1 -0
  34. data/vendor/assets/javascripts/angular-animate.js +1226 -0
  35. data/vendor/assets/javascripts/angular-animate.min.js +21 -0
  36. data/vendor/assets/javascripts/angular-cookies.js +21 -4
  37. data/vendor/assets/javascripts/angular-cookies.min.js +8 -0
  38. data/vendor/assets/javascripts/angular-loader.js +63 -17
  39. data/vendor/assets/javascripts/angular-loader.min.js +8 -0
  40. data/vendor/assets/javascripts/angular-mocks.js +553 -211
  41. data/vendor/assets/javascripts/angular-resource.js +268 -147
  42. data/vendor/assets/javascripts/angular-resource.min.js +12 -0
  43. data/vendor/assets/javascripts/angular-route.js +880 -0
  44. data/vendor/assets/javascripts/angular-route.min.js +14 -0
  45. data/vendor/assets/javascripts/angular-sanitize.js +165 -125
  46. data/vendor/assets/javascripts/angular-sanitize.min.js +14 -0
  47. data/vendor/assets/javascripts/angular-scenario.js +16615 -10889
  48. data/vendor/assets/javascripts/angular-touch.js +563 -0
  49. data/vendor/assets/javascripts/angular-touch.min.js +13 -0
  50. data/vendor/assets/javascripts/angular.js +9717 -4533
  51. data/vendor/assets/javascripts/angular.min.js +200 -0
  52. metadata +44 -21
  53. data/test/dummy/log/test.log +0 -2
  54. data/test/dummy/tmp/cache/assets/D65/250/sprockets%2F54a960d46bb0b354e8bd46fa03f5e0e4 +0 -0
  55. data/test/dummy/tmp/cache/assets/D6A/FB0/sprockets%2F92721e9941b77adcfdfba3d060622de2 +0 -0
  56. data/test/dummy/tmp/cache/assets/E07/040/sprockets%2Ff55b8ce9d0f28ce36b768a1c7aeb2ef3 +0 -0
  57. data/test/tmp/app/assets/javascripts/application.js +0 -5
@@ -0,0 +1,21 @@
1
+ /*
2
+ AngularJS v1.2.0
3
+ (c) 2010-2012 Google, Inc. http://angularjs.org
4
+ License: MIT
5
+ */
6
+ (function(A,s,B){'use strict';s.module("ngAnimate",["ng"]).config(["$provide","$animateProvider",function(N,D){var z=s.noop,k=s.forEach,X=D.$$selectors,T=1,f="$$ngAnimateState",E="ng-animate",g={running:!0};N.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope","$document",function(t,A,F,m,G,p,H){function B(a){if(a){var d=[],b={};a=a.substr(1).split(".");(F.transitions||F.animations)&&a.push("");for(var c=0;c<a.length;c++){var h=a[c],f=X[h];f&&!b[h]&&(d.push(A.get(f)),
7
+ b[h]=!0)}return d}}function n(a,d,b,c,h,g,m){function p(a){g();if(!0===a)u();else{if(a=b.data(f))a.done=u,b.data(f,a);s(v,"after",u)}}function s(c,h,g){var f=h+"End";k(c,function(k,t){var e=function(){a:{var e=h+"Complete",a=c[t];a[e]=!0;(a[f]||z)();for(a=0;a<c.length;a++)if(!c[a][e])break a;g()}};"before"!=h||"enter"!=a&&"move"!=a?k[h]?k[f]=n?k[h](b,d,e):k[h](b,e):e():e()})}function t(){m&&G(m,0,!1)}function u(){if(!u.hasBeenRun){u.hasBeenRun=!0;var a=b.data(f);a&&(n?q(b):(a.closeAnimationTimeout=
8
+ G(function(){q(b)},0,!1),b.data(f,a)));t()}}var r=(" "+((b.attr("class")||"")+" "+d)).replace(/\s+/g,".");c||(c=h?h.parent():b.parent());h=B(r);var n="addClass"==a||"removeClass"==a,r=b.data(f)||{};if(J(b,c)||0===h.length)g(),u();else{var v=[];r.running&&n&&r.structural||k(h,function(c){if(!c.allowCancel||c.allowCancel(b,a,d)){var h=c[a];"leave"==a?(c=h,h=null):c=c["before"+a.charAt(0).toUpperCase()+a.substr(1)];v.push({before:c,after:h})}});0===v.length?(g(),t()):(r.running&&(G.cancel(r.closeAnimationTimeout),
9
+ q(b),K(r.animations),(r.done||z)(!0)),"addClass"==a&&b.hasClass(d)||"removeClass"==a&&!b.hasClass(d)?(g(),t()):(b.addClass(E),b.data(f,{running:!0,structural:!n,animations:v,done:p}),s(v,"before",p)))}}function L(a){a=a[0];a.nodeType==T&&k(a.querySelectorAll("."+E),function(a){a=s.element(a);var b=a.data(f);b&&(K(b.animations),q(a))})}function K(a){k(a,function(d){a.beforeComplete||(d.beforeEnd||z)(!0);a.afterComplete||(d.afterEnd||z)(!0)})}function q(a){a[0]==m[0]?g.disabled||(g.running=!1,g.structural=
10
+ !1):(a.removeClass(E),a.removeData(f))}function J(a,d){if(g.disabled)return!0;if(a[0]==m[0])return g.disabled||g.running;do{if(0===d.length)break;var b=d[0]==m[0],c=b?g:d.data(f),c=c&&(!!c.disabled||!!c.running);if(b||c)return c;if(b)break}while(d=d.parent());return!0}m.data(f,g);p.$$postDigest(function(){g.running=!1});return{enter:function(a,d,b,c){this.enabled(!1,a);t.enter(a,d,b);p.$$postDigest(function(){n("enter","ng-enter",a,d,b,z,c)})},leave:function(a,d){L(a);this.enabled(!1,a);p.$$postDigest(function(){n("leave",
11
+ "ng-leave",a,null,null,function(){t.leave(a)},d)})},move:function(a,d,b,c){L(a);this.enabled(!1,a);t.move(a,d,b);p.$$postDigest(function(){n("move","ng-move",a,d,b,z,c)})},addClass:function(a,d,b){n("addClass",d,a,null,null,function(){t.addClass(a,d)},b)},removeClass:function(a,d,b){n("removeClass",d,a,null,null,function(){t.removeClass(a,d)},b)},enabled:function(a,d){switch(arguments.length){case 2:if(a)q(d);else{var b=d.data(f)||{};b.disabled=!0;d.data(f,b)}break;case 1:g.disabled=!a;break;default:a=
12
+ !g.disabled}return!!a}}}]);D.register("",["$window","$sniffer","$timeout",function(f,g,F){function m(e){Q.push(e);F.cancel(R);R=F(function(){k(Q,function(e){e()});Q=[];R=null;C={}},10,!1)}function G(e,a){var w=e.getAttribute("style")||"";e.setAttribute("style",(0<w.length?"; ":"")+a);return w}function p(e,a){var w=a?C[a]:null;if(!w){var b=0,d=0,c=0,l=0,g,n,m,p;k(e,function(e){if(e.nodeType==T){e=f.getComputedStyle(e)||{};m=e[h+D];b=Math.max(H(m),b);p=e[h+S];g=e[h+u];d=Math.max(H(g),d);n=e[I+u];l=
13
+ Math.max(H(n),l);var a=H(e[I+D]);0<a&&(a*=parseInt(e[I+r],10)||1);c=Math.max(a,c)}});w={total:0,transitionPropertyStyle:p,transitionDurationStyle:m,transitionDelayStyle:g,transitionDelay:d,transitionDuration:b,animationDelayStyle:n,animationDelay:l,animationDuration:c};a&&(C[a]=w)}return w}function H(e){var a=0;e=s.isString(e)?e.split(/\s*,\s*/):[];k(e,function(e){a=Math.max(parseFloat(e)||0,a)});return a}function E(e){var a=e.parent(),b=a.data(W);b||(a.data(W,++V),b=V);return b+"-"+e[0].className}
14
+ function n(e,a){var b=E(e),d=b+" "+a,c={},g=C[d]?++C[d].total:0;if(0<g){var l=a+"-stagger",c=b+" "+l;(b=!C[c])&&e.addClass(l);c=p(e,c);b&&e.removeClass(l)}e.addClass(a);d=p(e,d);l=Math.max(d.transitionDuration,d.animationDuration);if(0===l)return e.removeClass(a),!1;var b=e[0],f="";0<d.transitionDuration&&(e.addClass(U),f+=N+" ",b.style[h+S]="none");k(a.split(" "),function(a,e){f+=(0<e?" ":"")+a+"-active"});e.data(v,{className:a,activeClassName:f,maxDuration:l,classes:a+" "+f,timings:d,stagger:c,
15
+ ii:g});return!0}function L(a,b,w){function f(a){a.stopPropagation();a=a.originalEvent||a;var e=a.$manualTimeStamp||a.timeStamp||Date.now();Math.max(e-t,0)>=p&&a.elapsedTime>=n&&w()}var x=a.data(v);if(a.hasClass(b)&&x){var M=a[0],l=x.timings,k=x.stagger,n=x.maxDuration,m=x.activeClassName,p=1E3*Math.max(l.transitionDelay,l.animationDelay),t=Date.now(),s=P+" "+O,r,x=x.ii,u,y="";if(0<l.transitionDuration){M.style[h+S]="";var q=l.transitionPropertyStyle;-1==q.indexOf("all")&&(u=!0,y+=c+"transition-property: "+
16
+ q+", "+(g.msie?"-ms-zoom":"clip")+"; ",y+=c+"transition-duration: "+l.transitionDurationStyle+", "+l.transitionDuration+"s; ")}0<x&&(0<k.transitionDelay&&0===k.transitionDuration&&(q=l.transitionDelayStyle,u&&(q+=", "+l.transitionDelay+"s"),y+=c+"transition-delay: "+K(q,k.transitionDelay,x)+"; "),0<k.animationDelay&&0===k.animationDuration&&(y+=c+"animation-delay: "+K(l.animationDelayStyle,k.animationDelay,x)+"; "));0<y.length&&(r=G(M,y));a.on(s,f);a.addClass(m);return function(c){a.off(s,f);a.removeClass(m);
17
+ d(a,b);null!=r&&(0<r.length?M.setAttribute("style",r):M.removeAttribute("style"))}}w()}function K(a,b,d){var c="";k(a.split(","),function(a,e){c+=(0<e?",":"")+(d*b+parseInt(a,10))+"s"});return c}function q(a,b){if(n(a,b))return function(c){c&&d(a,b)}}function J(a,b,c){if(a.data(v))return L(a,b,c);d(a,b);c()}function a(a,b,c){var d=q(a,b);if(d){var f=d;m(function(){f=J(a,b,c)});return function(a){(f||z)(a)}}c()}function d(a,b){a.removeClass(b);a.removeClass(U);a.removeData(v)}function b(a,b){var c=
18
+ "";a=s.isArray(a)?a:a.split(/\s+/);k(a,function(a,e){a&&0<a.length&&(c+=(0<e?" ":"")+a+b)});return c}var c="",h,O,I,P;A.ontransitionend===B&&A.onwebkittransitionend!==B?(c="-webkit-",h="WebkitTransition",O="webkitTransitionEnd transitionend"):(h="transition",O="transitionend");A.onanimationend===B&&A.onwebkitanimationend!==B?(c="-webkit-",I="WebkitAnimation",P="webkitAnimationEnd animationend"):(I="animation",P="animationend");var D="Duration",S="Property",u="Delay",r="IterationCount",W="$$ngAnimateKey",
19
+ v="$$ngAnimateCSS3Data",U="ng-animate-start",N="ng-animate-active",C={},V=0,Q=[],R;return{allowCancel:function(a,c,d){var f=(a.data(v)||{}).classes;if(!f||0<=["enter","leave","move"].indexOf(c))return!0;var h=a.parent(),g=s.element(a[0].cloneNode());g.attr("style","position:absolute; top:-9999px; left:-9999px");g.removeAttr("id");g.html("");k(f.split(" "),function(a){g.removeClass(a)});g.addClass(b(d,"addClass"==c?"-add":"-remove"));h.append(g);a=p(g);g.remove();return 0<Math.max(a.transitionDuration,
20
+ a.animationDuration)},enter:function(b,c){return a(b,"ng-enter",c)},leave:function(b,c){return a(b,"ng-leave",c)},move:function(b,c){return a(b,"ng-move",c)},beforeAddClass:function(a,c,d){if(a=q(a,b(c,"-add")))return m(d),a;d()},addClass:function(a,c,d){return J(a,b(c,"-add"),d)},beforeRemoveClass:function(a,c,d){if(a=q(a,b(c,"-remove")))return m(d),a;d()},removeClass:function(a,c,d){return J(a,b(c,"-remove"),d)}}}])}])})(window,window.angular);
21
+ //# sourceMappingURL=angular-animate.min.js.map
@@ -0,0 +1,8 @@
1
+ {
2
+ "version":3,
3
+ "file":"angular-animate.min.js",
4
+ "lineCount":20,
5
+ "mappings":"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",
6
+ "sources":["angular-animate.js"],
7
+ "names":["window","angular","undefined","module","config","$provide","$animateProvider","noop","forEach","selectors","$$selectors","ELEMENT_NODE","NG_ANIMATE_STATE","NG_ANIMATE_CLASS_NAME","rootAnimateState","decorator","$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope","$document","lookup","name","matches","flagMap","classes","substr","split","transitions","animations","push","i","length","klass","selectorFactoryName","get","performAnimation","animationEvent","className","element","parentElement","afterElement","domOperation","doneCallback","onBeforeAnimationsComplete","cancelled","closeAnimation","data","done","invokeRegisteredAnimationFns","phase","allAnimationFnsComplete","endFnName","animation","index","animationPhaseCompleted","phaseCompletionFlag","currentAnimation","isClassBased","fireDoneCallbackAsync","hasBeenRun","cleanup","closeAnimationTimeout","animationLookup","replace","attr","parent","ngAnimateState","animationsDisabled","running","structural","allowCancel","afterFn","beforeFn","charAt","toUpperCase","cancel","cancelAnimations","hasClass","addClass","cancelChildAnimations","node","nodeType","querySelectorAll","beforeEnd","isCancelledFlag","afterEnd","disabled","removeClass","removeData","isRoot","state","result","$$postDigest","enter","enabled","leave","move","value","arguments","register","$window","afterReflow","callback","animationReflowQueue","animationTimer","fn","lookupCache","applyStyle","style","oldStyle","getAttribute","setAttribute","getElementAnimationDetails","cacheKey","transitionDuration","transitionDelay","animationDuration","animationDelay","transitionDelayStyle","animationDelayStyle","transitionDurationStyle","transitionPropertyStyle","elementStyles","getComputedStyle","TRANSITION_PROP","DURATION_KEY","Math","max","parseMaxTime","PROPERTY_KEY","DELAY_KEY","ANIMATION_PROP","aDuration","parseInt","ANIMATION_ITERATION_COUNT_KEY","str","maxValue","values","isString","parseFloat","getCacheKey","parentID","NG_ANIMATE_PARENT_KEY","parentCounter","animateSetup","eventCacheKey","stagger","ii","total","staggerClassName","staggerCacheKey","applyClasses","timings","maxDuration","activeClassName","NG_ANIMATE_FALLBACK_CLASS_NAME","NG_ANIMATE_FALLBACK_ACTIVE_CLASS_NAME","NG_ANIMATE_CSS_DATA_KEY","animateRun","activeAnimationComplete","onAnimationProgress","event","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","startTime","maxDelayTime","elapsedTime","css3AnimationEvents","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","formerStyle","applyFallbackStyle","propertyStyle","indexOf","CSS_PREFIX","msie","fallbackProperty","delayStyle","prepareStaggerDelay","on","onEnd","off","animateClose","removeAttribute","staggerDelay","val","animateBefore","animateAfter","afterAnimationComplete","animate","animationComplete","preReflowCancellation","suffixClasses","suffix","isArray","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","oldClasses","clone","cloneNode","removeAttr","html","append","remove","animationCompleted","beforeAddClass","cancellationMethod","beforeRemoveClass"]
8
+ }
@@ -1,14 +1,25 @@
1
1
  /**
2
- * @license AngularJS v1.1.5
2
+ * @license AngularJS v1.2.0
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
6
- (function(window, angular, undefined) {
7
- 'use strict';
6
+ (function(window, angular, undefined) {'use strict';
8
7
 
9
8
  /**
10
9
  * @ngdoc overview
11
10
  * @name ngCookies
11
+ * @description
12
+ *
13
+ * # ngCookies
14
+ *
15
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
16
+ *
17
+ * {@installModule cookies}
18
+ *
19
+ * <div doc-module-components="ngCookies"></div>
20
+ *
21
+ * See {@link ngCookies.$cookies `$cookies`} and
22
+ * {@link ngCookies.$cookieStore `$cookieStore`} for usage.
12
23
  */
13
24
 
14
25
 
@@ -24,6 +35,8 @@ angular.module('ngCookies', ['ng']).
24
35
  * Only a simple Object is exposed and by adding or removing properties to/from
25
36
  * this object, new cookies are created/deleted at the end of current $eval.
26
37
  *
38
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
39
+ *
27
40
  * @example
28
41
  <doc:example>
29
42
  <doc:source>
@@ -68,7 +81,8 @@ angular.module('ngCookies', ['ng']).
68
81
 
69
82
 
70
83
  /**
71
- * Pushes all the cookies from the service to the browser and verifies if all cookies were stored.
84
+ * Pushes all the cookies from the service to the browser and verifies if all cookies were
85
+ * stored.
72
86
  */
73
87
  function push() {
74
88
  var name,
@@ -128,6 +142,9 @@ angular.module('ngCookies', ['ng']).
128
142
  * Provides a key-value (string-object) storage, that is backed by session cookies.
129
143
  * Objects put or retrieved from this storage are automatically serialized or
130
144
  * deserialized by angular's toJson/fromJson.
145
+ *
146
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
147
+ *
131
148
  * @example
132
149
  */
133
150
  factory('$cookieStore', ['$cookies', function($cookies) {
@@ -0,0 +1,8 @@
1
+ /*
2
+ AngularJS v1.2.0
3
+ (c) 2010-2012 Google, Inc. http://angularjs.org
4
+ License: MIT
5
+ */
6
+ (function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&d.$apply())})();k=!0;d.$watch(function(){var a,e,d;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)(e=c[a],f.isString(e))?e!==g[a]&&(b.cookies(a,e),d=!0):f.isDefined(g[a])?c[a]=g[a]:delete c[a];if(d)for(a in e=b.cookies(),c)c[a]!==e[a]&&(m(e[a])?delete c[a]:c[a]=e[a])});
7
+ return c}]).factory("$cookieStore",["$cookies",function(d){return{get:function(b){return(b=d[b])?f.fromJson(b):b},put:function(b,c){d[b]=f.toJson(c)},remove:function(b){delete d[b]}}}])})(window,window.angular);
8
+ //# sourceMappingURL=angular-cookies.min.js.map
@@ -0,0 +1,8 @@
1
+ {
2
+ "version":3,
3
+ "file":"angular-cookies.min.js",
4
+ "lineCount":7,
5
+ "mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAoBtCD,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,CASAC,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,CAThB,CAEA;MAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA4HW,cA5HX,CA4H2B,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,CA5H3B,CApBsC,CAArC,CAAA,CAoME1B,MApMF,CAoMUA,MAAAC,QApMV;",
6
+ "sources":["angular-cookies.js"],
7
+ "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"]
8
+ }
@@ -0,0 +1,24 @@
1
+ /* Include this file in your html if you are using the CSP mode. */
2
+
3
+ @charset "UTF-8";
4
+
5
+ [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
6
+ .ng-cloak, .x-ng-cloak,
7
+ .ng-hide {
8
+ display: none !important;
9
+ }
10
+
11
+ ng\:form {
12
+ display: block;
13
+ }
14
+
15
+ /* The styles below ensure that the CSS transition will ALWAYS
16
+ * animate and close. A nasty bug occurs with CSS transitions where
17
+ * when the active class isn't set, or if the active class doesn't
18
+ * contain any styles to transition to, then, if ngAnimate is used,
19
+ * it will appear as if the webpage is broken due to the forever hanging
20
+ * animations. The clip (!ie) and zoom (ie) CSS properties are used
21
+ * since they trigger a transition without making the browser
22
+ * animate anything and they're both highly underused CSS properties */
23
+ .ng-animate-start { clip:rect(0, auto, auto, 0); -ms-zoom:1.0001; }
24
+ .ng-animate-active { clip:rect(-1px, auto, auto, 0); -ms-zoom:1; }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.1.5
2
+ * @license AngularJS v1.2.0
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -16,6 +16,8 @@
16
16
 
17
17
  function setupModuleLoader(window) {
18
18
 
19
+ var $injectorMinErr = minErr('$injector');
20
+
19
21
  function ensure(obj, name, factory) {
20
22
  return obj[name] || (obj[name] = factory());
21
23
  }
@@ -29,15 +31,19 @@ function setupModuleLoader(window) {
29
31
  * @name angular.module
30
32
  * @description
31
33
  *
32
- * The `angular.module` is a global place for creating and registering Angular modules. All
33
- * modules (angular core or 3rd party) that should be available to an application must be
34
+ * The `angular.module` is a global place for creating, registering and retrieving Angular
35
+ * modules.
36
+ * All modules (angular core or 3rd party) that should be available to an application must be
34
37
  * registered using this mechanism.
35
38
  *
39
+ * When passed two or more arguments, a new module is created. If passed only one argument, an
40
+ * existing module (the name passed as the first argument to `module`) is retrieved.
41
+ *
36
42
  *
37
43
  * # Module
38
44
  *
39
- * A module is a collocation of services, directives, filters, and configuration information. Module
40
- * is used to configure the {@link AUTO.$injector $injector}.
45
+ * A module is a collection of services, directives, filters, and configuration information.
46
+ * `angular.module` is used to configure the {@link AUTO.$injector $injector}.
41
47
  *
42
48
  * <pre>
43
49
  * // Create a new module
@@ -47,8 +53,7 @@ function setupModuleLoader(window) {
47
53
  * myModule.value('appName', 'MyCoolApp');
48
54
  *
49
55
  * // configure existing services inside initialization blocks.
50
- * myModule.config(function($locationProvider) {
51
- 'use strict';
56
+ * myModule.config(function($locationProvider) {'use strict';
52
57
  * // Configure existing providers
53
58
  * $locationProvider.hashPrefix('!');
54
59
  * });
@@ -65,19 +70,22 @@ function setupModuleLoader(window) {
65
70
  * {@link angular.bootstrap} to simplify this process for you.
66
71
  *
67
72
  * @param {!string} name The name of the module to create or retrieve.
68
- * @param {Array.<string>=} requires If specified then new module is being created. If unspecified then the
69
- * the module is being retrieved for further configuration.
73
+ * @param {Array.<string>=} requires If specified then new module is being created. If
74
+ * unspecified then the the module is being retrieved for further configuration.
70
75
  * @param {Function} configFn Optional configuration function for the module. Same as
71
- * {@link angular.Module#config Module#config()}.
76
+ * {@link angular.Module#methods_config Module#config()}.
72
77
  * @returns {module} new module with the {@link angular.Module} api.
73
78
  */
74
79
  return function module(name, requires, configFn) {
80
+ assertNotHasOwnProperty(name, 'module');
75
81
  if (requires && modules.hasOwnProperty(name)) {
76
82
  modules[name] = null;
77
83
  }
78
84
  return ensure(modules, name, function() {
79
85
  if (!requires) {
80
- throw Error('No module: ' + name);
86
+ throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
87
+ "the module name or forgot to load it. If registering a module ensure that you " +
88
+ "specify the dependencies as the second argument.", name);
81
89
  }
82
90
 
83
91
  /** @type {!Array.<Array.<*>>} */
@@ -100,7 +108,8 @@ function setupModuleLoader(window) {
100
108
  * @propertyOf angular.Module
101
109
  * @returns {Array.<string>} List of module names which must be loaded before this module.
102
110
  * @description
103
- * Holds the list of modules which the injector will load before the current module is loaded.
111
+ * Holds the list of modules which the injector will load before the current module is
112
+ * loaded.
104
113
  */
105
114
  requires: requires,
106
115
 
@@ -119,7 +128,8 @@ function setupModuleLoader(window) {
119
128
  * @name angular.Module#provider
120
129
  * @methodOf angular.Module
121
130
  * @param {string} name service name
122
- * @param {Function} providerType Construction function for creating new instance of the service.
131
+ * @param {Function} providerType Construction function for creating new instance of the
132
+ * service.
123
133
  * @description
124
134
  * See {@link AUTO.$provide#provider $provide.provider()}.
125
135
  */
@@ -175,27 +185,34 @@ function setupModuleLoader(window) {
175
185
  * @name angular.Module#animation
176
186
  * @methodOf angular.Module
177
187
  * @param {string} name animation name
178
- * @param {Function} animationFactory Factory function for creating new instance of an animation.
188
+ * @param {Function} animationFactory Factory function for creating new instance of an
189
+ * animation.
179
190
  * @description
180
191
  *
181
- * Defines an animation hook that can be later used with {@link ng.directive:ngAnimate ngAnimate}
182
- * alongside {@link ng.directive:ngAnimate#Description common ng directives} as well as custom directives.
192
+ * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
193
+ *
194
+ *
195
+ * Defines an animation hook that can be later used with
196
+ * {@link ngAnimate.$animate $animate} service and directives that use this service.
197
+ *
183
198
  * <pre>
184
- * module.animation('animation-name', function($inject1, $inject2) {
199
+ * module.animation('.animation-name', function($inject1, $inject2) {
185
200
  * return {
186
- * //this gets called in preparation to setup an animation
187
- * setup : function(element) { ... },
188
- *
189
- * //this gets called once the animation is run
190
- * start : function(element, done, memo) { ... }
201
+ * eventName : function(element, done) {
202
+ * //code to run the animation
203
+ * //once complete, then run done()
204
+ * return function cancellationFunction(element) {
205
+ * //code to cancel the animation
206
+ * }
207
+ * }
191
208
  * }
192
209
  * })
193
210
  * </pre>
194
211
  *
195
- * See {@link ng.$animationProvider#register $animationProvider.register()} and
196
- * {@link ng.directive:ngAnimate ngAnimate} for more information.
212
+ * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and
213
+ * {@link ngAnimate ngAnimate module} for more information.
197
214
  */
198
- animation: invokeLater('$animationProvider', 'register'),
215
+ animation: invokeLater('$animateProvider', 'register'),
199
216
 
200
217
  /**
201
218
  * @ngdoc method
@@ -212,7 +229,8 @@ function setupModuleLoader(window) {
212
229
  * @ngdoc method
213
230
  * @name angular.Module#controller
214
231
  * @methodOf angular.Module
215
- * @param {string} name Controller name.
232
+ * @param {string|Object} name Controller name, or an object map of controllers where the
233
+ * keys are the names and the values are the constructors.
216
234
  * @param {Function} constructor Controller constructor function.
217
235
  * @description
218
236
  * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
@@ -223,11 +241,12 @@ function setupModuleLoader(window) {
223
241
  * @ngdoc method
224
242
  * @name angular.Module#directive
225
243
  * @methodOf angular.Module
226
- * @param {string} name directive name
244
+ * @param {string|Object} name Directive name, or an object map of directives where the
245
+ * keys are the names and the values are the factories.
227
246
  * @param {Function} directiveFactory Factory function for creating new instance of
228
247
  * directives.
229
248
  * @description
230
- * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
249
+ * See {@link ng.$compileProvider#methods_directive $compileProvider.directive()}.
231
250
  */
232
251
  directive: invokeLater('$compileProvider', 'directive'),
233
252
 
@@ -274,7 +293,7 @@ function setupModuleLoader(window) {
274
293
  return function() {
275
294
  invokeQueue[insertMethod || 'push']([provider, method, arguments]);
276
295
  return moduleInstance;
277
- }
296
+ };
278
297
  }
279
298
  });
280
299
  };
@@ -0,0 +1,8 @@
1
+ /*
2
+ AngularJS v1.2.0
3
+ (c) 2010-2012 Google, Inc. http://angularjs.org
4
+ License: MIT
5
+ */
6
+ (function(k){'use strict';function d(c,b,e){return c[b]||(c[b]=e())}var l=minErr("$injector");return d(d(k,"angular",Object),"module",function(){var c={};return function(b,e,f){assertNotHasOwnProperty(b,"module");e&&c.hasOwnProperty(b)&&(c[b]=null);return d(c,b,function(){function a(a,b,d){return function(){c[d||"push"]([a,b,arguments]);return g}}if(!e)throw l("nomod",b);var c=[],d=[],h=a("$injector","invoke"),g={_invokeQueue:c,_runBlocks:d,requires:e,name:b,provider:a("$provide","provider"),factory:a("$provide",
7
+ "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){d.push(a);return this}};f&&h(f);return g})}})})(window);
8
+ //# sourceMappingURL=angular-loader.min.js.map
@@ -0,0 +1,8 @@
1
+ {
2
+ "version":3,
3
+ "file":"angular-loader.min.js",
4
+ "lineCount":7,
5
+ "mappings":"A;;;;;aAgBAA,SAA0B,CAACC,CAAD,CAAS,CAIjCC,QAASA,EAAM,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAqB,CAClC,MAAOF,EAAA,CAAIC,CAAJ,CAAP,GAAqBD,CAAA,CAAIC,CAAJ,CAArB,CAAiCC,CAAA,EAAjC,CADkC,CAFpC,IAAIC,EAAkBC,MAAA,CAAO,WAAP,CAMtB,OAAOL,EAAA,CAAOA,CAAA,CAAOD,CAAP,CAAe,SAAf,CAA0BO,MAA1B,CAAP,CAA0C,QAA1C,CAAoD,QAAQ,EAAG,CAEpE,IAAIC,EAAU,EAoDd,OAAOC,SAAe,CAACN,CAAD,CAAOO,CAAP,CAAiBC,CAAjB,CAA2B,CAC/CC,uBAAA,CAAwBT,CAAxB,CAA8B,QAA9B,CACIO,EAAJ,EAAgBF,CAAAK,eAAA,CAAuBV,CAAvB,CAAhB,GACEK,CAAA,CAAQL,CAAR,CADF,CACkB,IADlB,CAGA,OAAOF,EAAA,CAAOO,CAAP,CAAgBL,CAAhB,CAAsB,QAAQ,EAAG,CAgNtCW,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,CA/MrD,GAAI,CAACV,CAAL,CACE,KAAML,EAAA,CAAgB,OAAhB,CAEiDF,CAFjD,CAAN,CAMF,IAAIe,EAAc,EAAlB,CAGIG,EAAY,EAHhB,CAKIC,EAASR,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CALb,CAQIM,EAAiB,cAELF,CAFK,YAGPG,CAHO,UAcTX,CAdS,MAuBbP,CAvBa,UAoCTW,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CApCS,SA+CVA,CAAA,CAAY,UAAZ;AAAwB,SAAxB,CA/CU,SA0DVA,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA1DU,OAqEZA,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CArEY,UAiFTA,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CAjFS,WAmHRA,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CAnHQ,QA8HXA,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CA9HW,YA0IPA,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CA1IO,WAuJRA,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CAvJQ,QAkKXQ,CAlKW,KA8KdC,QAAQ,CAACC,CAAD,CAAQ,CACnBH,CAAAI,KAAA,CAAeD,CAAf,CACA,OAAO,KAFY,CA9KF,CAoLjBb,EAAJ,EACEW,CAAA,CAAOX,CAAP,CAGF,OAAQS,EAxM8B,CAAjC,CALwC,CAtDmB,CAA/D,CAR0B,CAAnCrB,CAAA,CA+REC,MA/RF;",
6
+ "sources":["angular-loader.js"],
7
+ "names":["setupModuleLoader","window","ensure","obj","name","factory","$injectorMinErr","minErr","Object","modules","module","requires","configFn","assertNotHasOwnProperty","hasOwnProperty","invokeLater","provider","method","insertMethod","invokeQueue","arguments","moduleInstance","runBlocks","config","run","block","push"]
8
+ }
@@ -1,5 +1,7 @@
1
+ 'use strict';
2
+
1
3
  /**
2
- * @license AngularJS v1.1.5
4
+ * @license AngularJS v1.2.0
3
5
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
6
  * License: MIT
5
7
  *
@@ -29,7 +31,7 @@ angular.mock = {};
29
31
  * that there are several helper methods available which can be used in tests.
30
32
  */
31
33
  angular.mock.$BrowserProvider = function() {
32
- this.$get = function(){
34
+ this.$get = function() {
33
35
  return new angular.mock.$Browser();
34
36
  };
35
37
  };
@@ -75,6 +77,13 @@ angular.mock.$Browser = function() {
75
77
  };
76
78
 
77
79
 
80
+ /**
81
+ * @name ngMock.$browser#defer.now
82
+ * @propertyOf ngMock.$browser
83
+ *
84
+ * @description
85
+ * Current milliseconds mock time.
86
+ */
78
87
  self.defer.now = 0;
79
88
 
80
89
 
@@ -110,7 +119,7 @@ angular.mock.$Browser = function() {
110
119
  if (self.deferredFns.length) {
111
120
  self.defer.now = self.deferredFns[self.deferredFns.length-1].time;
112
121
  } else {
113
- throw Error('No deferred tasks to be flushed');
122
+ throw new Error('No deferred tasks to be flushed');
114
123
  }
115
124
  }
116
125
 
@@ -118,13 +127,6 @@ angular.mock.$Browser = function() {
118
127
  self.deferredFns.shift().fn();
119
128
  }
120
129
  };
121
- /**
122
- * @name ngMock.$browser#defer.now
123
- * @propertyOf ngMock.$browser
124
- *
125
- * @description
126
- * Current milliseconds mock time.
127
- */
128
130
 
129
131
  self.$$baseHref = '';
130
132
  self.baseHref = function() {
@@ -162,7 +164,7 @@ angular.mock.$Browser.prototype = {
162
164
 
163
165
  cookies: function(name, value) {
164
166
  if (name) {
165
- if (value == undefined) {
167
+ if (angular.isUndefined(value)) {
166
168
  delete this.cookieHash[name];
167
169
  } else {
168
170
  if (angular.isString(value) && //strings only
@@ -190,8 +192,8 @@ angular.mock.$Browser.prototype = {
190
192
  * @name ngMock.$exceptionHandlerProvider
191
193
  *
192
194
  * @description
193
- * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors passed
194
- * into the `$exceptionHandler`.
195
+ * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors
196
+ * passed into the `$exceptionHandler`.
195
197
  */
196
198
 
197
199
  /**
@@ -244,10 +246,10 @@ angular.mock.$ExceptionHandlerProvider = function() {
244
246
  * - `rethrow`: If any errors are passed into the handler in tests, it typically
245
247
  * means that there is a bug in the application or test, so this mock will
246
248
  * make these tests fail.
247
- * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` mode stores an
248
- * array of errors in `$exceptionHandler.errors`, to allow later assertion of them.
249
- * See {@link ngMock.$log#assertEmpty assertEmpty()} and
250
- * {@link ngMock.$log#reset reset()}
249
+ * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
250
+ * mode stores an array of errors in `$exceptionHandler.errors`, to allow later
251
+ * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
252
+ * {@link ngMock.$log#reset reset()}
251
253
  */
252
254
  this.mode = function(mode) {
253
255
  switch(mode) {
@@ -270,7 +272,7 @@ angular.mock.$ExceptionHandlerProvider = function() {
270
272
  handler.errors = errors;
271
273
  break;
272
274
  default:
273
- throw Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
275
+ throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
274
276
  }
275
277
  };
276
278
 
@@ -293,18 +295,32 @@ angular.mock.$ExceptionHandlerProvider = function() {
293
295
  *
294
296
  */
295
297
  angular.mock.$LogProvider = function() {
298
+ var debug = true;
296
299
 
297
300
  function concat(array1, array2, index) {
298
301
  return array1.concat(Array.prototype.slice.call(array2, index));
299
302
  }
300
303
 
304
+ this.debugEnabled = function(flag) {
305
+ if (angular.isDefined(flag)) {
306
+ debug = flag;
307
+ return this;
308
+ } else {
309
+ return debug;
310
+ }
311
+ };
301
312
 
302
313
  this.$get = function () {
303
314
  var $log = {
304
315
  log: function() { $log.log.logs.push(concat([], arguments, 0)); },
305
316
  warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },
306
317
  info: function() { $log.info.logs.push(concat([], arguments, 0)); },
307
- error: function() { $log.error.logs.push(concat([], arguments, 0)); }
318
+ error: function() { $log.error.logs.push(concat([], arguments, 0)); },
319
+ debug: function() {
320
+ if (debug) {
321
+ $log.debug.logs.push(concat([], arguments, 0));
322
+ }
323
+ }
308
324
  };
309
325
 
310
326
  /**
@@ -333,34 +349,34 @@ angular.mock.$LogProvider = function() {
333
349
  $log.log.logs = [];
334
350
  /**
335
351
  * @ngdoc property
336
- * @name ngMock.$log#warn.logs
352
+ * @name ngMock.$log#info.logs
337
353
  * @propertyOf ngMock.$log
338
354
  *
339
355
  * @description
340
- * Array of messages logged using {@link ngMock.$log#warn}.
356
+ * Array of messages logged using {@link ngMock.$log#info}.
341
357
  *
342
358
  * @example
343
359
  * <pre>
344
- * $log.warn('Some Warning');
345
- * var first = $log.warn.logs.unshift();
360
+ * $log.info('Some Info');
361
+ * var first = $log.info.logs.unshift();
346
362
  * </pre>
347
363
  */
348
- $log.warn.logs = [];
364
+ $log.info.logs = [];
349
365
  /**
350
366
  * @ngdoc property
351
- * @name ngMock.$log#info.logs
367
+ * @name ngMock.$log#warn.logs
352
368
  * @propertyOf ngMock.$log
353
369
  *
354
370
  * @description
355
- * Array of messages logged using {@link ngMock.$log#info}.
371
+ * Array of messages logged using {@link ngMock.$log#warn}.
356
372
  *
357
373
  * @example
358
374
  * <pre>
359
- * $log.info('Some Info');
360
- * var first = $log.info.logs.unshift();
375
+ * $log.warn('Some Warning');
376
+ * var first = $log.warn.logs.unshift();
361
377
  * </pre>
362
378
  */
363
- $log.info.logs = [];
379
+ $log.warn.logs = [];
364
380
  /**
365
381
  * @ngdoc property
366
382
  * @name ngMock.$log#error.logs
@@ -376,6 +392,21 @@ angular.mock.$LogProvider = function() {
376
392
  * </pre>
377
393
  */
378
394
  $log.error.logs = [];
395
+ /**
396
+ * @ngdoc property
397
+ * @name ngMock.$log#debug.logs
398
+ * @propertyOf ngMock.$log
399
+ *
400
+ * @description
401
+ * Array of messages logged using {@link ngMock.$log#debug}.
402
+ *
403
+ * @example
404
+ * <pre>
405
+ * $log.debug('Some Error');
406
+ * var first = $log.debug.logs.unshift();
407
+ * </pre>
408
+ */
409
+ $log.debug.logs = [];
379
410
  };
380
411
 
381
412
  /**
@@ -384,20 +415,22 @@ angular.mock.$LogProvider = function() {
384
415
  * @methodOf ngMock.$log
385
416
  *
386
417
  * @description
387
- * Assert that the all of the logging methods have no logged messages. If messages present, an exception is thrown.
418
+ * Assert that the all of the logging methods have no logged messages. If messages present, an
419
+ * exception is thrown.
388
420
  */
389
421
  $log.assertEmpty = function() {
390
422
  var errors = [];
391
- angular.forEach(['error', 'warn', 'info', 'log'], function(logLevel) {
423
+ angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) {
392
424
  angular.forEach($log[logLevel].logs, function(log) {
393
425
  angular.forEach(log, function (logItem) {
394
- errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + (logItem.stack || ''));
426
+ errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' +
427
+ (logItem.stack || ''));
395
428
  });
396
429
  });
397
430
  });
398
431
  if (errors.length) {
399
- errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or an expected " +
400
- "log message was not checked and removed:");
432
+ errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or "+
433
+ "an expected log message was not checked and removed:");
401
434
  errors.push('');
402
435
  throw new Error(errors.join('\n---------\n'));
403
436
  }
@@ -409,10 +442,128 @@ angular.mock.$LogProvider = function() {
409
442
  };
410
443
 
411
444
 
445
+ /**
446
+ * @ngdoc service
447
+ * @name ngMock.$interval
448
+ *
449
+ * @description
450
+ * Mock implementation of the $interval service.
451
+ *
452
+ * Use {@link ngMock.$interval#methods_flush `$interval.flush(millis)`} to
453
+ * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
454
+ * time.
455
+ *
456
+ * @param {function()} fn A function that should be called repeatedly.
457
+ * @param {number} delay Number of milliseconds between each function call.
458
+ * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
459
+ * indefinitely.
460
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
461
+ * will invoke `fn` within the {@link ng.$rootScope.Scope#methods_$apply $apply} block.
462
+ * @returns {promise} A promise which will be notified on each iteration.
463
+ */
464
+ angular.mock.$IntervalProvider = function() {
465
+ this.$get = ['$rootScope', '$q',
466
+ function($rootScope, $q) {
467
+ var repeatFns = [],
468
+ nextRepeatId = 0,
469
+ now = 0;
470
+
471
+ var $interval = function(fn, delay, count, invokeApply) {
472
+ var deferred = $q.defer(),
473
+ promise = deferred.promise,
474
+ iteration = 0,
475
+ skipApply = (angular.isDefined(invokeApply) && !invokeApply);
476
+
477
+ count = (angular.isDefined(count)) ? count : 0,
478
+ promise.then(null, null, fn);
479
+
480
+ promise.$$intervalId = nextRepeatId;
481
+
482
+ function tick() {
483
+ deferred.notify(iteration++);
484
+
485
+ if (count > 0 && iteration >= count) {
486
+ var fnIndex;
487
+ deferred.resolve(iteration);
488
+
489
+ angular.forEach(repeatFns, function(fn, index) {
490
+ if (fn.id === promise.$$intervalId) fnIndex = index;
491
+ });
492
+
493
+ if (fnIndex !== undefined) {
494
+ repeatFns.splice(fnIndex, 1);
495
+ }
496
+ }
497
+
498
+ if (!skipApply) $rootScope.$apply();
499
+ }
500
+
501
+ repeatFns.push({
502
+ nextTime:(now + delay),
503
+ delay: delay,
504
+ fn: tick,
505
+ id: nextRepeatId,
506
+ deferred: deferred
507
+ });
508
+ repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;});
509
+
510
+ nextRepeatId++;
511
+ return promise;
512
+ };
513
+
514
+ $interval.cancel = function(promise) {
515
+ var fnIndex;
516
+
517
+ angular.forEach(repeatFns, function(fn, index) {
518
+ if (fn.id === promise.$$intervalId) fnIndex = index;
519
+ });
520
+
521
+ if (fnIndex !== undefined) {
522
+ repeatFns[fnIndex].deferred.reject('canceled');
523
+ repeatFns.splice(fnIndex, 1);
524
+ return true;
525
+ }
526
+
527
+ return false;
528
+ };
529
+
530
+ /**
531
+ * @ngdoc method
532
+ * @name ngMock.$interval#flush
533
+ * @methodOf ngMock.$interval
534
+ * @description
535
+ *
536
+ * Runs interval tasks scheduled to be run in the next `millis` milliseconds.
537
+ *
538
+ * @param {number=} millis maximum timeout amount to flush up until.
539
+ *
540
+ * @return {number} The amount of time moved forward.
541
+ */
542
+ $interval.flush = function(millis) {
543
+ now += millis;
544
+ while (repeatFns.length && repeatFns[0].nextTime <= now) {
545
+ var task = repeatFns[0];
546
+ task.fn();
547
+ task.nextTime += task.delay;
548
+ repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;});
549
+ }
550
+ return millis;
551
+ };
552
+
553
+ return $interval;
554
+ }];
555
+ };
556
+
557
+
558
+ /* jshint -W101 */
559
+ /* The R_ISO8061_STR regex is never going to fit into the 100 char limit!
560
+ * This directive should go inside the anonymous function but a bug in JSHint means that it would
561
+ * not be enacted early enough to prevent the warning.
562
+ */
412
563
  (function() {
413
564
  var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
414
565
 
415
- function jsonStringToDate(string){
566
+ function jsonStringToDate(string) {
416
567
  var match;
417
568
  if (match = string.match(R_ISO8061_STR)) {
418
569
  var date = new Date(0),
@@ -423,7 +574,10 @@ angular.mock.$LogProvider = function() {
423
574
  tzMin = int(match[9] + match[11]);
424
575
  }
425
576
  date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3]));
426
- date.setUTCHours(int(match[4]||0) - tzHour, int(match[5]||0) - tzMin, int(match[6]||0), int(match[7]||0));
577
+ date.setUTCHours(int(match[4]||0) - tzHour,
578
+ int(match[5]||0) - tzMin,
579
+ int(match[6]||0),
580
+ int(match[7]||0));
427
581
  return date;
428
582
  }
429
583
  return string;
@@ -586,8 +740,8 @@ angular.mock.$LogProvider = function() {
586
740
  padNumber(self.origDate.getUTCHours(), 2) + ':' +
587
741
  padNumber(self.origDate.getUTCMinutes(), 2) + ':' +
588
742
  padNumber(self.origDate.getUTCSeconds(), 2) + '.' +
589
- padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'
590
- }
743
+ padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z';
744
+ };
591
745
  }
592
746
 
593
747
  //hide all methods not implemented in this mock that the Date prototype exposes
@@ -600,7 +754,7 @@ angular.mock.$LogProvider = function() {
600
754
 
601
755
  angular.forEach(unimplementedMethods, function(methodName) {
602
756
  self[methodName] = function() {
603
- throw Error("Method '" + methodName + "' is not implemented in the TzDate mock");
757
+ throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock");
604
758
  };
605
759
  });
606
760
 
@@ -610,60 +764,50 @@ angular.mock.$LogProvider = function() {
610
764
  //make "tzDateInstance instanceof Date" return true
611
765
  angular.mock.TzDate.prototype = Date.prototype;
612
766
  })();
767
+ /* jshint +W101 */
613
768
 
614
- /**
615
- * @ngdoc function
616
- * @name angular.mock.createMockWindow
617
- * @description
618
- *
619
- * This function creates a mock window object useful for controlling access ot setTimeout, but mocking out
620
- * sufficient window's properties to allow Angular to execute.
621
- *
622
- * @example
623
- *
624
- * <pre>
625
- beforeEach(module(function($provide) {
626
- $provide.value('$window', window = angular.mock.createMockWindow());
627
- }));
628
-
629
- it('should do something', inject(function($window) {
630
- var val = null;
631
- $window.setTimeout(function() { val = 123; }, 10);
632
- expect(val).toEqual(null);
633
- window.setTimeout.expect(10).process();
634
- expect(val).toEqual(123);
635
- });
636
- * </pre>
637
- *
638
- */
639
- angular.mock.createMockWindow = function() {
640
- var mockWindow = {};
641
- var setTimeoutQueue = [];
642
-
643
- mockWindow.document = window.document;
644
- mockWindow.getComputedStyle = angular.bind(window, window.getComputedStyle);
645
- mockWindow.scrollTo = angular.bind(window, window.scrollTo);
646
- mockWindow.navigator = window.navigator;
647
- mockWindow.setTimeout = function(fn, delay) {
648
- setTimeoutQueue.push({fn: fn, delay: delay});
649
- };
650
- mockWindow.setTimeout.queue = setTimeoutQueue;
651
- mockWindow.setTimeout.expect = function(delay) {
652
- if (setTimeoutQueue.length > 0) {
653
- return {
654
- process: function() {
655
- var tick = setTimeoutQueue.shift();
656
- expect(tick.delay).toEqual(delay);
769
+ angular.mock.animate = angular.module('mock.animate', ['ng'])
770
+
771
+ .config(['$provide', function($provide) {
772
+
773
+ $provide.decorator('$animate', function($delegate) {
774
+ var animate = {
775
+ queue : [],
776
+ enabled : $delegate.enabled,
777
+ flushNext : function(name) {
778
+ var tick = animate.queue.shift();
779
+
780
+ if (!tick) throw new Error('No animation to be flushed');
781
+ if(tick.method !== name) {
782
+ throw new Error('The next animation is not "' + name +
783
+ '", but is "' + tick.method + '"');
784
+ }
657
785
  tick.fn();
786
+ return tick;
658
787
  }
659
788
  };
660
- } else {
661
- expect('SetTimoutQueue empty. Expecting delay of ').toEqual(delay);
662
- }
663
- };
664
789
 
665
- return mockWindow;
666
- };
790
+ angular.forEach(['enter','leave','move','addClass','removeClass'], function(method) {
791
+ animate[method] = function() {
792
+ var params = arguments;
793
+ animate.queue.push({
794
+ method : method,
795
+ params : params,
796
+ element : angular.isElement(params[0]) && params[0],
797
+ parent : angular.isElement(params[1]) && params[1],
798
+ after : angular.isElement(params[2]) && params[2],
799
+ fn : function() {
800
+ $delegate[method].apply($delegate, params);
801
+ }
802
+ });
803
+ };
804
+ });
805
+
806
+ return animate;
807
+ });
808
+
809
+ }]);
810
+
667
811
 
668
812
  /**
669
813
  * @ngdoc function
@@ -672,9 +816,11 @@ angular.mock.createMockWindow = function() {
672
816
  *
673
817
  * *NOTE*: this is not an injectable instance, just a globally available function.
674
818
  *
675
- * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for debugging.
819
+ * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for
820
+ * debugging.
676
821
  *
677
- * This method is also available on window, where it can be used to display objects on debug console.
822
+ * This method is also available on window, where it can be used to display objects on debug
823
+ * console.
678
824
  *
679
825
  * @param {*} object - any object to turn into string.
680
826
  * @return {string} a serialized string of the argument
@@ -704,6 +850,8 @@ angular.mock.dump = function(object) {
704
850
  } else if (object instanceof Error) {
705
851
  out = object.stack || ('' + object.name + ': ' + object.message);
706
852
  } else {
853
+ // TODO(i): this prevents methods being logged,
854
+ // we should have a better way to serialize objects
707
855
  out = angular.toJson(object, true);
708
856
  }
709
857
  } else {
@@ -717,7 +865,7 @@ angular.mock.dump = function(object) {
717
865
  offset = offset || ' ';
718
866
  var log = [offset + 'Scope(' + scope.$id + '): {'];
719
867
  for ( var key in scope ) {
720
- if (scope.hasOwnProperty(key) && !key.match(/^(\$|this)/)) {
868
+ if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) {
721
869
  log.push(' ' + key + ': ' + angular.toJson(scope[key]));
722
870
  }
723
871
  }
@@ -831,75 +979,100 @@ angular.mock.dump = function(object) {
831
979
  *
832
980
  *
833
981
  * # Unit testing with mock $httpBackend
982
+ * The following code shows how to setup and use the mock backend in unit testing a controller.
983
+ * First we create the controller under test
834
984
  *
835
- * <pre>
836
- // controller
837
- function MyController($scope, $http) {
838
- $http.get('/auth.py').success(function(data) {
839
- $scope.user = data;
840
- });
841
-
842
- this.saveMessage = function(message) {
843
- $scope.status = 'Saving...';
844
- $http.post('/add-msg.py', message).success(function(response) {
845
- $scope.status = '';
846
- }).error(function() {
847
- $scope.status = 'ERROR!';
848
- });
849
- };
850
- }
985
+ <pre>
986
+ // The controller code
987
+ function MyController($scope, $http) {
988
+ var authToken;
851
989
 
852
- // testing controller
853
- var $httpBackend;
990
+ $http.get('/auth.py').success(function(data, status, headers) {
991
+ authToken = headers('A-Token');
992
+ $scope.user = data;
993
+ });
854
994
 
855
- beforeEach(inject(function($injector) {
856
- $httpBackend = $injector.get('$httpBackend');
995
+ $scope.saveMessage = function(message) {
996
+ var headers = { 'Authorization': authToken };
997
+ $scope.status = 'Saving...';
857
998
 
858
- // backend definition common for all tests
859
- $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'});
860
- }));
999
+ $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
1000
+ $scope.status = '';
1001
+ }).error(function() {
1002
+ $scope.status = 'ERROR!';
1003
+ });
1004
+ };
1005
+ }
1006
+ </pre>
1007
+ *
1008
+ * Now we setup the mock backend and create the test specs.
1009
+ *
1010
+ <pre>
1011
+ // testing controller
1012
+ describe('MyController', function() {
1013
+ var $httpBackend, $rootScope, createController;
861
1014
 
1015
+ beforeEach(inject(function($injector) {
1016
+ // Set up the mock http service responses
1017
+ $httpBackend = $injector.get('$httpBackend');
1018
+ // backend definition common for all tests
1019
+ $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'});
862
1020
 
863
- afterEach(function() {
864
- $httpBackend.verifyNoOutstandingExpectation();
865
- $httpBackend.verifyNoOutstandingRequest();
866
- });
1021
+ // Get hold of a scope (i.e. the root scope)
1022
+ $rootScope = $injector.get('$rootScope');
1023
+ // The $controller service is used to create instances of controllers
1024
+ var $controller = $injector.get('$controller');
867
1025
 
1026
+ createController = function() {
1027
+ return $controller('MyController', {'$scope' : $rootScope });
1028
+ };
1029
+ }));
868
1030
 
869
- it('should fetch authentication token', function() {
870
- $httpBackend.expectGET('/auth.py');
871
- var controller = scope.$new(MyController);
872
- $httpBackend.flush();
873
- });
874
1031
 
1032
+ afterEach(function() {
1033
+ $httpBackend.verifyNoOutstandingExpectation();
1034
+ $httpBackend.verifyNoOutstandingRequest();
1035
+ });
875
1036
 
876
- it('should send msg to server', function() {
877
- // now you don’t care about the authentication, but
878
- // the controller will still send the request and
879
- // $httpBackend will respond without you having to
880
- // specify the expectation and response for this request
881
- $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
882
1037
 
883
- var controller = scope.$new(MyController);
884
- $httpBackend.flush();
885
- controller.saveMessage('message content');
886
- expect(controller.status).toBe('Saving...');
887
- $httpBackend.flush();
888
- expect(controller.status).toBe('');
889
- });
1038
+ it('should fetch authentication token', function() {
1039
+ $httpBackend.expectGET('/auth.py');
1040
+ var controller = createController();
1041
+ $httpBackend.flush();
1042
+ });
1043
+
890
1044
 
1045
+ it('should send msg to server', function() {
1046
+ var controller = createController();
1047
+ $httpBackend.flush();
891
1048
 
892
- it('should send auth header', function() {
893
- $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
894
- // check if the header was send, if it wasn't the expectation won't
895
- // match the request and the test will fail
896
- return headers['Authorization'] == 'xxx';
897
- }).respond(201, '');
1049
+ // now you don’t care about the authentication, but
1050
+ // the controller will still send the request and
1051
+ // $httpBackend will respond without you having to
1052
+ // specify the expectation and response for this request
898
1053
 
899
- var controller = scope.$new(MyController);
900
- controller.saveMessage('whatever');
901
- $httpBackend.flush();
902
- });
1054
+ $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
1055
+ $rootScope.saveMessage('message content');
1056
+ expect($rootScope.status).toBe('Saving...');
1057
+ $httpBackend.flush();
1058
+ expect($rootScope.status).toBe('');
1059
+ });
1060
+
1061
+
1062
+ it('should send auth header', function() {
1063
+ var controller = createController();
1064
+ $httpBackend.flush();
1065
+
1066
+ $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
1067
+ // check if the header was send, if it wasn't the expectation won't
1068
+ // match the request and the test will fail
1069
+ return headers['Authorization'] == 'xxx';
1070
+ }).respond(201, '');
1071
+
1072
+ $rootScope.saveMessage('whatever');
1073
+ $httpBackend.flush();
1074
+ });
1075
+ });
903
1076
  </pre>
904
1077
  */
905
1078
  angular.mock.$HttpBackendProvider = function() {
@@ -937,7 +1110,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
937
1110
  }
938
1111
 
939
1112
  // TODO(vojta): change params to: method, url, data, headers, callback
940
- function $httpBackend(method, url, data, callback, headers, timeout) {
1113
+ function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) {
941
1114
  var xhr = new MockXhr(),
942
1115
  expectation = expectations[0],
943
1116
  wasExpected = false;
@@ -972,13 +1145,13 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
972
1145
 
973
1146
  if (expectation && expectation.match(method, url)) {
974
1147
  if (!expectation.matchData(data))
975
- throw Error('Expected ' + expectation + ' with different data\n' +
1148
+ throw new Error('Expected ' + expectation + ' with different data\n' +
976
1149
  'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data);
977
1150
 
978
1151
  if (!expectation.matchHeaders(headers))
979
- throw Error('Expected ' + expectation + ' with different headers\n' +
980
- 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' +
981
- prettyPrint(headers));
1152
+ throw new Error('Expected ' + expectation + ' with different headers\n' +
1153
+ 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' +
1154
+ prettyPrint(headers));
982
1155
 
983
1156
  expectations.shift();
984
1157
 
@@ -996,15 +1169,15 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
996
1169
  // if $browser specified, we do auto flush all requests
997
1170
  ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
998
1171
  } else if (definition.passThrough) {
999
- $delegate(method, url, data, callback, headers, timeout);
1000
- } else throw Error('No response defined !');
1172
+ $delegate(method, url, data, callback, headers, timeout, withCredentials);
1173
+ } else throw new Error('No response defined !');
1001
1174
  return;
1002
1175
  }
1003
1176
  }
1004
1177
  throw wasExpected ?
1005
- Error('No response defined !') :
1006
- Error('Unexpected request: ' + method + ' ' + url + '\n' +
1007
- (expectation ? 'Expected ' + expectation : 'No more request expected'));
1178
+ new Error('No response defined !') :
1179
+ new Error('Unexpected request: ' + method + ' ' + url + '\n' +
1180
+ (expectation ? 'Expected ' + expectation : 'No more request expected'));
1008
1181
  }
1009
1182
 
1010
1183
  /**
@@ -1016,13 +1189,15 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1016
1189
  *
1017
1190
  * @param {string} method HTTP method.
1018
1191
  * @param {string|RegExp} url HTTP url.
1019
- * @param {(string|RegExp)=} data HTTP request body.
1192
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
1193
+ * data string and returns true if the data is as expected.
1020
1194
  * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
1021
1195
  * object and returns true if the headers match the current definition.
1022
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1196
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1023
1197
  * request is handled.
1024
1198
  *
1025
- * - respond – `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1199
+ * - respond –
1200
+ * `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1026
1201
  * – The respond method takes a set of static data to be returned or a function that can return
1027
1202
  * an array containing response status (number), response data (string) and response headers
1028
1203
  * (Object).
@@ -1092,7 +1267,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1092
1267
  * Creates a new backend definition for POST requests. For more info see `when()`.
1093
1268
  *
1094
1269
  * @param {string|RegExp} url HTTP url.
1095
- * @param {(string|RegExp)=} data HTTP request body.
1270
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
1271
+ * data string and returns true if the data is as expected.
1096
1272
  * @param {(Object|function(Object))=} headers HTTP headers.
1097
1273
  * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1098
1274
  * request is handled.
@@ -1106,7 +1282,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1106
1282
  * Creates a new backend definition for PUT requests. For more info see `when()`.
1107
1283
  *
1108
1284
  * @param {string|RegExp} url HTTP url.
1109
- * @param {(string|RegExp)=} data HTTP request body.
1285
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
1286
+ * data string and returns true if the data is as expected.
1110
1287
  * @param {(Object|function(Object))=} headers HTTP headers.
1111
1288
  * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1112
1289
  * request is handled.
@@ -1135,13 +1312,16 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1135
1312
  *
1136
1313
  * @param {string} method HTTP method.
1137
1314
  * @param {string|RegExp} url HTTP url.
1138
- * @param {(string|RegExp)=} data HTTP request body.
1315
+ * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
1316
+ * receives data string and returns true if the data is as expected, or Object if request body
1317
+ * is in JSON format.
1139
1318
  * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
1140
1319
  * object and returns true if the headers match the current expectation.
1141
1320
  * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1142
1321
  * request is handled.
1143
1322
  *
1144
- * - respond – `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1323
+ * - respond –
1324
+ * `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1145
1325
  * – The respond method takes a set of static data to be returned or a function that can return
1146
1326
  * an array containing response status (number), response data (string) and response headers
1147
1327
  * (Object).
@@ -1204,7 +1384,9 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1204
1384
  * Creates a new request expectation for POST requests. For more info see `expect()`.
1205
1385
  *
1206
1386
  * @param {string|RegExp} url HTTP url.
1207
- * @param {(string|RegExp)=} data HTTP request body.
1387
+ * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
1388
+ * receives data string and returns true if the data is as expected, or Object if request body
1389
+ * is in JSON format.
1208
1390
  * @param {Object=} headers HTTP headers.
1209
1391
  * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1210
1392
  * request is handled.
@@ -1218,7 +1400,9 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1218
1400
  * Creates a new request expectation for PUT requests. For more info see `expect()`.
1219
1401
  *
1220
1402
  * @param {string|RegExp} url HTTP url.
1221
- * @param {(string|RegExp)=} data HTTP request body.
1403
+ * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
1404
+ * receives data string and returns true if the data is as expected, or Object if request body
1405
+ * is in JSON format.
1222
1406
  * @param {Object=} headers HTTP headers.
1223
1407
  * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1224
1408
  * request is handled.
@@ -1232,7 +1416,9 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1232
1416
  * Creates a new request expectation for PATCH requests. For more info see `expect()`.
1233
1417
  *
1234
1418
  * @param {string|RegExp} url HTTP url.
1235
- * @param {(string|RegExp)=} data HTTP request body.
1419
+ * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
1420
+ * receives data string and returns true if the data is as expected, or Object if request body
1421
+ * is in JSON format.
1236
1422
  * @param {Object=} headers HTTP headers.
1237
1423
  * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1238
1424
  * request is handled.
@@ -1265,11 +1451,11 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1265
1451
  */
1266
1452
  $httpBackend.flush = function(count) {
1267
1453
  $rootScope.$digest();
1268
- if (!responses.length) throw Error('No pending request to flush !');
1454
+ if (!responses.length) throw new Error('No pending request to flush !');
1269
1455
 
1270
1456
  if (angular.isDefined(count)) {
1271
1457
  while (count--) {
1272
- if (!responses.length) throw Error('No more pending request to flush !');
1458
+ if (!responses.length) throw new Error('No more pending request to flush !');
1273
1459
  responses.shift()();
1274
1460
  }
1275
1461
  } else {
@@ -1293,13 +1479,13 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1293
1479
  * "afterEach" clause.
1294
1480
  *
1295
1481
  * <pre>
1296
- * afterEach($httpBackend.verifyExpectations);
1482
+ * afterEach($httpBackend.verifyNoOutstandingExpectation);
1297
1483
  * </pre>
1298
1484
  */
1299
1485
  $httpBackend.verifyNoOutstandingExpectation = function() {
1300
1486
  $rootScope.$digest();
1301
1487
  if (expectations.length) {
1302
- throw Error('Unsatisfied requests: ' + expectations.join(', '));
1488
+ throw new Error('Unsatisfied requests: ' + expectations.join(', '));
1303
1489
  }
1304
1490
  };
1305
1491
 
@@ -1320,7 +1506,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1320
1506
  */
1321
1507
  $httpBackend.verifyNoOutstandingRequest = function() {
1322
1508
  if (responses.length) {
1323
- throw Error('Unflushed requests: ' + responses.length);
1509
+ throw new Error('Unflushed requests: ' + responses.length);
1324
1510
  }
1325
1511
  };
1326
1512
 
@@ -1345,14 +1531,14 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1345
1531
  function createShortMethods(prefix) {
1346
1532
  angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) {
1347
1533
  $httpBackend[prefix + method] = function(url, headers) {
1348
- return $httpBackend[prefix](method, url, undefined, headers)
1349
- }
1534
+ return $httpBackend[prefix](method, url, undefined, headers);
1535
+ };
1350
1536
  });
1351
1537
 
1352
1538
  angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
1353
1539
  $httpBackend[prefix + method] = function(url, data, headers) {
1354
- return $httpBackend[prefix](method, url, data, headers)
1355
- }
1540
+ return $httpBackend[prefix](method, url, data, headers);
1541
+ };
1356
1542
  });
1357
1543
  }
1358
1544
  }
@@ -1385,6 +1571,7 @@ function MockHttpExpectation(method, url, data, headers) {
1385
1571
  this.matchData = function(d) {
1386
1572
  if (angular.isUndefined(data)) return true;
1387
1573
  if (data && angular.isFunction(data.test)) return data.test(d);
1574
+ if (data && angular.isFunction(data)) return data(d);
1388
1575
  if (data && !angular.isString(data)) return angular.toJson(data) == d;
1389
1576
  return data == d;
1390
1577
  };
@@ -1416,7 +1603,8 @@ function MockXhr() {
1416
1603
  };
1417
1604
 
1418
1605
  this.getResponseHeader = function(name) {
1419
- // the lookup must be case insensitive, that's why we try two quick lookups and full scan at last
1606
+ // the lookup must be case insensitive,
1607
+ // that's why we try two quick lookups first and full scan last
1420
1608
  var header = this.$$respHeaders[name];
1421
1609
  if (header) return header;
1422
1610
 
@@ -1451,7 +1639,7 @@ function MockXhr() {
1451
1639
  *
1452
1640
  * This service is just a simple decorator for {@link ng.$timeout $timeout} service
1453
1641
  * that adds a "flush" and "verifyNoPendingTasks" methods.
1454
- */
1642
+ */
1455
1643
 
1456
1644
  angular.mock.$TimeoutDecorator = function($delegate, $browser) {
1457
1645
 
@@ -1462,9 +1650,26 @@ angular.mock.$TimeoutDecorator = function($delegate, $browser) {
1462
1650
  * @description
1463
1651
  *
1464
1652
  * Flushes the queue of pending tasks.
1653
+ *
1654
+ * @param {number=} delay maximum timeout amount to flush up until
1655
+ */
1656
+ $delegate.flush = function(delay) {
1657
+ $browser.defer.flush(delay);
1658
+ };
1659
+
1660
+ /**
1661
+ * @ngdoc method
1662
+ * @name ngMock.$timeout#flushNext
1663
+ * @methodOf ngMock.$timeout
1664
+ * @description
1665
+ *
1666
+ * Flushes the next timeout in the queue and compares it to the provided delay
1667
+ *
1668
+ * @param {number=} expectedDelay the delay value that will be asserted against the delay of the
1669
+ * next timeout function
1465
1670
  */
1466
- $delegate.flush = function() {
1467
- $browser.defer.flush();
1671
+ $delegate.flushNext = function(expectedDelay) {
1672
+ $browser.defer.flushNext(expectedDelay);
1468
1673
  };
1469
1674
 
1470
1675
  /**
@@ -1477,7 +1682,7 @@ angular.mock.$TimeoutDecorator = function($delegate, $browser) {
1477
1682
  */
1478
1683
  $delegate.verifyNoPendingTasks = function() {
1479
1684
  if ($browser.deferredFns.length) {
1480
- throw Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
1685
+ throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
1481
1686
  formatPendingTasksAsString($browser.deferredFns));
1482
1687
  }
1483
1688
  };
@@ -1500,7 +1705,7 @@ angular.mock.$TimeoutDecorator = function($delegate, $browser) {
1500
1705
  angular.mock.$RootElementProvider = function() {
1501
1706
  this.$get = function() {
1502
1707
  return angular.element('<div ng-app></div>');
1503
- }
1708
+ };
1504
1709
  };
1505
1710
 
1506
1711
  /**
@@ -1508,18 +1713,27 @@ angular.mock.$RootElementProvider = function() {
1508
1713
  * @name ngMock
1509
1714
  * @description
1510
1715
  *
1511
- * The `ngMock` is an angular module which is used with `ng` module and adds unit-test configuration as well as useful
1512
- * mocks to the {@link AUTO.$injector $injector}.
1716
+ * # ngMock
1717
+ *
1718
+ * The `ngMock` module providers support to inject and mock Angular services into unit tests.
1719
+ * In addition, ngMock also extends various core ng services such that they can be
1720
+ * inspected and controlled in a synchronous manner within test code.
1721
+ *
1722
+ * {@installModule mocks}
1723
+ *
1724
+ * <div doc-module-components="ngMock"></div>
1725
+ *
1513
1726
  */
1514
1727
  angular.module('ngMock', ['ng']).provider({
1515
1728
  $browser: angular.mock.$BrowserProvider,
1516
1729
  $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
1517
1730
  $log: angular.mock.$LogProvider,
1731
+ $interval: angular.mock.$IntervalProvider,
1518
1732
  $httpBackend: angular.mock.$HttpBackendProvider,
1519
1733
  $rootElement: angular.mock.$RootElementProvider
1520
- }).config(function($provide) {
1734
+ }).config(['$provide', function($provide) {
1521
1735
  $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
1522
- });
1736
+ }]);
1523
1737
 
1524
1738
  /**
1525
1739
  * @ngdoc overview
@@ -1530,9 +1744,9 @@ angular.module('ngMock', ['ng']).provider({
1530
1744
  * Currently there is only one mock present in this module -
1531
1745
  * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.
1532
1746
  */
1533
- angular.module('ngMockE2E', ['ng']).config(function($provide) {
1747
+ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
1534
1748
  $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
1535
- });
1749
+ }]);
1536
1750
 
1537
1751
  /**
1538
1752
  * @ngdoc object
@@ -1572,7 +1786,7 @@ angular.module('ngMockE2E', ['ng']).config(function($provide) {
1572
1786
  *
1573
1787
  * // adds a new phone to the phones array
1574
1788
  * $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
1575
- * phones.push(angular.fromJSON(data));
1789
+ * phones.push(angular.fromJson(data));
1576
1790
  * });
1577
1791
  * $httpBackend.whenGET(/^\/templates\//).passThrough();
1578
1792
  * //...
@@ -1597,7 +1811,8 @@ angular.module('ngMockE2E', ['ng']).config(function($provide) {
1597
1811
  * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1598
1812
  * control how a matched request is handled.
1599
1813
  *
1600
- * - respond – `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1814
+ * - respond –
1815
+ * `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1601
1816
  * – The respond method takes a set of static data to be returned or a function that can return
1602
1817
  * an array containing response status (number), response data (string) and response headers
1603
1818
  * (Object).
@@ -1699,7 +1914,8 @@ angular.module('ngMockE2E', ['ng']).config(function($provide) {
1699
1914
  * control how a matched request is handled.
1700
1915
  */
1701
1916
  angular.mock.e2e = {};
1702
- angular.mock.e2e.$httpBackendDecorator = ['$rootScope', '$delegate', '$browser', createHttpBackendMock];
1917
+ angular.mock.e2e.$httpBackendDecorator =
1918
+ ['$rootScope', '$delegate', '$browser', createHttpBackendMock];
1703
1919
 
1704
1920
 
1705
1921
  angular.mock.clearDataCache = function() {
@@ -1707,32 +1923,16 @@ angular.mock.clearDataCache = function() {
1707
1923
  cache = angular.element.cache;
1708
1924
 
1709
1925
  for(key in cache) {
1710
- if (cache.hasOwnProperty(key)) {
1926
+ if (Object.prototype.hasOwnProperty.call(cache,key)) {
1711
1927
  var handle = cache[key].handle;
1712
1928
 
1713
- handle && angular.element(handle.elem).unbind();
1929
+ handle && angular.element(handle.elem).off();
1714
1930
  delete cache[key];
1715
1931
  }
1716
1932
  }
1717
1933
  };
1718
1934
 
1719
1935
 
1720
- window.jstestdriver && (function(window) {
1721
- /**
1722
- * Global method to output any number of objects into JSTD console. Useful for debugging.
1723
- */
1724
- window.dump = function() {
1725
- var args = [];
1726
- angular.forEach(arguments, function(arg) {
1727
- args.push(angular.mock.dump(arg));
1728
- });
1729
- jstestdriver.console.log.apply(jstestdriver.console, args);
1730
- if (window.console) {
1731
- window.console.log.apply(window.console, args);
1732
- }
1733
- };
1734
- })(window);
1735
-
1736
1936
 
1737
1937
  (window.jasmine || window.mocha) && (function(window) {
1738
1938
 
@@ -1750,7 +1950,7 @@ window.jstestdriver && (function(window) {
1750
1950
  currentSpec = null;
1751
1951
 
1752
1952
  if (injector) {
1753
- injector.get('$rootElement').unbind();
1953
+ injector.get('$rootElement').off();
1754
1954
  injector.get('$browser').pollFns.length = 0;
1755
1955
  }
1756
1956
 
@@ -1785,9 +1985,11 @@ window.jstestdriver && (function(window) {
1785
1985
  *
1786
1986
  * See {@link angular.mock.inject inject} for usage example
1787
1987
  *
1788
- * @param {...(string|Function)} fns any number of modules which are represented as string
1988
+ * @param {...(string|Function|Object)} fns any number of modules which are represented as string
1789
1989
  * aliases or as anonymous module initialization functions. The modules are used to
1790
- * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded.
1990
+ * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
1991
+ * object literal is passed they will be register as values in the module, the key being
1992
+ * the module name and the value being what is returned.
1791
1993
  */
1792
1994
  window.module = angular.mock.module = function() {
1793
1995
  var moduleFns = Array.prototype.slice.call(arguments, 0);
@@ -1795,11 +1997,19 @@ window.jstestdriver && (function(window) {
1795
1997
  /////////////////////
1796
1998
  function workFn() {
1797
1999
  if (currentSpec.$injector) {
1798
- throw Error('Injector already created, can not register a module!');
2000
+ throw new Error('Injector already created, can not register a module!');
1799
2001
  } else {
1800
2002
  var modules = currentSpec.$modules || (currentSpec.$modules = []);
1801
2003
  angular.forEach(moduleFns, function(module) {
1802
- modules.push(module);
2004
+ if (angular.isObject(module) && !angular.isArray(module)) {
2005
+ modules.push(function($provide) {
2006
+ angular.forEach(module, function(value, key) {
2007
+ $provide.value(key, value);
2008
+ });
2009
+ });
2010
+ } else {
2011
+ modules.push(module);
2012
+ }
1803
2013
  });
1804
2014
  }
1805
2015
  }
@@ -1816,8 +2026,40 @@ window.jstestdriver && (function(window) {
1816
2026
  * instance of {@link AUTO.$injector $injector} per test, which is then used for
1817
2027
  * resolving references.
1818
2028
  *
1819
- * See also {@link angular.mock.module module}
1820
2029
  *
2030
+ * ## Resolving References (Underscore Wrapping)
2031
+ * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this
2032
+ * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable
2033
+ * that is declared in the scope of the `describe()` block. Since we would, most likely, want
2034
+ * the variable to have the same name of the reference we have a problem, since the parameter
2035
+ * to the `inject()` function would hide the outer variable.
2036
+ *
2037
+ * To help with this, the injected parameters can, optionally, be enclosed with underscores.
2038
+ * These are ignored by the injector when the reference name is resolved.
2039
+ *
2040
+ * For example, the parameter `_myService_` would be resolved as the reference `myService`.
2041
+ * Since it is available in the function body as _myService_, we can then assign it to a variable
2042
+ * defined in an outer scope.
2043
+ *
2044
+ * ```
2045
+ * // Defined out reference variable outside
2046
+ * var myService;
2047
+ *
2048
+ * // Wrap the parameter in underscores
2049
+ * beforeEach( inject( function(_myService_){
2050
+ * myService = _myService_;
2051
+ * }));
2052
+ *
2053
+ * // Use myService in a series of tests.
2054
+ * it('makes use of myService', function() {
2055
+ * myService.doStuff();
2056
+ * });
2057
+ *
2058
+ * ```
2059
+ *
2060
+ * See also {@link angular.mock.module angular.mock.module}
2061
+ *
2062
+ * ## Example
1821
2063
  * Example of what a typical jasmine tests looks like with the inject method.
1822
2064
  * <pre>
1823
2065
  *
@@ -1850,7 +2092,7 @@ window.jstestdriver && (function(window) {
1850
2092
  * inject(function(version) {
1851
2093
  * expect(version).toEqual('overridden');
1852
2094
  * });
1853
- * ));
2095
+ * });
1854
2096
  * });
1855
2097
  *
1856
2098
  * </pre>
@@ -1873,7 +2115,9 @@ window.jstestdriver && (function(window) {
1873
2115
  }
1874
2116
  for(var i = 0, ii = blockFns.length; i < ii; i++) {
1875
2117
  try {
2118
+ /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */
1876
2119
  injector.invoke(blockFns[i] || angular.noop, this);
2120
+ /* jshint +W040 */
1877
2121
  } catch (e) {
1878
2122
  if(e.stack && errorForStack) e.stack += '\n' + errorForStack.stack;
1879
2123
  throw e;
@@ -1883,4 +2127,4 @@ window.jstestdriver && (function(window) {
1883
2127
  }
1884
2128
  }
1885
2129
  };
1886
- })(window);
2130
+ })(window);