From d8e5790e8149f21b3482cde9ef611520d6f67c92 Mon Sep 17 00:00:00 2001 From: Eric Bidelman Date: Wed, 2 May 2012 23:58:52 -0700 Subject: [PATCH 1/3] Updating demo to AngularJS 1.0 --- architecture-examples/angularjs/index.html | 37 +-- .../angularjs/js/controllers.js | 204 +++++++------ .../angularjs/js/directive.js | 34 --- .../angularjs/js/libs/angular/angular.min.js | 275 ++++++++++-------- 4 files changed, 269 insertions(+), 281 deletions(-) delete mode 100644 architecture-examples/angularjs/js/directive.js diff --git a/architecture-examples/angularjs/index.html b/architecture-examples/angularjs/index.html index 3e6df8f46e..b1203f54c9 100644 --- a/architecture-examples/angularjs/index.html +++ b/architecture-examples/angularjs/index.html @@ -1,5 +1,5 @@ - + AngularJS - TodoMVC @@ -10,44 +10,45 @@ -
+

Todos

-
- + +
-
- +
+
    -
  • +
  • - - - + + +
    -
    - + +
-
Double-click to edit a todo.
- + - \ No newline at end of file diff --git a/architecture-examples/angularjs/js/controllers.js b/architecture-examples/angularjs/js/controllers.js index a110c0fd26..9dfd4e26d7 100644 --- a/architecture-examples/angularjs/js/controllers.js +++ b/architecture-examples/angularjs/js/controllers.js @@ -1,107 +1,103 @@ /* App Controllers */ -App.Controllers.TodoController = function () { - var self = this; - - self.newTodo = ""; - - var retrieveStore = function() { - var store = localStorage.getItem('todo-angularjs'); - return ( store && JSON.parse( store ) ) || []; - }; - - var updateStore = function() { - var isEditing = angular.Array.count(self.todos, function(x) { - return x.editing; - }); - if (!isEditing){ - localStorage.setItem('todo-angularjs', JSON.stringify(self.todos)); - } - }; - - //not sure if its intended to do so. However, we need a hook to update the store - //whenever angular changes any properties - self.$watch(updateStore); - - self.todos = retrieveStore(); - - self.addTodo = function() { - if (self.newTodo.trim().length === 0) return; - - self.todos.push({ - title: self.newTodo, - done: false, - editing: false - }); - self.newTodo = ""; - }; - - self.editTodo = function(todo) { - //cancel any active editing operation - angular.forEach(self.todos, function(value) { - value.editing = false; - }); - todo.editing = true; - }; - - self.finishEditing = function(todo) { - if (todo.title.trim().length === 0){ - self.removeTodo(todo); - } - else{ - todo.editing = false; - } - }; - - self.removeTodo = function(todo) { - angular.Array.remove(self.todos, todo); - }; - - var countTodos = function(done) { - return function() { - return angular.Array.count(self.todos, function(x) { - return x.done === (done === "done"); - }); - } - }; - - var pluralize = function( count, word ) { - return count === 1 ? word : word + 's'; - }; - - self.remainingTodos = countTodos("undone"); - - self.finishedTodos = countTodos("done"); - - self.itemsLeftText = function(){ - return pluralize(self.remainingTodos(), 'item') + ' left' - }; - - self.clearItemsText = function(){ - var finishedTodos = self.finishedTodos(); - return 'Clear ' + finishedTodos + ' completed ' + pluralize(finishedTodos, 'item'); - }; - - self.clearCompletedItems = function() { - var oldTodos = self.todos; - self.todos = []; - angular.forEach(oldTodos, function(todo) { - if (!todo.done) self.todos.push(todo); - }); - self.allChecked = false; - }; - - self.toggleAllStates = function(){ - angular.forEach(self.todos, function(todo){ - todo.done = self.allChecked; - }) - }; - - self.hasFinishedTodos = function() { - return self.finishedTodos() > 0; - }; - - self.hasTodos = function() { - return self.todos.length > 0; - }; +var todomvc = angular.module('todomvc', []); + +App.Controllers.TodoController = function($scope) { + $scope.todos = retrieveStore(); + //$scope.todos = retrieveStore(); + + $scope.todoForms = { + 0: "You're done!", + one: '{} item left', + other: '{} items left' + }; + + function retrieveStore() { + var store = localStorage.getItem('todo-angularjs'); + return (store && JSON.parse(store)) || []; + }; + + function updateStore() { + var isEditing = $scope.todos.filter(function(val) { + return val.editing; + }).length; + + if (!isEditing) { + localStorage.setItem('todo-angularjs', JSON.stringify($scope.todos)); + } + }; + + //not sure if its intended to do so. However, we need a hook to update the store + //whenever angular changes any properties + //$scope.$watch($scope.todos, updateStore); + + $scope.addTodo = function() { + if (this.newTodo.trim().length === 0) { + return; + } + + $scope.todos.push({ + title: this.newTodo, + done: false, + editing: false + }); + + this.newTodo = ''; + + updateStore(); + }; + + $scope.editTodo = function(todo) { + //cancel any active editing operation + $scope.todos.forEach(function(val) { + val.editing = false; + }); + todo.editing = true; + }; + + $scope.finishEditing = function(todo) { + if (todo.title.trim().length === 0) { + $scope.removeTodo(todo); + } else { + todo.editing = false; + } + updateStore(); + }; + + $scope.removeTodo = function(todo) { + for (var i = 0, len = $scope.todos.length; i < len; ++i) { + if (todo === $scope.todos[i]) { + $scope.todos.splice(i, 1); + } + } + + updateStore(); + }; + + $scope.remainingTodos = function() { + return $scope.todos.filter(function(val) { + return !val.done; + }); + }; + + $scope.doneTodos = function() { + return $scope.todos.filter(function(val) { + return val.done; + }); + } + + $scope.clearDoneTodos = function() { + $scope.todos = $scope.remainingTodos(); + updateStore(); + }; + + $scope.markAllDone = function() { + var markDone = true; + if (!$scope.remainingTodos().length) { + markDone = false; + } + $scope.todos.forEach(function(todo) { + todo.done = markDone; + }); + }; }; diff --git a/architecture-examples/angularjs/js/directive.js b/architecture-examples/angularjs/js/directive.js deleted file mode 100644 index 5d94ee419e..0000000000 --- a/architecture-examples/angularjs/js/directive.js +++ /dev/null @@ -1,34 +0,0 @@ - -angular.directive('my:blur', function(expression, compiledElement) { - var compiler = this; - return function(linkElement) { - var scope = this; - linkElement.bind('blur', function(event) { - scope.$apply(expression, linkElement); - event.stopPropagation(); - }); - }; -}); - -angular.directive('my:dblclick', function(expression, compiledElement) { - var compiler = this; - return function(linkElement) { - var scope = this; - linkElement.bind('dblclick', function(event) { - scope.$apply(expression, linkElement); - event.stopPropagation(); - }); - }; -}); - -angular.directive("my:focus", function(expression, compiledElement){ - - return function(element){ - this.$watch(expression, function(){ - if(angular.formatter.boolean.parse(expression)){ - element[0].focus(); - element[0].select(); - } - }, element); - }; -}); diff --git a/architecture-examples/angularjs/js/libs/angular/angular.min.js b/architecture-examples/angularjs/js/libs/angular/angular.min.js index 55b095b0fc..e12d85481a 100644 --- a/architecture-examples/angularjs/js/libs/angular/angular.min.js +++ b/architecture-examples/angularjs/js/libs/angular/angular.min.js @@ -1,128 +1,153 @@ /* - AngularJS v0.10.0 - (c) 2010-2011 AngularJS http://angularjs.org + AngularJS v1.0.0rc7 + (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -'use strict';(function(x,F,A){function k(a,b,c){var d;if(a)if(q(a))for(d in a)d!="prototype"&&d!=mc&&d!=nc&&a.hasOwnProperty(d)&&b.call(c,a[d],d);else if(a.forEach&&a.forEach!==k)a.forEach(b,c);else if(I(a)&&oa(a.length))for(d=0;d2?la.call(arguments,2):[];return q(b)&&!(b instanceof RegExp)?c.length?function(){return arguments.length?b.apply(a,c.concat(la.call(arguments,0))):b.apply(a,c)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}:b}function ma(a){a&&a.length!==0?(a=H(""+a),a=!(a=="f"||a=="0"||a=="false"||a=="no"||a=="n"||a=="[]")):a=!1;return a}function zb(a){return(new Ab(Ta,Bb,B,O)).compile(a)}function Ua(a){var b= -{},c,d;k((a||"").split("&"),function(a){a&&(c=a.split("="),d=unescape(c[0]),b[d]=v(c[1])?unescape(c[1]):!0)});return b}function Cb(a){var b=[];k(a,function(a,d){b.push(escape(d)+(a===!0?"":"="+escape(a)))});return b.length?b.join("&"):""}function Va(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(b?null:/%20/g,"+")}function tc(a,b){Db();for(var c=a.getElementsByTagName("script"),d,b=s({ie_compat_id:"ng-ie-compat"},b),e=0;e< -c.length;e++)if(d=(c[e].src||"").match(uc))b.base_url=d[1],b.ie_compat=d[1]+"angular-ie-compat"+(d[2]||"")+".js",s(b,Ua(d[6])),za(n(c[e]),function(a,c){/^ng:/.exec(c)&&(c=c.substring(3).replace(/-/g,"_"),b[c]=a||!0)});return b}function Db(){(Wa=x.jQuery)?(n=Wa,s(Wa.fn,{scope:Eb.scope})):n=Xa;w.element=n}function ra(a,b){if(!q(a))throw new z("Argument '"+(b||"?")+"' is "+("not a function, got "+(typeof a=="object"?a.constructor.name:typeof a)||"required"));}function Q(a,b){var c=[];Ya(c,a,b?"\n ": -null,[]);return c.join("")}function fa(a,b){function c(a){if(u(a)&&a.length===Fb)return ga.toDate(a);else(U(a)||I(a))&&k(a,function(b,d){a[d]=c(b)});return a}if(!u(a))return a;var d;try{return b&&x.JSON&&x.JSON.parse?(d=JSON.parse(a),c(d)):aa(a,!0).primary()()}catch(e){throw vc("fromJson error: ",a,e),e;}}function Ya(a,b,c,d){if(I(b)){if(b===x){a.push("WINDOW");return}if(b===F){a.push("DOCUMENT");return}if(yb(d,b)){a.push("RECURSION");return}d.push(b)}if(b===null)a.push(Aa);else if(b instanceof RegExp)a.push(ga.quoteUnicode(b.toString())); -else if(q(b))return;else if(typeof b==wc)a.push(""+b);else if(oa(b))isNaN(b)?a.push(Aa):a.push(""+b);else if(u(b))return a.push(ga.quoteUnicode(b));else if(I(b))if(U(b)){a.push("[");for(var e=b.length,f=!1,g=0;g0){var e=N[0],g=e.text;if(g==a||g==b||g==c||g==d||!a&&!b&&!c&&!d)return e}return!1}function g(a,c,e,g){return(a=f(a,c,e,g))?(b&&!a.json&&d("is not valid json",a),N.shift(),a):!1}function h(a){g(a)||d("is unexpected, expecting ["+a+"]",f())}function i(a,b){return function(c){return a(c,b(c))}}function j(a,b,c){return function(d){return b(d, -a(d),c(d))}}function l(){return w(X)}function m(){for(var a=o(),b;;)if(b=g("||"))a=j(a,b.fn,o());else return a}function o(){var a=D(),b;if(b=g("&&"))a=j(a,b.fn,o());return a}function D(){var a=t(),b;if(b=g("==","!="))a=j(a,b.fn,D());return a}function t(){var a;a=k();for(var b;b=g("+","-");)a=j(a,b.fn,k());if(b=g("<",">","<=",">="))a=j(a,b.fn,t());return a}function k(){for(var a=r(),b;b=g("*","/","%");)a=j(a,b.fn,r());return a}function r(){var a;return g("+")?n():(a=g("-"))?j(u,a.fn,r()):(a=g("!"))? -i(a.fn,r()):n()}function n(){var a;if(g("("))a=cb(),h(")");else if(g("["))a=L();else if(g("{"))a=ha();else{var b=g();(a=b.fn)||d("not a primary expression",b)}for(;b=g("(","[",".");)b.text==="("?a=Kb(a):b.text==="["?a=v(a):b.text==="."?a=Ca(a):d("IMPOSSIBLE");return a}function L(){var a=[];if(e().text!="]"){do a.push(ba());while(g(","))}h("]");return function(b){for(var c=[],d=0;d0&&!f("}",")",";","]")&&a.push(cb()),!g(";"))return a.length==1?a[0]:function(b){for(var c,d=0;d1;d++){var e=b.shift(),f=a[e];f||(f={},a[e]=f);a=f}return a[b.shift()]=c}function Da(a,b,c){if(!b)return a;for(var b= -b.split("."),d,e=a,f=b.length,g=0;g=8))n(a).bind("hashchange",b);else{var d=h.getUrl();h.addPollFn(function(){d!=h.getUrl()&&(b(),d=h.getUrl())})}return b};var ha={},s="";h.cookies=function(a,b){var c,d,g,f;if(a)if(b===A)i.cookie=escape(a)+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";else{if(u(b))i.cookie=escape(a)+ -"="+escape(b),c=a.length+b.length+1,c>4096&&e.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+c+" > 4096 bytes)!"),ha.length>20&&e.warn("Cookie '"+a+"' possibly not set or overflowed because too many cookies were already set ("+ha.length+" > 20 )")}else{if(i.cookie!==s){s=i.cookie;c=s.split("; ");ha={};for(g=0;g0&&(ha[unescape(d.substring(0,f))]=unescape(d.substring(f+1)))}return ha}};h.defer=function(a,b){var c;ta++;c=l(function(){delete o[c]; -f(a)},b||0);o[c]=!0;return c};h.defer.cancel=function(a){if(o[a])return delete o[a],m(a),f(p),!0};var N=p;h.hover=function(a){N=a};h.bind=function(){b.bind("mouseover",function(a){N(n(V?a.srcElement:a.target),!0);return!0});b.bind("mouseleave mouseout click dblclick keypress keyup",function(a){N(n(a.target),!1);return!0})};h.addCss=function(a){var b=n(i.createElement("link"));b.attr("rel","stylesheet");b.attr("type","text/css");b.attr("href",a);c.append(b)};h.addJs=function(a,b,d){var e=i.createElement("script"); -e.type="text/javascript";e.src=a;if(b)e.id=b;if(V)e.onreadystatechange=function(){/loaded|complete/.test(e.readyState)&&d&&d()};else if(d)e.onload=e.onerror=d;c[0].appendChild(e);return e}}function vb(a,b){function c(a,c,e,f){c=H(c);if(Rb[c])for(;g.last()&&Sb[g.last()];)d("",g.last());Tb[c]&&g.last()==c&&d("",c);(f=Ub[c]||!!f)||g.push(c);var h={};e.replace(Hc,function(a,b,c,d,e){h[b]=eb(c||d||e||"")});b.start&&b.start(c,h,f)}function d(a,c){var d=0,e;if(c=H(c))for(d=g.length-1;d>=0;d--)if(g[d]==c)break; -if(d>=0){for(e=g.length-1;e>=d;e--)b.end&&b.end(g[e]);g.length=d}}var e,f,g=[],h=a;for(g.last=function(){return g[g.length-1]};a;){f=!0;if(!g.last()||!Vb[g.last()]){if(a.indexOf("<\!--")===0)e=a.indexOf("--\>"),e>=0&&(b.comment&&b.comment(a.substring(4,e)),a=a.substring(e+3),f=!1);else if(Ic.test(a)){if(e=a.match(Wb))a=a.substring(e[0].length),e[0].replace(Wb,d),f=!1}else if(Jc.test(a)&&(e=a.match(Xb)))a=a.substring(e[0].length),e[0].replace(Xb,c),f=!1;f&&(e=a.indexOf("<"),f=e<0?a:a.substring(0,e), -a=e<0?"":a.substring(e),b.chars&&b.chars(eb(f)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+g.last()+"[^>]*>","i"),function(a,c){c=c.replace(Kc,"$1").replace(Lc,"$1");b.chars&&b.chars(eb(c));return""}),d("",g.last());if(a==h)throw"Parse Error: "+a;h=a}d()}function eb(a){fb.innerHTML=a.replace(//g,">")}function wb(a){var b= -!1,c=M(a,a.push);return{start:function(a,e,f){a=H(a);!b&&Vb[a]&&(b=a);!b&&Zb[a]==!0&&(c("<"),c(a),k(e,function(a,b){var d=H(b);if(Nc[d]==!0&&($b[d]!==!0||a.match(Oc)))c(" "),c(b),c('="'),c(Yb(a)),c('"')}),c(f?"/>":">"))},end:function(a){a=H(a);!b&&Zb[a]==!0&&(c(""));a==b&&(b=!1)},chars:function(a){b||c(Yb(a))}}}function Pc(a){var b={},a=a[0].style,c,d;if(typeof a.length=="number")for(c=0;c 
"+a;b.removeChild(b.firstChild);gb(this,b.childNodes);this.remove()}else gb(this,a)}function ua(a){ac(a);for(var b=0,a=a.childNodes||[];b-1}function bc(a,b){b&&k(b.split(" "),function(b){a.className=ea((" "+a.className+" ").replace(/[\n\t]/g," ").replace(" "+ea(b)+" "," "))})}function cc(a,b){b&&k(b.split(" "),function(b){if(!ib(a,b))a.className=ea(a.className+" "+ea(b))})}function gb(a,b){if(b)for(var b=!b.nodeName&&v(b.length)&& -(!b||!b.document||!b.location||!b.alert||!b.setInterval)?b:[b],c=0;c=l+m)for(var j=g.length-l,o=0;o0||e>-c)e+=c;e===0&&c==-12&&(e=12);return R(e,b,d)}}function Ha(a,b){return function(c,d){var e=c["get"+a](),f=Ia(b?"SHORT"+a:a);return d[f][e]}}function na(a,b){return{format:a,parse:b||a}}function gc(a){return v(a)&&a!==null?""+a:a}function kb(a){var b=hc[a];if(!b){var c=[];k(Ja(a),function(a){var b=Ka(a);c.push(b?function(a,c){var d,i;try{i=a.$eval(b)}catch(j){a.$service("$exceptionHandler")(j),d=Q(j)}ka(c,lb,d);return d?d:i}:function(){return a})}); -hc[a]=b=function(a,b,f){var g=[],h=a.hasOwnProperty("$element"),i=a.$element;a.$element=b;try{for(var j=0;j-1;)c1)throw z("Cannot compile multiple element roots: "+n("
").append(a.clone()).html());if(d&&d[0])for(var d=d[0],e=0;e0?H(i).replace(":","-"):"",l,m={compile:M(c,c.compile),descend:function(a){v(a)&&(g=a);return g},directives:function(a){v(a)&&(h=a);return h},scope:function(a){if(v(a))l.newScope=l.newScope||a;return l.newScope}};a.addClass(j);l=new Za;za(a,function(b, -e){if(!d&&(d=c.widgets("@"+e)))a.addClass("ng-attr-widget"),d=M(m,d,b,a)});if(!d&&(d=c.widgets(i)))j&&a.addClass("ng-widget"),d=M(m,d,a);d&&(h=g=!1,i=a.parent(),l.addLinkFn(d.call(m,a)),i&&i[0]&&(a=n(i[0].childNodes[b])));if(g)for(var o=0,D=a[0].childNodes;o":function(a,b,c){return b>c},"<=":function(a,b,c){return b<=c},">=":function(a,b,c){return b>=c},"&&":function(a,b,c){return b&&c},"||":function(a,b,c){return b||c},"&":function(a,b,c){return b&c},"|":function(a,b,c){return c(a,b)},"!":function(a,b){return!b}},Ec={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'},Nb={},Pb={},Ob={};k("abstract,boolean,break,byte,case,catch,char,class,const,continue,debugger,default,delete,do,double,else,enum,export,extends,false,final,finally,float,for,function,goto,if,implements,import,ininstanceof,intinterface,long,native,new,null,package,private,protected,public,return,short,static,super,switch,synchronized,this,throw,throws,transient,true,try,typeof,var,volatile,void,undefined,while,with".split(/,/), -function(a){Ob[a]=!0});Qb.prototype={url:function(a){var b=this,c=this.template,d,a=a||{};k(this.urlParams,function(e,g){d=Va(a[g]||b.defaults[g]||"",!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+");c=c.replace(RegExp(":"+g+"(\\W)"),d+"$1")});var c=c.replace(/\/?#$/,""),e=[];sb(a,function(a,c){b.urlParams[c]||e.push(Va(c)+"="+Va(a))});c=c.replace(/\/*$/,"");return c+(e.length?"?"+e.join("&"):"")}};Ea.DEFAULT_ACTIONS={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0}, -remove:{method:"DELETE"},"delete":{method:"DELETE"}};Ea.prototype={route:function(a,b,c){function d(a){var c={};k(b||{},function(b,d){c[d]=b.charAt&&b.charAt(0)=="@"?Da(a,b.substr(1)):b});return c}function e(a){C(a||{},this)}var f=this,g=new Qb(a),c=s({},Ea.DEFAULT_ACTIONS,c);k(c,function(h,i){var j=h.method=="POST"||h.method=="PUT";e[i]=function(a,b,c,i){var t={},n,r=p,K=null;switch(arguments.length){case 4:K=i,r=c;case 3:case 2:if(q(b)){if(q(a)){r=a;K=b;break}r=b;K=c}else{t=a;n=b;r=c;break}case 1:q(a)? -r=a:j?n=a:t=a;break;case 0:break;default:throw"Expected between 0-4 arguments [params, data, success, error], got "+arguments.length+" arguments.";}var L=this instanceof e?this:h.isArray?[]:new e(n);f.xhr(h.method,g.url(s({},h.params||{},d(n),t)),n,function(a,b){if(b)h.isArray?(L.length=0,k(b,function(a){L.push(new e(a))})):C(b,L);(r||p)(L)},K||h.verifyCache,h.verifyCache);return L};e.bind=function(d){return f.route(a,s({},b,d),c)};e.prototype["$"+i]=function(a,b,c){var g=d(this),f=p,h;switch(arguments.length){case 3:g= -a;f=b;h=c;break;case 2:case 1:q(a)?(f=a,h=b):(g=a,f=b||p);case 0:break;default:throw"Expected between 1-3 arguments [params, success, error], got "+arguments.length+" arguments.";}e[i].call(this,g,j?this:A,f,h)}});return e}};var Tc=x.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(b){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(c){}throw new z("This browser does not support XMLHttpRequest."); -},Xb=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,Wb=/^<\s*\/\s*([\w:-]+)[^>]*>/,Hc=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,Jc=/^/g,Lc=//g,Oc=/^((ftp|https?):\/\/|mailto:|#)/,Mc=/([^\#-~| |!])/g,Ub=Z("area,br,col,hr,img"),Rb=Z("address,blockquote,center,dd,del,dir,div,dl,dt,hr,ins,li,map,menu,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul"),Sb=Z("a,abbr,acronym,b,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var"), -Tb=Z("colgroup,dd,dt,li,p,td,tfoot,th,thead,tr"),Vb=Z("script,style"),Zb=s({},Ub,Rb,Sb,Tb),$b=Z("background,href,longdesc,src,usemap"),Nc=s({},$b,Z("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),fb=F.createElement("pre"),Ga={},Fa="ng-"+(new Date).getTime(), -Rc=1,Uc=x.document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)},Qc=x.document.removeEventListener?function(a,b,c){a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent("on"+b,c)},Eb=Y.prototype={ready:function(a){function b(){c||(c=!0,a())}var c=!1;this.bind("DOMContentLoaded",b);Xa(x).bind("load",b)},toString:function(){var a=[];k(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return a>=0?n(this[a]):n(this[this.length+ -a])},length:0,push:P,sort:[].sort,splice:[].splice},Vc=Z("multiple,selected,checked,disabled,readonly");k({data:hb,scope:function(a){for(var b;a&&!(b=n(a).data("$scope"));)a=a.parentNode;return b},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:ib,css:function(a,b,c){if(v(c))a.style[b]=c;else return a.style[b]},attr:function(a,b,c){if(b==="class")if(v(c))a.className=c;else return a.className;else if(Vc[b])if(v(c))a[b]=!!c;else return a[b];else if(v(c))a.setAttribute(b,c);else if(a.getAttribute)return a= -a.getAttribute(b,2),a===null?A:a},text:s(V<9?function(a,b){if(a.nodeType==3){if(y(b))return a.nodeValue;a.nodeValue=b}else{if(y(b))return a.innerText;a.innerText=b}}:function(a,b){if(y(b))return a.textContent;a.textContent=b},{$dv:""}),val:function(a,b){if(y(b))return a.value;a.value=b},html:function(a,b){if(y(b))return a.innerHTML;for(var c=0,d=a.childNodes;c=0&&a.splice(c,1);return b},filter:function(a, -b){var c=[];c.check=function(a){for(var b=0;b-1;case "object":for(var c in a)if(c.charAt(0)!=="$"&&d(a[c],b))return!0;return!1;case "array":for(c=0;c0?(d=0,e=b):(d=a.length+b,e=a.length);for(;d]/, -bd=/^mailto:/;X.linky=function(a){if(!a)return a;for(var b=a,c=[],d=wb(c),e,f;a=b.match(ad);)e=a[0],a[2]==a[3]&&(e="mailto:"+e),f=a.index,d.chars(b.substr(0,f)),d.start("a",{href:e}),d.chars(a[0].replace(bd,"")),d.end("a"),b=b.substring(f+a[0].length);d.chars(b);return new Sa(c.join(""))};var cd=/^\s*[-+]?\d*(\.\d*)?\s*$/;ia.noop=na(da,da);ia.json=na(Q,function(a){return fa(a||"null")});ia["boolean"]=na(gc,ma);ia.number=na(gc,function(a){if(a==null||cd.exec(a))return a===null||a===""?null:1*a;else throw"Not a number"; -});ia.list=na(function(a){return a?a.join(", "):a},function(a){var b=[];k((a||"").split(","),function(a){(a=ea(a))&&b.push(a)});return b});ia.trim=na(function(a){return a?ea(""+a):""});s(db,{noop:function(){return null},regexp:function(a,b,c){return a.match(b)?null:c||"Value does not match expected format "+b+"."},number:function(a,b,c){var d=1*a;return d==a?typeof b!=pa&&dc?"Value can not be greater than "+c+".":null:"Not a number"},integer:function(a, -b,c){return(b=db.number(a,b,c))?b:!(""+a).match(/^\s*[\d+]*\s*$/)||a!=Math.round(a)?"Not a whole number":null},date:function(a){var b=(a=/^(\d\d?)\/(\d\d?)\/(\d\d\d\d)$/.exec(a))?new Date(a[3],a[1]-1,a[2]):0;return b&&b.getFullYear()==a[3]&&b.getMonth()==a[1]-1&&b.getDate()==a[2]?null:"Value is not a date. (Expecting format: 12/31/2009)."},email:function(a){return a.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)?null:"Email needs to be in username@host.com format."},phone:function(a){return a.match(/^1\(\d\d\d\)\d\d\d-\d\d\d\d$/)? -null:a.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/)?null:"Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationally."},url:function(a){return a.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/)?null:"URL needs to be in http://server[:port]/path format."},json:function(a){try{return fa(a),null}catch(b){return b.toString()}},asynchronous:function(a,b,c){if(a){var d=this.$element,e=d.data("$asyncValidator");e|| -d.data("$asyncValidator",e={inputs:{}});e.current=a;var f=e.inputs[a],g=this.$service("$invalidWidgets");f?f.inFlight?g.markInvalid(this.$element):(c||p)(f.response):(e.inputs[a]=f={inFlight:!0},g.markInvalid(this.$element),d.addClass("ng-input-indicator-wait"),b(a,function(b,c){f.response=c;f.error=b;f.inFlight=!1;e.current==a&&(d.removeClass("ng-input-indicator-wait"),g.markValid(d));d.data(nb)()}));return f.error}}});G("$cookieStore",function(a){return{get:function(b){return fa(a[b])},put:function(b, -c){a[b]=Q(c)},remove:function(b){delete a[b]}}},["$cookies"]);G("$cookies",function(a){var b=this,c={},d={},e,f=!1;a.addPollFn(function(){var g=a.cookies();e!=g&&(e=g,C(g,d),C(g,c),f&&b.$apply())})();f=!0;this.$watch(function(){var b,e,f;for(b in d)y(c[b])&&a.cookies(b,A);for(b in c)e=c[b],u(e)?e!==d[b]&&(a.cookies(b,e),f=!0):v(d[b])?c[b]=d[b]:delete c[b];if(f)for(b in e=a.cookies(),c)c[b]!==e[b]&&(y(e[b])?delete c[b]:c[b]=e[b])});return c},["$browser"]);G("$defer",function(a){var b=this;return function(c, -d){a.defer(function(){b.$apply(c)},d)}},["$browser"]);G("$document",function(a){return n(a.document)},["$window"]);G("$exceptionHandler",function(a){return function(b){a.error(b)}},["$log"]);G("$hover",function(a,b){var c,d,e=n(b[0].body);a.hover(function(a,b){if(b&&(d=a.attr(lb)||a.attr(wa))){c||(c={callout:n('
'),arrow:n("
"),title:n('
'),content:n('
')},c.callout.append(c.arrow),c.callout.append(c.title), -c.callout.append(c.content),e.append(c.callout));var h=e[0].getBoundingClientRect(),i=a[0].getBoundingClientRect(),h=h.right-i.right-10;c.title.text(a.hasClass("ng-exception")?"EXCEPTION:":"Validation error...");c.content.text(d);h<300?(c.arrow.addClass("ng-arrow-right"),c.arrow.css({left:"301px"}),c.callout.css({position:"fixed",left:i.left-10-300-4+"px",top:i.top-3+"px",width:"300px"})):(c.arrow.addClass("ng-arrow-left"),c.callout.css({position:"fixed",left:i.right+10+"px",top:i.top-3+"px",width:"300px"}))}else c&& -(c.callout.remove(),c=null)})},["$browser","$document"],!0);G("$invalidWidgets",function(){function a(b){if(b==x.document)return!1;b=b.parentNode;return!b||a(b)}var b=[];b.markValid=function(a){a=ya(b,a);a!=-1&&b.splice(a,1)};b.markInvalid=function(a){ya(b,a)===-1&&b.push(a)};b.visible=function(){var a=0;k(b,function(b){var e=a,b=b[0].getBoundingClientRect(),f=b.height||b.bottom||0-b.top||0;a=e+((b.width||b.right||0-b.left||0)>0&&f>0?1:0)});return a};this.$watch(function(){for(var c=0;c1||Ka(d[0])!==null)if(rc(c[0]))c.attr("ng:bind-template",a);else{var e=b,f;k(Ja(a),function(a){var b=Ka(a);b?(f=n(""),f.attr("ng:bind",b)):f=n(F.createTextNode(a));V&&a.charAt(0)==" "&&(f=n(" "),b=f.html(),f.text(a.substr(1)),f.html(b+f.html()));e.after(f);e=f});b.remove()}});Ta("option",function(a,b,c){H(sa(c))=="option"&&(V<=7?vb(c[0].outerHTML,{start:function(b,e){y(e.value)&&c.attr("value",a)}}):c[0].getAttribute("value")== -null&&c.attr("value",a))});var rb={};k("src,href,checked,disabled,multiple,readonly,selected".split(","),function(a){rb["ng:"+a]=a});Bb("{{}}",function(a,b,c){if(!B(b)&&!B("@"+b)){V&&b=="src"&&(a=decodeURI(a));var d=Ja(a);if(d.length>1||Ka(d[0])!==null||rb[b])c.removeAttr(b),d=fa(c.attr("ng:bind-attr")||"{}"),d[rb[b]||b]=a,c.attr("ng:bind-attr",Q(d))}});var P=xa("keydown change",va,jc,Ma(),!0),Sc={text:P,textarea:P,hidden:P,password:P,checkbox:xa("click",ic,function(a,b){var c=b[0];return{get:function(){return!!c.checked}, -set:function(a){c.checked=ma(a)}}},Ma(!1)),radio:xa("click",ic,function(a,b){var c=b[0];return{get:function(){return c.checked?c.value:null},set:function(a){c.checked=a==c.value}}},function(a,b,c){var d=a.get(),e=b.get(),c=c[0];c.checked=!1;c.name=this.$id+"@"+c.name;y(d)&&a.set(d=null);d==null&&e!==null&&a.set(e);b.set(d)}),"select-one":xa("change",va,jc,Ma(null)),"select-multiple":xa("change",va,function(a,b){var c=b.attr("ng:format")||La,d=aa(c).formatter()();return{get:function(){var c=[];k(b[0].options, -function(b){b.selected&&c.push(d.parse(a,b.value))});return c},set:function(c){var f={};k(c,function(b){f[d.format(a,b)]=!0});k(b[0].options,function(a){a.selected=f[a.value]})}}},Ma([]))};O("input",ob);O("textarea",ob);var gd=/^\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+(.*)$/;O("select",function(a){this.descend(!0);this.directives(!0);var b=a.attr("multiple"),c=a.attr("ng:options"),d=W(a.attr("ng:change")|| -""),e;if(!c)return ob.call(this,a);if(!(e=c.match(gd)))throw z("Expected ng:options in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '"+c+"'.");var f=W(e[2]||e[1]),g=e[4]||e[6],h=e[5],i=W(e[3]||""),j=W(e[2]?e[1]:g),l=W(e[7]),m=n(F.createElement("option")),o=n(F.createElement("optgroup")),D=!1;return function(c){var e=[[{element:c,label:""}]],r=this,p=va(r,a);k(c.children(),function(a){a.value==""&&(D={label:n(a).text(),id:""})});c.html("");c.bind("change",function(){var a, -f=l(r)||[],i=c.val(),m=r.$new(),k,o,n,D,s,q;if(b){k=[];D=0;for(q=e.length;DJ;)v.pop().element.remove()}for(;e.length>z;)e.pop()[0].element.remove()}finally{a.$destroy()}})}}); -O("ng:include",function(a){var b=this,c=a.attr("src"),d=a.attr("scope")||"",e=a[0].getAttribute("onload")||"";if(a[0]["ng:compiled"])this.descend(!0),this.directives(!0);else return a[0]["ng:compiled"]=!0,s(function(a,g){var h=0,i=[],j,l;this.$watch(c,function(){h++});this.$watch(function(a){a=a.$eval(d);a!==l&&(l=a,h++)});this.$watch(function(){return h},function(h){for(var l=h.$eval(c),k=h.$eval(d);i.length;)i.pop().$destroy();l?a("GET",l,null,function(a,c){g.html(c);k?j=k:i.push(j=h.$new());b.compile(g)(j); -h.$eval(e)},!1,!0):(j=null,g.html(""))})},{$inject:["$xhr.cache"]})});O("ng:switch",function(a){var b=a.attr("on"),c=a.attr("change"),d={},e,f=a.children(),g=f.length,h,i;if(!b)throw new z("Missing 'on' attribute.");for(;g--;)h=n(f[g]),h.remove(),i=h.attr("ng:switch-when"),u(i)?d[i]=this.compile(h):u(h.attr("ng:switch-default"))&&(e=this.compile(h));f=null;a.html("");return function(a){var f=0,g,h;this.$watch(b,function(b,i){a.html("");if(h=d[i]||e)f++,g&&g.$destroy(),g=b.$new(),g.$eval(c)});this.$watch(function(){return f}, -function(){a.html("");h&&h(g,function(b){a.append(b)})})}});O("a",function(){this.descend(!0);this.directives(!0);return function(a){var b=(a.attr("ng:bind-attr")||"").indexOf('"href":')!==-1;!b&&!a.attr("name")&&!a.attr("href")&&a.attr("href","");a.attr("href")===""&&!b&&a.bind("click",function(a){a.preventDefault()})}});O("@ng:repeat",function(a,b){b.removeAttr("ng:repeat");b.replaceWith(n("<\!-- ng:repeat: "+a+" --\>"));var c=this.compile(b);return function(b){var e=a.match(/^\s*(.+)\s+in\s+(.*)\s*$/), -f,g,h,i;if(!e)throw z("Expected ng:repeat in form of '_item_ in _collection_' but got '"+a+"'.");f=e[1];g=e[2];e=f.match(/^([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\)$/);if(!e)throw z("'item' in 'item in collection' should be identifier or (key, value) but got '"+keyValue+"'.");h=e[3]||e[1];i=e[2];var j=[],l=[b],k=this;this.$watch(function(a){var b=0,d=j.length,a=a.$eval(g),e=xb(a,!0),f=F.createDocumentFragment(),q=db;)j.pop().$destroy(),l.pop().remove()})}});O("@ng:non-bindable",p);O("ng:view",function(a){var b=this;if(a[0]["ng:compiled"])b.descend(!0),b.directives(!0);else return a[0]["ng:compiled"]=!0,ab("$xhr.cache","$route", -function(a,d,e){var f=0;this.$on("$afterRouteChange",function(){f++});this.$watch(function(){return f},function(){var f=d.current&&d.current.template;f?a("GET",f,function(a,c){e.html(c);b.compile(e)(d.current.scope)}):e.html("")})})});O("ng:pluralize",function(a){var b=a.attr("count"),c=a.attr("when"),d=a.attr("offset")||0;return ab("$locale",function(a,f){var g=this,h=g.$eval(c),i={};k(h,function(a,c){i[c]=kb(a.replace(/{}/g,"{{"+b+"-"+d+"}}"))});g.$watch(function(){var c=parseFloat(g.$eval(b)); -return isNaN(c)?"":(h[c]||(c=a.pluralCat(c-d)),i[c](g,f,!0))},function(a,b){f.text(b)})})});var Na;Ba("$browser",function(a){Na||(Na=new Gc(x,n(x.document),n(x.document.body),Tc,a),Na.bind());return Na},{$inject:["$log"]});s(w,{compile:zb,scope:$a,copy:C,extend:s,equals:$,forEach:k,injector:Hb,noop:p,bind:M,toJson:Q,fromJson:fa,identity:da,isUndefined:y,isDefined:v,isString:u,isFunction:q,isObject:I,isNumber:oa,isArray:U,version:{full:"0.10.0",major:0,minor:10,dot:0,codeName:"chicken-hands"},isDate:qa, -lowercase:H,uppercase:Ia});Db();Xa(F).ready(function(){var a=tc(F),b=F,c=a.autobind;c&&(b=u(c)?b.getElementById(c):b,b=zb(b)($a()),c=b.$service("$browser"),a.css?c.addCss(a.base_url+a.css):V<8&&c.addJs(a.ie_compat,a.ie_compat_id),b.$apply())})})(window,document);angular.element(document).find("head").append(''); \ No newline at end of file +(function(W,$,r){'use strict';function m(b,a,c){var d;if(b)if(L(b))for(d in b)d!="prototype"&&d!="length"&&d!="name"&&b.hasOwnProperty(d)&&a.call(c,b[d],d);else if(b.forEach&&b.forEach!==m)b.forEach(a,c);else if(M(b)&&sa(b.length))for(d=0;d=0&&b.splice(c,1);return a}function X(b,a){if(ka(b)||b&&b.$evalAsync&&b.$watch)throw x("Can't copy Window or Scope");if(a){if(b=== +a)throw x("Can't copy equivalent objects or arrays");if(J(b)){for(;a.length;)a.pop();for(var c=0;c2?fa.call(arguments,2):[];return L(a)&&!(a instanceof RegExp)?c.length? +function(){return arguments.length?a.apply(b,c.concat(fa.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}:a}function dc(b,a){var c=a;/^\$+/.test(b)?c=r:ka(a)?c="$WINDOW":a&&$===a?c="$DOCUMENT":a&&a.$evalAsync&&a.$watch&&(c="$SCOPE");return c}function aa(b,a){return JSON.stringify(b,dc,a?" ":null)}function ob(b){return H(b)?JSON.parse(b):b}function Va(b){b&&b.length!==0?(b=G(""+b),b=!(b=="f"||b=="0"||b=="false"||b=="no"||b=="n"||b=="[]")):b=!1;return b} +function wa(b){b=t(b).clone();try{b.html("")}catch(a){}return t("
").append(b).html().match(/^(<[^>]+>)/)[1]}function Wa(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.split("="),d=decodeURIComponent(c[0]),a[d]=E(c[1])?decodeURIComponent(c[1]):!0)});return a}function pb(b){var a=[];m(b,function(b,d){a.push(Xa(d,!0)+(b===!0?"":"="+Xa(b,!0)))});return a.length?a.join("&"):""}function Ya(b){return Xa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Xa(b,a){return encodeURIComponent(b).replace(/%40/gi, +"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(a?null:/%20/g,"+")}function ec(b,a){function c(a){a&&d.push(a)}var d=[b],e,h,g=["ng:app","ng-app","x-ng-app","data-ng-app"],f=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;m(g,function(a){g[a]=!0;c($.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(m(b.querySelectorAll("."+a),c),m(b.querySelectorAll("."+a+"\\:"),c),m(b.querySelectorAll("["+a+"]"),c))});m(d,function(a){if(!e){var b=f.exec(" "+a.className+" ");b?(e=a,h=(b[2]|| +"").replace(/\s+/g,",")):m(a.attributes,function(b){if(!e&&g[b.name])e=a,h=b.value})}});e&&a(e,h?[h]:[])}function qb(b,a){b=t(b);a=a||[];a.unshift("ng");var c=rb(a);c.invoke(["$rootScope","$compile","$injector",function(a,c,h){a.$apply(function(){b.data("$injector",h);c(b)(a)})}]);return c}function Za(b,a){a=a||"_";return b.replace(fc,function(b,d){return(d?a:"")+b.toLowerCase()})}function la(b,a,c){if(!b)throw new x("Argument '"+(a||"?")+"' is "+(c||"required"));return b}function ma(b,a,c){c&&J(b)&& +(b=b[b.length-1]);la(L(b),a,"not a function, got "+(b&&typeof b=="object"?b.constructor.name||"Object":typeof b));return b}function gc(b){function a(a,b,e){return a[b]||(a[b]=e())}return a(a(b,"angular",Object),"module",function(){var b={};return function(d,e,h){e&&b.hasOwnProperty(d)&&(b[d]=null);return a(b,d,function(){function a(c,d,e){return function(){b[e||"push"]([c,d,arguments]);return j}}if(!e)throw x("No module: "+d);var b=[],c=[],k=a("$injector","invoke"),j={_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"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:k,run:function(a){c.push(a);return this}};h&&k(h);return j})}})}function sb(b){return b.replace(hc,function(a,b,d,e){return e?d.toUpperCase():d}).replace(ic,"Moz$1")}function $a(b, +a){function c(){var e;for(var b=[this],c=a,g,f,i,k,j,n,l;b.length;){g=b.shift();f=0;for(i=g.length;f 
"+b;a.removeChild(a.firstChild);ab(this,a.childNodes);this.remove()}else ab(this,b)}function bb(b){return b.cloneNode(!0)}function na(b){tb(b);for(var a=0,b=b.childNodes||[];a-1}function ub(b,a){a&&m(a.split(" "),function(a){b.className=T((" "+b.className+" ").replace(/[\n\t]/g," ").replace(" "+T(a)+" "," "))})}function vb(b,a){a&&m(a.split(" "),function(a){if(!Aa(b,a))b.className=T(b.className+" "+T(a))})}function ab(b,a){if(a)for(var a=!a.nodeName&&E(a.length)&&!ka(a)?a:[a],c=0;c4096&&d.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+c+" > 4096 bytes)!"),Y.length>20&&d.warn("Cookie '"+a+"' possibly not set or overflowed because too many cookies were already set ("+Y.length+" > 20 )")}else{if(k.cookie!==P){P=k.cookie;c=P.split("; ");Y={};for(f=0;f0&&(Y[unescape(e.substring(0,i))]=unescape(e.substring(i+ +1)))}return Y}};i.defer=function(a,b){var c;p++;c=l(function(){delete q[c];h(a)},b||0);q[c]=!0;return c};i.defer.cancel=function(a){return q[a]?(delete q[a],u(a),h(v),!0):!1};i.baseHref=function(){var b=a.find("base").attr("href");return b?b.replace(/^https?\:\/\/[^\/]*/,""):b}}function rc(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new qc(b,d,d.find("body"),a,c)}]}function sc(){this.$get=function(){function b(b,d){function e(a){if(a!=n){if(l){if(l==a)l=a.n}else l= +a;h(a.n,a.p);h(a,n);n=a;n.n=null}}function h(a,b){if(a!=b){if(a)a.p=b;if(b)b.n=a}}if(b in a)throw x("cacheId "+b+" taken");var g=0,f=B({},d,{id:b}),i={},k=d&&d.capacity||Number.MAX_VALUE,j={},n=null,l=null;return a[b]={put:function(a,b){var c=j[a]||(j[a]={key:a});e(c);y(b)||(a in i||g++,i[a]=b,g>k&&this.remove(l.key))},get:function(a){var b=j[a];if(b)return e(b),i[a]},remove:function(a){var b=j[a];if(b==n)n=b.p;if(b==l)l=b.n;h(b.n,b.p);delete j[a];delete i[a];g--},removeAll:function(){i={};g=0;j= +{};n=l=null},destroy:function(){j=f=i=null;delete a[b]},info:function(){return B({},f,{size:g})}}}var a={};b.info=function(){var b={};m(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function tc(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function zb(b){var a={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,h=/\<\\>/i,g=/^\<[\s\S]*\>$/;this.directive=function i(d,e){H(d)?(la(e,"directive"), +a.hasOwnProperty(d)||(a[d]=[],b.factory(d+c,["$injector","$exceptionHandler",function(b,c){var e=[];m(a[d],function(a){try{var i=b.invoke(a);if(L(i))i={compile:z(i)};else if(!i.compile&&i.link)i.compile=z(i.link);i.priority=i.priority||0;i.name=i.name||d;i.require=i.require||i.controller&&i.name;i.restrict=i.restrict||"A";e.push(i)}catch(h){c(h)}});return e}])),a[d].push(e)):m(d,nb(i));return this};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller", +function(b,k,j,n,l,u,q){function p(a,b,c){a instanceof t||(a=t(a));m(a,function(b,c){b.nodeType==3&&(a[c]=t(b).wrap("").parent()[0])});var d=D(a,b,a,c);return function(b,c){la(b,"scope");var e=c?pa.clone.call(a):a;F(e.data("$scope",b),"ng-scope");c&&c(e,b);d&&d(b,e,e);return e}}function o(a,b){throw x("Unsupported '"+b+"' for '"+a+"'.");}function F(a,b){try{a.addClass(b)}catch(c){}}function D(a,b,c,d){function e(a,c,d,h){for(var g,j,k,l,n,S=0,u=0,o=i.length;SA.priority)break;if(v=A.scope)R("isolated scope",Q,A,s),M(v)&&(F(s,"ng-isolate-scope"),Q=A),F(s,"ng-scope"),w=w||A;N=A.name;if(v=A.controller)E=E||{},R("'"+N+"' controller",E[N],A,s),E[N]=A;if(v=A.transclude)R("transclusion",B,A,s),B=A,l=A.priority,v=="element"?(v=t(b),b=(s=c.$$element=t("<\!-- "+N+": "+c[N]+" --\>"))[0],ea(e,t(v[0]),b),z=p(v,d,l)):(v=t(bb(b)),s.html(""),z=p(v.contents(),d)); +if(v=A.template)R("template",D,A,s),D=A,N=v.replace(h,s.html()),b=t(N)[0],A.replace?(ea(e,s,b),I={$attr:{}},a=a.concat(K(b,a.splice(G+1,a.length-(G+1)),I)),Y(c,I),I=a.length):s.html(N);if(A.templateUrl)R("template",D,A,s),D=A,Ea=P(a.splice(G,a.length-G),k,s,c,e,A.replace,z),I=a.length;else if(A.compile)try{C=A.compile(s,c,z),L(C)?i(null,C):C&&i(C.pre,C.post)}catch(O){j(O,wa(s))}if(A.terminal)k.terminal=!0,l=Math.max(l,A.priority)}C=Ea||k;C.scope=w&&w.scope;C.transclude=B&&z;return C}function w(d, +e,h,g){var k=!1;if(a.hasOwnProperty(e))for(var l,e=b.get(e+c),n=0,u=e.length;nl.priority)&&l.restrict.indexOf(h)!=-1)d.push(l),k=!0}catch(o){j(o)}return k}function Y(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;m(a,function(d,e){e.charAt(0)!="$"&&(b[e]&&(d+=(e==="style"?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});m(b,function(b,i){i=="class"?F(e,b):i=="style"?e.attr("style",e.attr("style")+";"+b):i.charAt(0)!="$"&&!a.hasOwnProperty(i)&&(a[i]=b,d[i]=c[i])})}function P(a,b,c, +d,e,i,j){var k=[],u,o,q=c[0],w=a.shift(),qa=B({},w,{templateUrl:null,transclude:null}),p=c.html();c.html("");n.get(w.templateUrl,{cache:l}).success(function(l){l=T(l).replace(h,p);if(i&&!l.match(g))throw x("Template must have exactly one root element: "+l);var n,w;i?(w={$attr:{}},n=t(l)[0],ea(e,c,n),K(c[0],a,w),Y(d,w)):(n=c[0],c.html(l));a.unshift(qa);u=s(a,c,d,j);for(o=D(c.contents(),j);k.length;){var F=k.pop(),l=k.pop();w=k.pop();var m=k.pop(),P=n;w!==q&&(P=bb(n),ea(l,t(w),P));u(function(){b(o, +m,P,e,F)},m,P,e,F)}k=null}).error(function(a,b,c,d){throw x("Failed to load template: "+d.url);});return function(a,c,d,e,i){k?(k.push(c),k.push(d),k.push(e),k.push(i)):u(function(){b(o,c,d,e,i)},c,d,e,i)}}function Q(a,b){return b.priority-a.priority}function R(a,b,c,d){if(b)throw x("Multiple directives ["+b.name+", "+c.name+"] asking for "+a+" on: "+wa(d));}function Ea(a,b){var c=k(b,!0);c&&a.push({priority:0,compile:z(function(a,b){var d=b.parent(),e=d.data("$binding")||[];e.push(c);F(d.data("$binding", +e),"ng-binding");a.$watch(c,function(a){b[0].nodeValue=a})})})}function N(a,b,c,d){var e=k(c,!0);e&&b.push({priority:100,compile:z(function(a,b,c){d==="class"&&(e=k(c[d],!0));c.$$observers[d]=[];c[d]=r;a.$watch(e,function(a){c.$set(d,a)})})})}function ea(a,b,c){var d=b[0],e=d.parentNode,i,h;if(a){i=0;for(h=a.length;i0){var e=Q[0],i=e.text;if(i==a||i==b||i==c||i==d||!a&&!b&&!c&&!d)return e}return!1}function f(b,c,d,i){return(b=g(b,c,d,i))?(a&&!b.json&&e("is not valid json",b),Q.shift(),b):!1}function i(a){f(a)||e("is unexpected, expecting ["+a+"]",g())}function k(a,b){return function(c,d){return a(c, +d,b)}}function j(a,b,c){return function(d,e){return b(d,e,a,c)}}function n(){for(var a=[];;)if(Q.length>0&&!g("}",")",";","]")&&a.push(y()),!f(";"))return a.length==1?a[0]:function(b,c){for(var d,e=0;e","<=",">="))a=j(a,b.fn,o());return a}function m(){for(var a=D(),b;b=f("*","/","%");)a=j(a,b.fn,D());return a}function D(){var a;return f("+")?K():(a=f("-"))?j(Y,a.fn,D()):(a=f("!"))?k(a.fn,D()):K()}function K(){var a;if(f("("))a=y(),i(")");else if(f("["))a=s();else if(f("{"))a= +w();else{var b=f();(a=b.fn)||e("not a primary expression",b)}for(var c;b=f("(","[",".");)b.text==="("?(a=t(a,c),c=null):b.text==="["?(c=a,a=ea(a)):b.text==="."?(c=a,a=N(a)):e("IMPOSSIBLE");return a}function s(){var a=[];if(h().text!="]"){do a.push(R());while(f(","))}i("]");return function(b,c){for(var d=[],e=0;e1;d++){var e=a.shift(),h=b[e];h||(h={},b[e]=h);b=h}return b[a.shift()]=c}function fb(b,a,c){if(!a)return b;for(var a=a.split("."),d,e=b,h=a.length,g=0;g7),hasEvent:function(c){if(y(a[c])){var d= +b.document.createElement("div");a[c]="on"+c in d}return a[c]},csp:!1}}]}function Qc(){this.$get=z(W)}function Ib(b){var a={},c,d,e;if(!b)return a;m(b.split("\n"),function(b){e=b.indexOf(":");c=G(T(b.substr(0,e)));d=T(b.substr(e+1));c&&(a[c]?a[c]+=", "+d:a[c]=d)});return a}function Jb(b){var a=M(b)?b:r;return function(c){a||(a=Ib(b));return c?a[G(c)]||null:a}}function Kb(b,a,c){if(L(c))return c(b,a);m(c,function(c){b=c(b,a)});return b}function Rc(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/, +d=this.defaults={transformResponse:[function(d){H(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=ob(d,!0)));return d}],transformRequest:[function(a){return M(a)&&Ra.apply(a)!=="[object File]"?aa(a):a}],headers:{common:{Accept:"application/json, text/plain, */*","X-Requested-With":"XMLHttpRequest"},post:{"Content-Type":"application/json"},put:{"Content-Type":"application/json"}}},e=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a, +b,c,i,k,j){function n(a){function c(a){var b=B({},a,{data:Kb(a.data,a.headers,f)});return 200<=a.status&&a.status<300?b:k.reject(b)}a.method=ia(a.method);var e=a.transformRequest||d.transformRequest,f=a.transformResponse||d.transformResponse,i=d.headers,i=B({"X-XSRF-TOKEN":b.cookies()["XSRF-TOKEN"]},i.common,i[G(a.method)],a.headers),e=Kb(a.data,Jb(i),e),h;y(a.data)&&delete i["Content-Type"];h=l(a,e,i);h=h.then(c,c);m(p,function(a){h=a(h)});h.success=function(b){h.then(function(c){b(c.data,c.status, +c.headers,a)});return h};h.error=function(b){h.then(null,function(c){b(c.data,c.status,c.headers,a)});return h};return h}function l(b,c,d){function e(a,b,c){m&&(200<=a&&a<300?m.put(r,[a,b,Ib(c)]):m.remove(r));f(b,a,c);i.$apply()}function f(a,c,d){c=Math.max(c,0);(200<=c&&c<300?l.resolve:l.reject)({data:a,status:c,headers:Jb(d),config:b})}function g(){var a=Ta(n.pendingRequests,b);a!==-1&&n.pendingRequests.splice(a,1)}var l=k.defer(),j=l.promise,m,p,r=u(b.url,b.params);n.pendingRequests.push(b);j.then(g, +g);b.cache&&b.method=="GET"&&(m=M(b.cache)?b.cache:q);if(m)if(p=m.get(r))if(p.then)return p.then(g,g),p;else J(p)?f(p[1],p[0],X(p[2])):f(p,200,{});else m.put(r,j);p||a(b.method,r,c,e,d,b.timeout,b.withCredentials);return j}function u(a,b){if(!b)return a;var c=[];$b(b,function(a,b){a==null||a==r||(M(a)&&(a=aa(a)),c.push(encodeURIComponent(b)+"="+encodeURIComponent(a)))});return a+(a.indexOf("?")==-1?"?":"&")+c.join("&")}var q=c("$http"),p=[];m(e,function(a){p.push(H(a)?j.get(a):j.invoke(a))});n.pendingRequests= +[];(function(a){m(arguments,function(a){n[a]=function(b,c){return n(B(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){m(arguments,function(a){n[a]=function(b,c,d){return n(B(d||{},{method:a,url:b,data:c}))}})})("post","put");n.defaults=d;return n}]}function Sc(){this.$get=["$browser","$window","$document",function(b,a,c){return Tc(b,Uc,b.defer,a.angular.callbacks,c[0],a.location.protocol.replace(":",""))}]}function Tc(b,a,c,d,e,h){function g(a,b){var c=e.createElement("script"), +d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;da?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=d;e.body.appendChild(c)}return function(e,i,k,j,n,l,u){function q(a,c,d,e){c=(i.match(Cb)||["",h])[1]=="file"?d?200:404:c;a(c==1223?204:c,d,e);b.$$completeOutstandingRequest(v)}b.$$incOutstandingRequestCount();i=i||b.url();if(G(e)=="jsonp"){var p="_"+(d.counter++).toString(36);d[p]=function(a){d[p].data=a};g(i.replace("JSON_CALLBACK", +"angular.callbacks."+p),function(){d[p].data?q(j,200,d[p].data):q(j,-2);delete d[p]})}else{var o=new a;o.open(e,i,!0);m(n,function(a,b){a&&o.setRequestHeader(b,a)});var r;o.onreadystatechange=function(){o.readyState==4&&q(j,r||o.status,o.responseText,o.getAllResponseHeaders())};if(u)o.withCredentials=!0;o.send(k||"");l>0&&c(function(){r=-1;o.abort()},l)}}}function Vc(){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(b){return b===1?"one":"other"}}}}function Lb(b){function a(a,e){return b.factory(a+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Mb);a("date",Nb);a("filter",Wc);a("json",Xc);a("limitTo",Yc);a("lowercase",Zc);a("number", +Ob);a("orderBy",Pb);a("uppercase",$c)}function Wc(){return function(b,a){if(!(b instanceof Array))return b;var c=[];c.check=function(a){for(var b=0;b-1;case "object":for(var c in a)if(c.charAt(0)!=="$"&&d(a[c],b))return!0;return!1;case "array":for(c=0;c=j+n)for(var k=g.length-j,l=0;l0||e>-c)e+=c;e===0&&c==-12&&(e= +12);return jb(e,a,d)}}function Ja(b,a){return function(c,d){var e=c["get"+b](),h=ia(a?"SHORT"+b:b);return d[h][e]}}function Nb(b){function a(a){var b;if(b=a.match(c)){var a=new Date(0),h=0,g=0;b[9]&&(h=C(b[9]+b[10]),g=C(b[9]+b[11]));a.setUTCFullYear(C(b[1]),C(b[2])-1,C(b[3]));a.setUTCHours(C(b[4]||0)-h,C(b[5]||0)-g,C(b[6]||0),C(b[7]||0))}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;return function(c,e){var h="",g=[],f,i,e=e|| +"mediumDate",e=b.DATETIME_FORMATS[e]||e;H(c)&&(c=ad.test(c)?C(c):a(c));sa(c)&&(c=new Date(c));if(!ja(c))return c;for(;e;)(i=bd.exec(e))?(g=g.concat(fa.call(i,1)),e=g.pop()):(g.push(e),e=null);m(g,function(a){f=cd[a];h+=f?f(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return h}}function Xc(){return function(b){return aa(b,!0)}}function Yc(){return function(b,a){if(!(b instanceof Array))return b;var a=C(a),c=[],d,e;if(!b||!(b instanceof Array))return c;a>b.length?a=b.length:a< +-b.length&&(a=-b.length);a>0?(d=0,e=a):(d=b.length+a,e=b.length);for(;dn?(d.$setValidity("maxlength",!1),r):(d.$setValidity("maxlength",!0),a)};d.$parsers.push(c);d.$formatters.push(c)}}function kb(b,a){b="ngClass"+b;return O(function(c,d,e){c.$watch(e[b],function(b,e){if(a===!0||c.$index%2===a)e&&b!==e&&(M(e)&&!J(e)&&(e=Sa(e,function(a,b){if(a)return b})),d.removeClass(J(e)?e.join(" "):e)),M(b)&&!J(b)&&(b=Sa(b, +function(a,b){if(a)return b})),b&&d.addClass(J(b)?b.join(" "):b)},!0)})}var G=function(b){return H(b)?b.toLowerCase():b},ia=function(b){return H(b)?b.toUpperCase():b},x=W.Error,da=C((/msie (\d+)/.exec(G(navigator.userAgent))||[])[1]),t,ga,fa=[].slice,Pa=[].push,Ra=Object.prototype.toString,Ub=W.angular||(W.angular={}),oa,Ab,Z=["0","0","0"];v.$inject=[];ua.$inject=[];Ab=da<9?function(b){b=b.nodeName?b:b[0];return b.scopeName&&b.scopeName!="HTML"?ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName? +b.nodeName:b[0].nodeName};var fc=/[A-Z]/g,dd={full:"1.0.0rc7",major:1,minor:0,dot:0,codeName:"rc-generation"},ya={},xa="ng-"+(new Date).getTime(),jc=1,ed=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},cb=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},hc=/([\:\-\_]+(.))/g,ic=/^moz([A-Z])/,pa=U.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;this.bind("DOMContentLoaded", +a);U(W).bind("load",a)},toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return b>=0?t(this[b]):t(this[this.length+b])},length:0,push:Pa,sort:[].sort,splice:[].splice},Ca={};m("multiple,selected,checked,disabled,readOnly,required".split(","),function(b){Ca[G(b)]=b});var yb={};m("input,select,option,textarea,button,form".split(","),function(b){yb[ia(b)]=!0});m({data:za,inheritedData:Ba,scope:function(b){return Ba(b,"$scope")},controller:wb,injector:function(b){return Ba(b, +"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Aa,css:function(b,a,c){a=sb(a);if(E(c))b.style[a]=c;else{var d;da<=8&&(d=b.currentStyle&&b.currentStyle[a],d===""&&(d="auto"));d=d||b.style[a];da<=8&&(d=d===""?r:d);return d}},attr:function(b,a,c){var d=G(a);if(Ca[d])if(E(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:r;else if(E(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a, +2),b===null?r:b},prop:function(b,a,c){if(E(c))b[a]=c;else return b[a]},text:B(da<9?function(b,a){if(b.nodeType==1){if(y(a))return b.innerText;b.innerText=a}else{if(y(a))return b.nodeValue;b.nodeValue=a}}:function(b,a){if(y(a))return b.textContent;b.textContent=a},{$dv:""}),val:function(b,a){if(y(a))return b.value;b.value=a},html:function(b,a){if(y(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a, +c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Hc={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'},ib={},Uc=W.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw new x("This browser does not support XMLHttpRequest.");};Lb.$inject=["$provide"];Mb.$inject=["$locale"];Ob.$inject=["$locale"];var Rb=".",cd={yyyy:I("FullYear",4), +yy:I("FullYear",2,0,!0),y:I("FullYear",1),MMMM:Ja("Month"),MMM:Ja("Month",!0),MM:I("Month",2,1),M:I("Month",1,1),dd:I("Date",2),d:I("Date",1),HH:I("Hours",2),H:I("Hours",1),hh:I("Hours",2,-12),h:I("Hours",1,-12),mm:I("Minutes",2),m:I("Minutes",1),ss:I("Seconds",2),s:I("Seconds",1),EEEE:Ja("Day"),EEE:Ja("Day",!0),a:function(a,c){return a.getHours()<12?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=a.getTimezoneOffset();return jb(a/60,2)+jb(Math.abs(a%60),2)}},bd=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, +ad=/^\d+$/;Nb.$inject=["$locale"];var Zc=z(G),$c=z(ia);Pb.$inject=["$parse"];var fd=z({restrict:"E",compile:function(a,c){c.href||c.$set("href","");return function(a,c){c.bind("click",function(a){c.attr("href")||a.preventDefault()})}}}),lb={};m(Ca,function(a,c){var d=ba("ng-"+c);lb[d]=function(){return{priority:100,compile:function(){return function(a,h,g){g.$$observers[c]=[];a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});m(["src","href"],function(a){var c=ba("ng-"+a);lb[c]=function(){return{priority:99, +compile:function(){return function(d,e,h){d=h[c];d==r?(h.$$observers[a]=[],h.$observe(c,function(c){h.$set(a,c)})):h.$set(a,d)}}}}});var Ma={$addControl:v,$removeControl:v,$setValidity:v,$setDirty:v};Sb.$inject=["$element","$attrs","$scope"];var Pa={name:"form",restrict:"E",controller:Sb,compile:function(){return{pre:function(a,c,d,e){d.action||c.bind("submit",function(a){a.preventDefault()});var h=c.parent().controller("form"),g=d.name||d.ngForm;g&&(a[g]=e);h&&c.bind("$destroy",function(){h.$removeControl(e); +g&&(a[g]=r);B(e,Ma)})}}}},gd=z(Pa),hd=z(B(X(Pa),{restrict:"EAC"})),id=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,jd=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/,kd=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Wb={text:Oa,number:function(a,c,d,e,h,g){Oa(a,c,d,e,h,g);e.$parsers.push(function(a){var c=V(a);return c||kd.test(a)?(e.$setValidity("number",!0),a===""?null:c?a:parseFloat(a)):(e.$setValidity("number",!1),r)});e.$formatters.push(function(a){return V(a)? +"":""+a});if(d.min){var f=parseFloat(d.min),a=function(a){return!V(a)&&ai?(e.$setValidity("max",!1),r):(e.$setValidity("max",!0),a)};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(a){return V(a)||sa(a)?(e.$setValidity("number",!0),a):(e.$setValidity("number",!1),r)})},url:function(a,c,d,e,h,g){Oa(a,c,d,e,h,g);a= +function(a){return V(a)||id.test(a)?(e.$setValidity("url",!0),a):(e.$setValidity("url",!1),r)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,h,g){Oa(a,c,d,e,h,g);a=function(a){return V(a)||jd.test(a)?(e.$setValidity("email",!0),a):(e.$setValidity("email",!1),r)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){y(d.name)&&c.attr("name",ta());c.bind("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked= +d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var h=d.ngTrueValue,g=d.ngFalseValue;H(h)||(h=!0);H(g)||(g=!1);c.bind("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$formatters.push(function(a){return a===h});e.$parsers.push(function(a){return a?h:g})},hidden:v,button:v,submit:v,reset:v},Xb=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,h,g){g&& +(Wb[G(h.type)]||Wb.text)(d,e,h,g,c,a)}}}],La="ng-valid",Ka="ng-invalid",Na="ng-pristine",Tb="ng-dirty",ld=["$scope","$exceptionHandler","$attrs","ngModel","$element",function(a,c,d,e,h){function g(a,c){c=c?"-"+Za(c,"-"):"";h.removeClass((a?Ka:La)+c).addClass((a?La:Ka)+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.$render=v;this.$name=d.name;var f=h.inheritedData("$formController")|| +Ma,i=0,k=this.$error={};h.addClass(Na);g(!0);this.$setValidity=function(a,c){if(k[a]!==!c){if(c){if(k[a]&&i--,!i)g(!0),this.$valid=!0,this.$invalid=!1}else g(!1),this.$invalid=!0,this.$valid=!1,i++;k[a]=!c;g(c,a);f.$setValidity(a,c,this)}};this.$setViewValue=function(a){this.$viewValue=a;if(this.$pristine)this.$dirty=!0,this.$pristine=!1,h.removeClass(Na).addClass(Tb),f.$setDirty();m(this.$parsers,function(c){a=c(a)});if(this.$modelValue!==a)this.$modelValue=a,e(a),m(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})}; +var j=this;a.$watch(function(){return e()},function(a){if(j.$modelValue!==a){var c=j.$formatters,d=c.length;for(j.$modelValue=a;d--;)a=c[d](a);if(j.$viewValue!==a)j.$viewValue=a,j.$render()}})}],md=[function(){return{inject:{ngModel:"accessor"},require:["ngModel","^?form"],controller:ld,link:function(a,c,d,e){var h=e[0],g=e[1]||Ma;g.$addControl(h);c.bind("$destroy",function(){g.$removeControl(h)})}}}],nd=z({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), +Yb=[function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){var h=function(a){if(d.required&&(V(a)||a===!1))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(h);e.$parsers.unshift(h);d.$observe("required",function(){h(e.$viewValue)})}}}}],od=function(){return{require:"ngModel",link:function(a,c,d,e){var h=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",",g=function(a){var c=[];a&&m(a.split(h),function(a){a&&c.push(T(a))});return c};e.$parsers.push(g); +e.$formatters.push(function(a){return J(a)&&!ca(g(e.$viewValue),a)?a.join(", "):r})}}},pd=/^(true|false|\d+)$/,qd=[function(){return{priority:100,compile:function(a,c){return pd.test(c.ngValue)?function(a,c,h){h.$set("value",a.$eval(h.ngValue))}:function(a,c,h){h.$$observers.value=[];a.$watch(h.ngValue,function(a){h.$set("value",a,!1)})}}}}],rd=O(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==r?"":a)})}),sd=["$interpolate",function(a){return function(c, +d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],td=[function(){return function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBindHtmlUnsafe);a.$watch(d.ngBindHtmlUnsafe,function(a){c.html(a||"")})}}],ud=kb("",!0),vd=kb("Odd",0),wd=kb("Even",1),xd=O({compile:function(a,c){c.$set("ngCloak",r);a.removeClass("ng-cloak")}}),yd=[function(){return{scope:!0,controller:"@"}}],zd=["$sniffer",function(a){return{priority:1E3, +compile:function(){a.csp=!0}}}],Zb={};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave".split(" "),function(a){var c=ba("ng-"+a);Zb[c]=["$parse",function(d){return function(e,h,g){var f=d(g[c]);h.bind(G(a),function(a){e.$apply(function(){f(e,{$event:a})})})}}]});var Ad=O(function(a,c,d){c.bind("submit",function(){a.$apply(d.ngSubmit)})}),Bd=["$http","$templateCache","$anchorScroll","$compile",function(a,c,d,e){return{restrict:"ECA",terminal:!0,compile:function(h, +g){var f=g.ngInclude||g.src,i=g.onload||"",k=g.autoscroll;return function(h,g){var l=0,m,q=function(){m&&(m.$destroy(),m=null);g.html("")};h.$watch(f,function(f){var o=++l;f?a.get(f,{cache:c}).success(function(a){o===l&&(m&&m.$destroy(),m=h.$new(),g.html(a),e(g.contents())(m),E(k)&&(!k||h.$eval(k))&&d(),m.$emit("$includeContentLoaded"),h.$eval(i))}).error(function(){o===l&&q()}):q()})}}}}],Cd=O({compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Dd=O({terminal:!0,priority:1E3}), +Ed=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,h,g){var f=g.count,i=h.attr(g.$attr.when),k=g.offset||0,j=e.$eval(i),n={};m(j,function(a,e){n[e]=c(a.replace(d,"{{"+f+"-"+k+"}}"))});e.$watch(function(){var c=parseFloat(e.$eval(f));return isNaN(c)?"":(j[c]||(c=a.pluralCat(c-k)),n[c](e,h,!0))},function(a){h.text(a)})}}}],Fd=O({transclude:"element",priority:1E3,terminal:!0,compile:function(a,c,d){return function(a,c,g){var f=g.ngRepeat,g=f.match(/^\s*(.+)\s+in\s+(.*)\s*$/), +i,k,j;if(!g)throw x("Expected ngRepeat in form of '_item_ in _collection_' but got '"+f+"'.");f=g[1];i=g[2];g=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!g)throw x("'item' in 'item in collection' should be identifier or (key, value) but got '"+f+"'.");k=g[3]||g[1];j=g[2];var n=new eb;a.$watch(function(a){var e,f,g=a.$eval(i),m=bc(g,!0),r,v=new eb,t,s,w,y,x=c;if(J(g))w=g||[];else{w=[];for(t in g)g.hasOwnProperty(t)&&t.charAt(0)!="$"&&w.push(t);w.sort()}e=0;for(f=w.length;ez;)t.pop().element.remove()}for(;v.length>x;)v.pop()[0].element.remove()}var g;if(!(g=p.match(d)))throw x("Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '"+p+"'.");var j=c(g[2]||g[1]),k=g[4]||g[6],l=g[5],m=c(g[3]||""),n=c(g[2]?g[1]:k),u=c(g[7]),v=[[{element:f,label:""}]];o&&(a(o)(e),o.removeClass("ng-scope"),o.remove());f.html("");f.bind("change",function(){e.$apply(function(){var a,c=u(e)||[],d={},g,i, +j,m,o,p;if(q){i=[];m=0;for(p=v.length;m@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\\:form{display:block;}'); From 386f29f2f9e6b797a98c3827903ef4b8b85c0063 Mon Sep 17 00:00:00 2001 From: Eric Bidelman Date: Wed, 2 May 2012 23:59:40 -0700 Subject: [PATCH 2/3] Converting tabs to spaces --- architecture-examples/angularjs/index.html | 94 +++++++++++----------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/architecture-examples/angularjs/index.html b/architecture-examples/angularjs/index.html index b1203f54c9..54728f309c 100644 --- a/architecture-examples/angularjs/index.html +++ b/architecture-examples/angularjs/index.html @@ -1,54 +1,54 @@ - - AngularJS - TodoMVC - - - + + AngularJS - TodoMVC + + + -
-
-

Todos

-
- -
-
-
- - -
    -
  • -
    - - - -
    -
    - -
    -
  • -
-
- -
-
- Double-click to edit a todo. -
- - - - - +
+
+

Todos

+
+ +
+
+
+ + +
    +
  • +
    + + + +
    +
    + +
    +
  • +
+
+ +
+
+ Double-click to edit a todo. +
+ + + + + \ No newline at end of file From 1fb77fb0bb772fc3aa16e27a871a82839690c970 Mon Sep 17 00:00:00 2001 From: Eric Bidelman Date: Thu, 3 May 2012 15:21:28 -0700 Subject: [PATCH 3/3] Using watch instead of explicit calls --- architecture-examples/angularjs/js/controllers.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/architecture-examples/angularjs/js/controllers.js b/architecture-examples/angularjs/js/controllers.js index 9dfd4e26d7..046bf3e848 100644 --- a/architecture-examples/angularjs/js/controllers.js +++ b/architecture-examples/angularjs/js/controllers.js @@ -4,7 +4,9 @@ var todomvc = angular.module('todomvc', []); App.Controllers.TodoController = function($scope) { $scope.todos = retrieveStore(); - //$scope.todos = retrieveStore(); + + // Call updateStore() whenever the todos array changes. + $scope.$watch('todos', updateStore, true); $scope.todoForms = { 0: "You're done!", @@ -27,10 +29,6 @@ App.Controllers.TodoController = function($scope) { } }; - //not sure if its intended to do so. However, we need a hook to update the store - //whenever angular changes any properties - //$scope.$watch($scope.todos, updateStore); - $scope.addTodo = function() { if (this.newTodo.trim().length === 0) { return; @@ -43,8 +41,6 @@ App.Controllers.TodoController = function($scope) { }); this.newTodo = ''; - - updateStore(); }; $scope.editTodo = function(todo) { @@ -61,7 +57,6 @@ App.Controllers.TodoController = function($scope) { } else { todo.editing = false; } - updateStore(); }; $scope.removeTodo = function(todo) { @@ -70,8 +65,6 @@ App.Controllers.TodoController = function($scope) { $scope.todos.splice(i, 1); } } - - updateStore(); }; $scope.remainingTodos = function() { @@ -88,7 +81,6 @@ App.Controllers.TodoController = function($scope) { $scope.clearDoneTodos = function() { $scope.todos = $scope.remainingTodos(); - updateStore(); }; $scope.markAllDone = function() {