diff options
| -rw-r--r-- | angular-minified.js | 170 | ||||
| -rw-r--r-- | angular.js | 56 | ||||
| -rw-r--r-- | example/tweeter/tweeter_addressbook.html | 4 | ||||
| -rw-r--r-- | example/tweeter/tweeterclient.js | 4 | ||||
| -rw-r--r-- | src/Filters.js | 27 | ||||
| -rw-r--r-- | test/FiltersTest.js | 11 |
6 files changed, 143 insertions, 129 deletions
diff --git a/angular-minified.js b/angular-minified.js index f590b704..ccceb4ec 100644 --- a/angular-minified.js +++ b/angular-minified.js @@ -1,99 +1,99 @@ -function J(){return function(){}}function K(o){return function(){return o}} +function K(){return function(){}}function L(o){return function(){return o}} (function(o,y){function n(){}function w(a,b,c){var d=o.console;switch(arguments.length){case 1:d.log(a);break;case 2:d.log(a,b);break;default:d.log(a,b,c);break}}function W(a,b,c){var d=o.console;switch(arguments.length){case 1:d.error(a);break;case 2:d.error(a,b);break;default:d.error(a,b,c);break}}function da(a,b){var c=y.createElement("div");c.className=a;for(var d=a="",e=0;e<b.length;e++){var f=b[e];a+=d+(typeof f=="string"?f:z(f));d=" "}c.appendChild(y.createTextNode(a));R.appendChild(c)}function ea(a){switch(a.nodeName){case "OPTION":case "PRE":case "TITLE":return true; -default:return false}}function fa(a,b){if(ea(a))if(X)a.innerText=b;else a.textContent=b;else a.innerHTML=b}function L(a){if(!a||!a.replace)return a;return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Da(a){if(!a||!a.replace)return a;return a.replace(/</g,"<").replace(/>/g,">").replace(/\"/g,""")}function ga(a,b){if(!a)throw"Missing this";if(!_.isFunction(b))throw"Missing function";return function(){return b.apply(a,arguments)}}function Ea(a,b){return function(){for(var c= +default:return false}}function fa(a,b){if(ea(a))if(X)a.innerText=b;else a.textContent=b;else a.innerHTML=b}function D(a){if(!a||!a.replace)return a;return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Da(a){if(!a||!a.replace)return a;return a.replace(/</g,"<").replace(/>/g,">").replace(/\"/g,""")}function ga(a,b){if(!a)throw"Missing this";if(!_.isFunction(b))throw"Missing function";return function(){return b.apply(a,arguments)}}function Ea(a,b){return function(){for(var c= [this],d=0;d<arguments.length;d++)c.push(arguments[d]);return b.apply(a,c)}}function ha(a){var b=y.createElement("div");b.appendChild(a);var c=b.innerHTML;b.removeChild(a);return c}function Y(a){var b=(""+a).toLowerCase();if(b=="f"||b=="0"||b=="false"||b=="no")a=false;return!!a}function Z(a,b){for(var c in a){var d=b[c],e=typeof d;if(e=="undefined")b[c]=O(z(a[c]));else e=="object"&&d.constructor!=array&&c.substring(0,1)!="$"&&Z(a[c],d)}}function ia(a,b,c){this.document=k(a);this.head=k(b);this.j= -c;this.location=o.location}function ja(a){this.location=a;this.delay=25;this.setTimeout=function(b,c){o.setTimeout(b,c)};this.La=function(b){return b};this.L=a.href}function G(a,b,c){var d=_.last(b);p(c,function(e){d[e]=_[e]});m[a]=m[a]||{};p(b,function(e){S(m[a],e)})}function x(a,b,c,d){this.B=a;this.pa=c;this.anchor={};this.Oc=b;this.j=d||{};this.bb=[]}function P(a,b){this.document=a;this.ca=b;this.window=o;this.D=[]}function T(a,b,c){this.post=a;this.db=b;this.A={P:[]};this.anchor=c;this.S=[]} -function z(a,b){var c=[];$(c,a,b?"\n ":null);return c.join("")}function O(a){try{var b=new D(a,true),c=b.aa();b.I();return c()}catch(d){W("fromJson error: ",a,d);throw d;}}function $(a,b,c){var d=typeof b;if(b===null)a.push("null");else if(d!=="function")if(d==="boolean")a.push(""+b);else if(d==="number")isNaN(b)?a.push("null"):a.push(""+b);else if(d==="string")return a.push(m.String.quoteUnicode(b));else if(d==="object")if(b instanceof Array){a.push("[");var e=b.length;d=false;for(var f=0;f<e;f++){var g= -b[f];d&&a.push(",");typeof g=="function"||typeof g=="undefined"?a.push("null"):$(a,g,c);d=true}a.push("]")}else if(b instanceof Date)a.push(m.String.quoteUnicode(m.Date.toString(b)));else{a.push("{");c&&a.push(c);d=false;f=c?c+" ":false;g=[];for(var h in b)h.indexOf("$$")!==0&&g.push(h);g.sort();for(h=0;h<g.length;h++){var i=g[h];try{e=b[i];if(typeof e!="function"){if(d){a.push(",");c&&a.push(c)}a.push(m.String.quote(i));a.push(":");$(a,e,f);d=true}}catch(j){}}a.push("}")}}function E(a,b){this.$$entity= -a;this.R(b||{});this.Q=a.title;this.hb()}function F(a,b){this.text=a;this.Jb=b?20:-1;this.h=[];this.index=0}function D(a,b){this.text=a;this.h=(new F(a,b)).parse();this.index=0}function v(a,b){this.eb=[];this.qa={};this.name=b;a=a||{};function c(){}c.prototype=a;this.q=new c;this.q.Uc=a;if(b=="ROOT")this.q.Vc=this.q}function ka(a,b){this.url=a;this.fc=0;this.getScript=b;this.Jc="_"+(""+Math.random()).substr(2)+"_";this.ka=1800}function aa(a){this.frame=a}function la(a,b,c){this.Lb=a;this.update=c; -this.status=b}function ma(a,b){this.H=a;this.ea=b}function na(a,b){this.gc=0;this.ca=a;this.F=b;this.Aa=o.Jd?swfobject.Aa:function(){alert("ERROR: swfobject not loaded!")};this.rc=J()}function M(a,b,c,d){this.view=a;this.Md=c;this.Za=b;this.$c=d+"/_attachments";this.value=null;this.d=undefined}function Q(a){this.view=a}function oa(a,b){this.view=a;this.exp=b;this.O=a.getAttribute("ng-validate");this.zc=typeof a.attributes["ng-required"]!="undefined";this.Ka=null;this.d=undefined;this.p=a.value;a.getAttribute("ng-widget")=== -"datepicker"&&k(a).sd()}function pa(a,b){this.view=a;this.exp=b;this.d=undefined;this.p=a.checked?a.value:""}function qa(a,b){this.view=a;this.exp=b;this.d=undefined;this.p=a.value}function ra(a,b){this.view=a;this.exp=b;this.d=undefined;this.p=this.selected()}function sa(a,b){this.view=a;this.exp=b;this.d=this.ia=undefined;this.Ja=a.value;this.p=a.checked?a.value:null}function N(a,b){this.view=a;this.exp=x.Z(b);this.w=false;this.Bc={element:a}}function ta(a,b){this.view=a;this.vb=b}function ua(a, +c;this.location=o.location}function ja(a){this.location=a;this.delay=25;this.setTimeout=function(b,c){o.setTimeout(b,c)};this.Ka=function(b){return b};this.L=a.href}function H(a,b,c){var d=_.last(b);q(c,function(e){d[e]=_[e]});m[a]=m[a]||{};q(b,function(e){S(m[a],e)})}function x(a,b,c,d){this.B=a;this.qa=c;this.anchor={};this.Oc=b;this.j=d||{};this.ab=[]}function P(a,b){this.document=a;this.ca=b;this.window=o;this.D=[]}function T(a,b,c){this.post=a;this.cb=b;this.A={P:[]};this.anchor=c;this.S=[]} +function z(a,b){var c=[];$(c,a,b?"\n ":null);return c.join("")}function O(a){try{var b=new E(a,true),c=b.aa();b.I();return c()}catch(d){W("fromJson error: ",a,d);throw d;}}function $(a,b,c){var d=typeof b;if(b===null)a.push("null");else if(d!=="function")if(d==="boolean")a.push(""+b);else if(d==="number")isNaN(b)?a.push("null"):a.push(""+b);else if(d==="string")return a.push(m.String.quoteUnicode(b));else if(d==="object")if(b instanceof Array){a.push("[");var e=b.length;d=false;for(var f=0;f<e;f++){var g= +b[f];d&&a.push(",");typeof g=="function"||typeof g=="undefined"?a.push("null"):$(a,g,c);d=true}a.push("]")}else if(b instanceof Date)a.push(m.String.quoteUnicode(m.Date.toString(b)));else{a.push("{");c&&a.push(c);d=false;f=c?c+" ":false;g=[];for(var h in b)h.indexOf("$$")!==0&&g.push(h);g.sort();for(h=0;h<g.length;h++){var i=g[h];try{e=b[i];if(typeof e!="function"){if(d){a.push(",");c&&a.push(c)}a.push(m.String.quote(i));a.push(":");$(a,e,f);d=true}}catch(j){}}a.push("}")}}function F(a,b){this.$$entity= +a;this.R(b||{});this.Q=a.title;this.gb()}function G(a,b){this.text=a;this.Ib=b?20:-1;this.h=[];this.index=0}function E(a,b){this.text=a;this.h=(new G(a,b)).parse();this.index=0}function v(a,b){this.db=[];this.ra={};this.name=b;a=a||{};function c(){}c.prototype=a;this.q=new c;this.q.Uc=a;if(b=="ROOT")this.q.Vc=this.q}function ka(a,b){this.url=a;this.fc=0;this.getScript=b;this.Jc="_"+(""+Math.random()).substr(2)+"_";this.la=1800}function aa(a){this.frame=a}function la(a,b,c){this.Kb=a;this.update=c; +this.status=b}function ma(a,b){this.H=a;this.fa=b}function na(a,b){this.gc=0;this.ca=a;this.F=b;this.Aa=o.Jd?swfobject.Aa:function(){alert("ERROR: swfobject not loaded!")};this.rc=K()}function M(a,b,c,d){this.view=a;this.Md=c;this.Ya=b;this.$c=d+"/_attachments";this.value=null;this.d=undefined}function Q(a){this.view=a}function oa(a,b){this.view=a;this.exp=b;this.O=a.getAttribute("ng-validate");this.zc=typeof a.attributes["ng-required"]!="undefined";this.Ja=null;this.d=undefined;this.p=a.value;a.getAttribute("ng-widget")=== +"datepicker"&&k(a).sd()}function pa(a,b){this.view=a;this.exp=b;this.d=undefined;this.p=a.checked?a.value:""}function qa(a,b){this.view=a;this.exp=b;this.d=undefined;this.p=a.value}function ra(a,b){this.view=a;this.exp=b;this.d=undefined;this.p=this.selected()}function sa(a,b){this.view=a;this.exp=b;this.d=this.ja=undefined;this.Ia=a.value;this.p=a.checked?a.value:null}function N(a,b){this.view=a;this.exp=x.Z(b);this.w=false;this.Bc={element:a}}function ta(a,b){this.view=a;this.ub=b}function ua(a, b){this.view=a;this.exp=b;this.w=false}function va(a,b){this.view=a;this.exp=b}function wa(a,b){this.view=a;this.exp=b}function xa(a,b){this.view=a;this.exp=b}function ya(a,b){this.view=a;this.exp=b}function za(a,b){this.view=a;this.exp=b}function Aa(a,b){this.view=a;this.exp=b}function Ba(a,b,c,d){this.view=a;this.template=c;this.prefix=d;this.children=[];a=b.match(/^\s*(.+)\s+in\s+(.*)\s*$/);if(!a)throw"Expected ng-repeat in form of 'item in collection' but got '"+b+"'.";b=a[1];this.X=a[2];a=b.match(/^([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\)$/); -if(!a)throw"'item' in 'item in collection' should be identifier or (key, value) but get '"+b+"'.";this.Lc=a[3]||a[1];this.$b=a[2]}function B(a){this.B=a}function U(a){this.Oa=a.append(U.jb).find("#ng-loading");this.ba=0}var ba={u:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",Mb:function(a){var b="",c,d,e,f,g,h,i=0;for(a=ba.qb(a);i<a.length;){c=a.charCodeAt(i++);d=a.charCodeAt(i++);e=a.charCodeAt(i++);f=c>>2;c=(c&3)<<4|d>>4;g=(d&15)<<2|e>>6;h=e&63;if(isNaN(d))g=h=64;else if(isNaN(e))h= -64;b=b+this.u.charAt(f)+this.u.charAt(c)+this.u.charAt(g)+this.u.charAt(h)}return b},td:function(a){var b="",c,d,e,f,g,h=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");h<a.length;){c=this.u.indexOf(a.charAt(h++));d=this.u.indexOf(a.charAt(h++));f=this.u.indexOf(a.charAt(h++));g=this.u.indexOf(a.charAt(h++));c=c<<2|d>>4;d=(d&15)<<4|f>>2;e=(f&3)<<6|g;b+=String.fromCharCode(c);if(f!=64)b+=String.fromCharCode(d);if(g!=64)b+=String.fromCharCode(e)}return b=ba.pb(b)},qb:function(a){a=a.replace(/\r\n/g,"\n"); -for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);if(d<128)b+=String.fromCharCode(d);else{if(d>127&&d<2048)b+=String.fromCharCode(d>>6|192);else{b+=String.fromCharCode(d>>12|224);b+=String.fromCharCode(d>>6&63|128)}b+=String.fromCharCode(d&63|128)}}return b},pb:function(a){for(var b="",c=0,d=c1=c2=0;c<a.length;){d=a.charCodeAt(c);if(d<128){b+=String.fromCharCode(d);c++}else if(d>191&&d<224){c2=a.charCodeAt(c+1);b+=String.fromCharCode((d&31)<<6|c2&63);c+=2}else{c2=a.charCodeAt(c+1);c3=a.charCodeAt(c+ -2);b+=String.fromCharCode((d&15)<<12|(c2&63)<<6|c3&63);c+=3}}return b}};if(typeof y.getAttribute=="undefined")y.getAttribute=J();if(typeof Node=="undefined")Node={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};o.console||(o.console={log:n,error:n});var R,p=_.each,S=_.extend,k=o.jQuery,X=k.browser.msie,m=o.angular||(o.angular= -{}),Ca=m.validator||(m.validator={}),r=m.filter||(m.filter={}),ca=m.callbacks||(m.callbacks={});m.alert||(m.alert=function(){w(arguments);o.alert.apply(o,arguments)});ia.prototype={load:function(){this.Eb();w("Server: "+this.j.H);this.Db();this.Cb();this.yb()},Db:function(){w("Angular.configureJQueryPlugins()");k.fn.scope=function(){for(var a=this;a&&a.get(0);){var b=a.data("scope");if(b)return b;a=a.parent()}return null};k.fn.controller=function(){return this.data("controller")||Q.Wb}},Gc:function(){return""+ -(new Date).getTime()},Cb:function(){var a=this.j;if(!a.F){var b=a.H.match(/https?:\/\/([\w]*)/);a.F=b?b[1]:"$MEMORY"}},yb:function(){function a(){g.Qb(function(l){!l&&c.find("[ng-auth=eager]").length&&g.ja()})}w("Angular.bindHtml()");var b=this.Nc=new ja(this.location),c=this.document,d=new na(this.j.H,this.j.F),e=new x(c[0],d,b,this.j);d.rc=Ea(e,e.e);b=new P(c.find("body"),this.j.H);var f=this.j.F=="$MEMORY"?new aa(this.window):new ka(this.j.H,k.getScript);f=new la(f,new U(k(c.body)),function(){e.c()}); -var g=new ma(f,b),h="/data/"+this.j.F,i=new T(function(l,q){f.N("POST",h,l,q)},g,e.anchor);e.bb.push(function(){i.Fa()});var j=new v({$anchor:e.anchor,$binder:e,$config:this.j,$console:o.console,$datastore:i,$save:function(l){i.Ac(j.q,l,e.anchor)},$window:o,$uid:this.Gc,$users:g},"ROOT");c.data("scope",j);w("$binder.entity()");e.K(j);w("$binder.compile()");e.compile();w("ControlBar.bind()");b.bind();w("$users.fetchCurrentUser()");a();w("PopUp.bind()");(new B(c)).bind();w("$binder.parseAnchor()"); -e.Ua();c.find("body").show();w("ready()")},Eb:function(){var a=o.location.href+"#";a=a.split("#")[1];var b={Kb:null};a=a.split("&");for(var c=0;c<a.length;c++){var d=(a[c]+"=").split("=");b[d[0]]=d[1]}if(b.Kb=="console"){R=y.createElement("div");R.id="ng-console";y.getElementsByTagName("body")[0].appendChild(R);w=function(){da("ng-console-info",arguments)};console.error=function(){da("ng-console-error",arguments)}}}};ja.prototype={watch:function(){var a=this;function b(){if(a.L!==a.location.href){var c= -a.location.hash.match(/^#\$iframe_notify=(.*)$/);if(c){a.L.match(/#/)||(a.L+="#");a.location.href=a.L;c="_iframe_notify_"+c[1];var d=ca[c];delete ca[c];try{(d||n)()}catch(e){alert(e)}}else{a.La(a.location.href);a.L=a.location.href}}a.setTimeout(b,a.delay)}b()},Dc:function(a){var b=o.location.href;b.match(/#/)||(b+="#");if(b!=a)o.location.href=a;this.wd=a},Ha:function(){return o.location.href}};m.compile=function(a,b){b=b||{};var c={server:"",addUrlChangeListener:n},d=new ia(a,k("head"),_(c).extend(b)); -d.load();var e=k(a).scope();return{updateView:function(){return e.c()},set:function(){return e.i.apply(e,arguments)},get:function(){return e.get.apply(e,arguments)},init:function(){e.get("$binder.executeInit")();e.c()},watchUrl:function(){var f=e.get("$binder"),g=d.Nc;g.La=ga(f,f.tc,g);g.Bd=function(){alert("update")};g.watch()}}};var H={typeOf:function(a){if(a===null)return"null";var b=typeof a;if(b=="object"){if(a instanceof Array)return"array";if(a instanceof Date)return"date";if(a.nodeType==1)return"element"}return b}}, +if(!a)throw"'item' in 'item in collection' should be identifier or (key, value) but get '"+b+"'.";this.Lc=a[3]||a[1];this.$b=a[2]}function B(a){this.B=a}function U(a){this.Na=a.append(U.ib).find("#ng-loading");this.ba=0}var ba={u:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",Lb:function(a){var b="",c,d,e,f,g,h,i=0;for(a=ba.pb(a);i<a.length;){c=a.charCodeAt(i++);d=a.charCodeAt(i++);e=a.charCodeAt(i++);f=c>>2;c=(c&3)<<4|d>>4;g=(d&15)<<2|e>>6;h=e&63;if(isNaN(d))g=h=64;else if(isNaN(e))h= +64;b=b+this.u.charAt(f)+this.u.charAt(c)+this.u.charAt(g)+this.u.charAt(h)}return b},td:function(a){var b="",c,d,e,f,g,h=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");h<a.length;){c=this.u.indexOf(a.charAt(h++));d=this.u.indexOf(a.charAt(h++));f=this.u.indexOf(a.charAt(h++));g=this.u.indexOf(a.charAt(h++));c=c<<2|d>>4;d=(d&15)<<4|f>>2;e=(f&3)<<6|g;b+=String.fromCharCode(c);if(f!=64)b+=String.fromCharCode(d);if(g!=64)b+=String.fromCharCode(e)}return b=ba.ob(b)},pb:function(a){a=a.replace(/\r\n/g,"\n"); +for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);if(d<128)b+=String.fromCharCode(d);else{if(d>127&&d<2048)b+=String.fromCharCode(d>>6|192);else{b+=String.fromCharCode(d>>12|224);b+=String.fromCharCode(d>>6&63|128)}b+=String.fromCharCode(d&63|128)}}return b},ob:function(a){for(var b="",c=0,d=c1=c2=0;c<a.length;){d=a.charCodeAt(c);if(d<128){b+=String.fromCharCode(d);c++}else if(d>191&&d<224){c2=a.charCodeAt(c+1);b+=String.fromCharCode((d&31)<<6|c2&63);c+=2}else{c2=a.charCodeAt(c+1);c3=a.charCodeAt(c+ +2);b+=String.fromCharCode((d&15)<<12|(c2&63)<<6|c3&63);c+=3}}return b}};if(typeof y.getAttribute=="undefined")y.getAttribute=K();if(typeof Node=="undefined")Node={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};o.console||(o.console={log:n,error:n});var R,q=_.each,S=_.extend,k=o.jQuery,X=k.browser.msie,m=o.angular||(o.angular= +{}),Ca=m.validator||(m.validator={}),r=m.filter||(m.filter={}),ca=m.callbacks||(m.callbacks={});m.alert||(m.alert=function(){w(arguments);o.alert.apply(o,arguments)});ia.prototype={load:function(){this.Db();w("Server: "+this.j.H);this.Cb();this.Bb();this.xb()},Cb:function(){w("Angular.configureJQueryPlugins()");k.fn.scope=function(){for(var a=this;a&&a.get(0);){var b=a.data("scope");if(b)return b;a=a.parent()}return null};k.fn.controller=function(){return this.data("controller")||Q.Wb}},Gc:function(){return""+ +(new Date).getTime()},Bb:function(){var a=this.j;if(!a.F){var b=a.H.match(/https?:\/\/([\w]*)/);a.F=b?b[1]:"$MEMORY"}},xb:function(){function a(){g.Qb(function(l){!l&&c.find("[ng-auth=eager]").length&&g.ka()})}w("Angular.bindHtml()");var b=this.Nc=new ja(this.location),c=this.document,d=new na(this.j.H,this.j.F),e=new x(c[0],d,b,this.j);d.rc=Ea(e,e.e);b=new P(c.find("body"),this.j.H);var f=this.j.F=="$MEMORY"?new aa(this.window):new ka(this.j.H,k.getScript);f=new la(f,new U(k(c.body)),function(){e.c()}); +var g=new ma(f,b),h="/data/"+this.j.F,i=new T(function(l,p){f.N("POST",h,l,p)},g,e.anchor);e.ab.push(function(){i.Ea()});var j=new v({$anchor:e.anchor,$binder:e,$config:this.j,$console:o.console,$datastore:i,$save:function(l){i.Ac(j.q,l,e.anchor)},$window:o,$uid:this.Gc,$users:g},"ROOT");c.data("scope",j);w("$binder.entity()");e.K(j);w("$binder.compile()");e.compile();w("ControlBar.bind()");b.bind();w("$users.fetchCurrentUser()");a();w("PopUp.bind()");(new B(c)).bind();w("$binder.parseAnchor()"); +e.Ta();c.find("body").show();w("ready()")},Db:function(){var a=o.location.href+"#";a=a.split("#")[1];var b={Jb:null};a=a.split("&");for(var c=0;c<a.length;c++){var d=(a[c]+"=").split("=");b[d[0]]=d[1]}if(b.Jb=="console"){R=y.createElement("div");R.id="ng-console";y.getElementsByTagName("body")[0].appendChild(R);w=function(){da("ng-console-info",arguments)};console.error=function(){da("ng-console-error",arguments)}}}};ja.prototype={watch:function(){var a=this;function b(){if(a.L!==a.location.href){var c= +a.location.hash.match(/^#\$iframe_notify=(.*)$/);if(c){a.L.match(/#/)||(a.L+="#");a.location.href=a.L;c="_iframe_notify_"+c[1];var d=ca[c];delete ca[c];try{(d||n)()}catch(e){alert(e)}}else{a.Ka(a.location.href);a.L=a.location.href}}a.setTimeout(b,a.delay)}b()},Dc:function(a){var b=o.location.href;b.match(/#/)||(b+="#");if(b!=a)o.location.href=a;this.wd=a},Ga:function(){return o.location.href}};m.compile=function(a,b){b=b||{};var c={server:"",addUrlChangeListener:n},d=new ia(a,k("head"),_(c).extend(b)); +d.load();var e=k(a).scope();return{updateView:function(){return e.c()},set:function(){return e.i.apply(e,arguments)},get:function(){return e.get.apply(e,arguments)},init:function(){e.get("$binder.executeInit")();e.c()},watchUrl:function(){var f=e.get("$binder"),g=d.Nc;g.Ka=ga(f,f.tc,g);g.Bd=function(){alert("update")};g.watch()}}};var I={typeOf:function(a){if(a===null)return"null";var b=typeof a;if(b=="object"){if(a instanceof Array)return"array";if(a instanceof Date)return"date";if(a.nodeType==1)return"element"}return b}}, V={},Fa={includeIf:function(a,b,c){var d=_.indexOf(a,b);if(c)d==-1&&a.push(b);else a.splice(d,1);return a},sum:function(a,b){b=m.Function.compile(b);for(var c=0,d=0;d<a.length;d++){var e=1*b(a[d]);isNaN(e)||(c+=e)}return c},remove:function(a,b){var c=_.indexOf(a,b);c>=0&&a.splice(c,1);return b},find:function(a,b,c){if(b){var d=m.Function.compile(b);_.detect(a,function(e){if(d(e)){c=e;return true}});return c}},findById:function(a,b){return m.Wc.find(a,function(c){return c.z==b},null)},filter:function(a, -b){var c=[];c.zb=function(j){for(var l=0;l<c.length;l++)if(!c[l](j))return false;return true};var d=v.M;function e(j,l){if(l.charAt(0)==="!")return!e(j,l.substr(1));switch(typeof j){case "boolean":case "number":case "string":return(""+j).toLowerCase().indexOf(l)>-1;case "object":for(var q in j)if(q.charAt(0)!=="$"&&e(j[q],l))return true;return false;case "array":for(q=0;q<j.length;q++)if(e(j[q],l))return true;return false;default:return false}}switch(typeof b){case "boolean":case "number":case "string":b= -{Qc:b};case "object":for(var f in b)f=="$"?function(){var j=(""+b[f]).toLowerCase();j&&c.push(function(l){return e(l,j)})}():function(){var j=f,l=(""+b[f]).toLowerCase();l&&c.push(function(q){return e(d(q,j),l)})}();break;case "function":c.push(b);break;default:return a}for(var g=[],h=0;h<a.length;h++){var i=a[h];c.zb(i)&&g.push(i)}return g},add:function(a,b){a.push(_.isUndefined(b)?{}:b);return a},count:function(a,b){if(!b)return a.length;var c=m.Function.compile(b);return _.reduce(a,0,function(d, +b){var c=[];c.yb=function(j){for(var l=0;l<c.length;l++)if(!c[l](j))return false;return true};var d=v.M;function e(j,l){if(l.charAt(0)==="!")return!e(j,l.substr(1));switch(typeof j){case "boolean":case "number":case "string":return(""+j).toLowerCase().indexOf(l)>-1;case "object":for(var p in j)if(p.charAt(0)!=="$"&&e(j[p],l))return true;return false;case "array":for(p=0;p<j.length;p++)if(e(j[p],l))return true;return false;default:return false}}switch(typeof b){case "boolean":case "number":case "string":b= +{Qc:b};case "object":for(var f in b)f=="$"?function(){var j=(""+b[f]).toLowerCase();j&&c.push(function(l){return e(l,j)})}():function(){var j=f,l=(""+b[f]).toLowerCase();l&&c.push(function(p){return e(d(p,j),l)})}();break;case "function":c.push(b);break;default:return a}for(var g=[],h=0;h<a.length;h++){var i=a[h];c.yb(i)&&g.push(i)}return g},add:function(a,b){a.push(_.isUndefined(b)?{}:b);return a},count:function(a,b){if(!b)return a.length;var c=m.Function.compile(b);return _.reduce(a,0,function(d, e){return d+(c(e)?1:0)})},orderBy:function(a,b,c){function d(f,g){return Y(g)?function(h,i){return f(i,h)}:f}function e(f,g){var h=typeof f,i=typeof g;if(h==i){if(h=="string")f=f.toLowerCase();if(h=="string")g=g.toLowerCase();if(f===g)return 0;return f<g?-1:1}else return h<i?-1:1}b=_.isArray(b)?b:[b];b=_.map(b,function(f){var g=false;if(typeof f=="string"&&(f.charAt(0)=="+"||f.charAt(0)=="-")){g=f.charAt(0)=="-";f=f.substring(1)}var h=f?m.Function.compile(f):_.identity;return d(function(i,j){return e(h(i), h(j))},g)});return _.clone(a).sort(d(function(f,g){for(var h=0;h<b.length;h++){var i=b[h](f,g);if(i!==0)return i}return 0},c))},orderByToggle:function(a,b){var c=false,d=-1;_.detect(a,function(e,f){if(e==b){c=true;d=f;return true}if((e.charAt(0)=="+"||e.charAt(0)=="-")&&e.substring(1)==b){c=e.charAt(0)=="+";d=f;return true}});d>=0&&a.splice(d,1);a.unshift((c?"-":"+")+b);return a},orderByDirection:function(a,b,c,d){c=c||"ng-ascend";d=d||"ng-descend";a=a[0]||"";var e=true;if(a.charAt(0)=="-"){a=a.substring(1); e=false}else if(a.charAt(0)=="+")a=a.substring(1);return a==b?e?c:d:""},merge:function(a,b,c){var d=a[b];if(!d){d={};a[b]=d}Z(c,d);return a}},Ga={quote:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v")+'"'},quoteUnicode:function(a){a=m.String.quote(a);for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);if(d<128)b.push(a.charAt(c));else{d="000"+d.toString(16);b.push("\\u"+d.substring(d.length- 4))}}return b.join("")},toDate:function(a){var b;if(typeof a=="string"&&(b=a.match(/^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)Z$/))){a=new Date(0);a.setUTCFullYear(b[1],b[2]-1,b[3]);a.setUTCHours(b[4],b[5],b[6],0);return a}return a}},Ha={toString:function(a){function b(c){return c<10?"0"+c:c}return a.getUTCFullYear()+"-"+b(a.getUTCMonth()+1)+"-"+b(a.getUTCDate())+"T"+b(a.getUTCHours())+":"+b(a.getUTCMinutes())+":"+b(a.getUTCSeconds())+"Z"}},Ia={compile:function(a){if(_.isFunction(a))return a; -else if(a){var b=new v;return function(c){b.q=c;return b.eval(a)}}else return function(c){return c}}};G("Global",[H],["extend","clone","isEqual","isElement","isArray","isFunction","isUndefined"]);G("Collection",[H,V],["each","map","reduce","reduceRight","detect","select","reject","all","any","include","invoke","pluck","max","min","sortBy","sortedIndex","toArray","size"]);G("Array",[H,V,Fa],["first","last","compact","flatten","without","uniq","intersect","zip","indexOf","lastIndexOf"]);G("Object", -[H,V,{}],["keys","values"]);G("String",[H,Ga],[]);G("Date",[H,Ha],[]);G("Function",[H,V,Ia],["bind","bindAll","delay","defer","wrap","compose"]);x.Z=function(a){for(var b=[],c=0,d;(d=a.indexOf("{{",c))>-1;){c<d&&b.push(a.substr(c,d-c));c=d;d=a.indexOf("}}",d);d=d<0?a.length:d+2;b.push(a.substr(c,d-c));c=d}c!=a.length&&b.push(a.substr(c,a.length-c));return b.length===0?[a]:b};x.Vb=function(a){a=x.Z(a);return a.length>1||x.J(a[0])!==null};x.J=function(a){return(a=a.replace(/\n/gm," ").match(/^\{\{(.*)\}\}$/))? -a[1]:null};x.prototype={uc:function(a){var b={};a.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(c,d,e){if(d)b[decodeURIComponent(d)]=decodeURIComponent(e)});return b},Ua:function(a){var b=this;a=a||this.pa.Ha();var c=a.indexOf("#");if(!(c<0)){a=this.uc(a.substring(c+1));p(b.anchor,function(d,e){delete b.anchor[e]});p(a,function(d,e){b.anchor[e]=d})}},tc:function(a){this.Ua(a);this.c()},Hc:function(){var a=this.pa.Ha(),b=a.indexOf("#");if(b>-1)a=a.substring(0,b);a+="#";b="";for(var c in this.anchor){var d= -this.anchor[c];if(typeof d==="undefined"||d===null)delete this.anchor[c];else{a+=b+encodeURIComponent(c);if(d!==true)a+="="+encodeURIComponent(d);b="&"}}this.pa.Dc(a);return a},c:function(){(new Date).getTime();var a=k(this.B).scope();a.i("$invalidWidgets",[]);a.c();(new Date).getTime();this.Hc();_.each(this.bb,function(b){b()})},ga:function(a){var b=k(this.B),c=b.find(a);if(b.is(a))c=c.andSelf();return c},K:function(a){this.ga("[ng-entity]").attr("ng-watch",function(){try{var b=k(this);return a.K(b.attr("ng-entity"))+ -(b.attr("ng-watch")||"")}catch(c){alert(c)}})},compile:function(){var a=k(this.B),b=this;if(this.j.ad){var c=this.ga(":submit").not("[ng-action]");c.attr("ng-action","$save()");c.not(":disabled").not("ng-bind-attr").attr("ng-bind-attr",'{disabled:"{{$invalidWidgets}}"}')}this.Va(this.B)(this.B,a.scope(),"");this.ga("a[ng-action]").live("click",function(){var d=k(this);try{d.scope().eval(d.attr("ng-action"));d.removeAttr("ng-error");d.removeClass("ng-exception")}catch(e){d.addClass("ng-exception"); -d.attr("ng-error",z(e,true))}b.c();return false})},Fc:function(a,b,c){b=b.concat();var d=b.pop(),e=x.Z(a.nodeValue);if(e.length>1||x.J(e[0])){var f=a.parentNode;if(ea(f)){f.setAttribute("ng-bind-template",a.nodeValue);c.push({path:b,b:function(l){return new N(l,l.getAttribute("ng-bind-template"))}})}else for(var g=0;g<e.length;g++){var h=e[g],i=x.J(h),j;if(i){j=y.createElement("span");k(j).attr("ng-bind",i);g===0&&c.push({path:b.concat(d+g),b:this.Sa})}else if(X&&h.charAt(0)==" "){j=y.createElement("span"); -j.innerHTML=" "+h.substring(1)}else j=y.createTextNode(h);f.insertBefore(j,a)}f.removeChild(a)}},Va:function(a){var b=[];this.Wa(a,[],b);return function(c,d,e){for(var f=b.length,g=0;g<f;g++){for(var h=b[g],i=c,j=h.path,l=0;l<j.length;l++)i=i.childNodes[j[l]];try{d.tb(h.b(i,d,e))}catch(q){alert(q)}}}},Wa:function(a,b,c){var d=a.nodeType;if(d==Node.TEXT_NODE)this.Fc(a,b,c);else if(!(d!=Node.ELEMENT_NODE&&d!=Node.DOCUMENT_NODE))if(a.getAttribute){d=a.getAttribute("ng-non-bindable");if(!(d||d=== -"")){if(d=a.attributes){var e=a.getAttribute("ng-bind-attr");a.removeAttribute("ng-bind-attr");e=e?O(e):{};for(var f=d.length,g=0;g<f;g++){var h=d[g],i=h.name;h=X&&i=="href"?decodeURI(a.getAttribute(i,2)):h.value;if(x.Vb(h))e[i]=h}d=z(e);d.length>2&&a.setAttribute("ng-bind-attr",d)}a.getAttribute||w(a);var j=a.getAttribute("ng-repeat");if(j){a.removeAttribute("ng-repeat");var l=this.Va(a);d=y.createComment("ng-repeat: "+j);e=a.parentNode;e.insertBefore(d,a);e.removeChild(a);function q(s,t,A){var I= -k(a).clone();I.css("display","");I.attr("ng-repeat-index",""+A);I.data("scope",s);l(I[0],s,t+A+":");return I}c.push({path:b,b:function(s,t,A){return new Ba(k(s),j,q,A)}})}else{a.getAttribute("ng-eval")&&c.push({path:b,b:this.lc});a.getAttribute("ng-bind")&&c.push({path:b,b:this.Sa});a.getAttribute("ng-bind-attr")&&c.push({path:b,b:this.hc});a.getAttribute("ng-hide")&&c.push({path:b,b:this.mc});a.getAttribute("ng-show")&&c.push({path:b,b:this.nc});a.getAttribute("ng-class")&&c.push({path:b,b:this.ic}); -a.getAttribute("ng-class-odd")&&c.push({path:b,b:this.kc});a.getAttribute("ng-class-even")&&c.push({path:b,b:this.jc});a.getAttribute("ng-style")&&c.push({path:b,b:this.oc});a.getAttribute("ng-watch")&&c.push({path:b,b:this.pc});d=a.nodeName;if(d=="INPUT"||d=="TEXTAREA"||d=="SELECT"||d=="BUTTON"){var C=this;c.push({path:b,b:function(s,t,A){s.name=A+s.name.split(":").pop();return C.Oc.Fb(k(s),t)}})}if(d=="OPTION")if(!k("<select/>").append(k(a).clone()).html().match(/<option(\s.*\s|\s)value\s*=\s*.*>.*<\/\s*option\s*>/gi))a.value= -a.text;d=a.childNodes;for(e=0;e<d.length;e++)this.Wa(d[e],b.concat(e),c)}}}},lc:function(a){return new ua(a,a.getAttribute("ng-eval"))},Sa:function(a){return new N(a,"{{"+a.getAttribute("ng-bind")+"}}")},hc:function(a){return new ta(a,O(a.getAttribute("ng-bind-attr")))},mc:function(a){return new va(a,a.getAttribute("ng-hide"))},nc:function(a){return new wa(a,a.getAttribute("ng-show"))},ic:function(a){return new xa(a,a.getAttribute("ng-class"))},jc:function(a){return new ya(a,a.getAttribute("ng-class-even"))}, -kc:function(a){return new za(a,a.getAttribute("ng-class-odd"))},oc:function(a){return new Aa(a,a.getAttribute("ng-style"))},pc:function(a,b){b.watch(a.getAttribute("ng-watch"))}};P.Xc='<div><div class="ui-widget-overlay"></div><div id="ng-login" ng-non-bindable="true"><div class="ng-login-container"></div></div></div>';P.lb='<div ng-non-bindable="true" title="Permission Error:">Sorry, you do not have permission for this!</div>';P.prototype={bind:J(),ja:function(a){this.D.push(a);this.D.length==1&& -this.Ca("/user_session/new.mini?return_url="+encodeURIComponent(this.cb()))},cc:function(a){this.D.push(a);this.D.length==1&&this.Ca("/user_session/do_destroy.mini")},cb:function(){return this.window.location.href.split("#")[0]},Ca:function(a){var b=this,c=(new Date).getTime(),d=this.cb();d+="#$iframe_notify="+c;var e=k('<div style="overflow:hidden; padding:2px 0 0 0;"><iframe name="'+d+'" src="'+this.ca+a+'" width="500" height="330"/></div>');this.document.append(e);e.Ba({height:363,width:500,Gd:false, -ec:true,title:'Authentication: <a href="http://www.getangular.com"><tt><angular/></tt></a>'});callbacks["_iframe_notify_"+c]=function(){e.Ba("destroy");e.remove();p(b.D,function(f){f()});b.D=[]}},Ta:function(){if(!this.Ga){this.Ga=k(P.lb);this.Ga.Ba({fd:true,height:70,ec:true})}}};T.mb=S(J(),{all:function(){return[]},query:function(){return[]},load:function(){return{}},title:undefined});T.prototype={T:function(a){if(!a instanceof E)throw"Parameter must be an instance of Entity! "+z(a);var b= -a.Q+"/"+a.z,c=this.A[b];if(c)E.fa(a,c);else c=this.A[b]=a;return c},load:function(a,b,c,d){if(b&&b!=="*"){var e=this;this.C(["GET",a.Q+"/"+b],function(f){a.R(f);a.hb();f=a.Rc(a);e.T(f);(c||n)(a)},d)}return a},Na:function(a,b,c){var d=this,e=[],f=0;p(b,function(g){e.push(d.load(a(),g,function(){f++;if(f==b.length)(c||n)(e)}))});return e},bc:function(a,b,c){return this.load(a,b,c,function(d){if(d.da==404){a.z=b;(c||n)(a)}else throw d;})},ac:function(a,b){var c=this,d=[];d.ra=function(e){return e.Q== -a.title};this.A.P.push(d);this.C(["GET",a.title],function(e){for(var f=0;f<e.length;f++){var g=a();g.R(e[f]);d.push(c.T(g))}(b||n)(d)});return d},save:function(a,b){var c=this,d={};a.ib(d);this.C(["POST","",d],function(e){a.R(e);var f=c.T(a);_.each(c.A.P,function(g){g.ra(a)&&m.Array.includeIf(g,f,true)});if(a.sa)c.anchor[a.sa]=a.z;b&&b(a)})},remove:function(a,b){var c=this,d={};a.ib(d);this.C(["DELETE","",d],function(e){delete c.A[a.Q+"/"+a.z];_.each(c.A.P,function(f){for(var g=0;g<f.length;g++)f[g].z== -a.z&&f.splice(g,1)});(b||n)(e)})},C:function(a,b,c){a.fb=b;a.gb=c||function(d){throw d;};this.S.push(a)},Fa:function(){function a(d,e){w("RESPONSE["+d+"]: ",e);if(e.da==401)b.db.ja(function(){b.post(c,a)});else if(e.da)alert(z(e));else for(d=0;d<e.length;d++){var f=e[d],g=c[d],h=f.da;if(h)h==403?b.db.Ta():g.gb(f);else g.fb(f)}}if(this.S.length!==0){var b=this,c=this.S;this.S=[];w("REQUEST:",c);this.post(c,a)}},Ac:function(a,b){function c(){d--;d===0&&b&&b()}var d=1;for(var e in a){var f=a[e];if(f&& -f.ta==E.prototype.ta){d++;f.ta(c)}}c()},vc:function(a,b,c,d){var e=this,f=[];f.ra=K(false);this.A.P.push(f);this.C(["GET",a.title+"/"+b+"="+c],function(g){for(var h=0;h<g.length;h++){var i=(new a).R(g[h]);f.push(e.T(i))}d&&d(f)});return f},K:function(a,b){if(!a)return T.mb;var c=this,d=S(function(e){return new E(d,e)},{title:a,$$factory:true,datastore:this,defaults:b||{},load:function(e,f){return c.load(d(),e,f)},loadMany:function(e,f){return c.Na(d,e,f)},loadOrCreate:function(e,f){return c.bc(d(), +else if(a){var b=new v;return function(c){b.q=c;return b.eval(a)}}else return function(c){return c}}};H("Global",[I],["extend","clone","isEqual","isElement","isArray","isFunction","isUndefined"]);H("Collection",[I,V],["each","map","reduce","reduceRight","detect","select","reject","all","any","include","invoke","pluck","max","min","sortBy","sortedIndex","toArray","size"]);H("Array",[I,V,Fa],["first","last","compact","flatten","without","uniq","intersect","zip","indexOf","lastIndexOf"]);H("Object", +[I,V,{}],["keys","values"]);H("String",[I,Ga],[]);H("Date",[I,Ha],[]);H("Function",[I,V,Ia],["bind","bindAll","delay","defer","wrap","compose"]);x.Z=function(a){for(var b=[],c=0,d;(d=a.indexOf("{{",c))>-1;){c<d&&b.push(a.substr(c,d-c));c=d;d=a.indexOf("}}",d);d=d<0?a.length:d+2;b.push(a.substr(c,d-c));c=d}c!=a.length&&b.push(a.substr(c,a.length-c));return b.length===0?[a]:b};x.Vb=function(a){a=x.Z(a);return a.length>1||x.J(a[0])!==null};x.J=function(a){return(a=a.replace(/\n/gm," ").match(/^\{\{(.*)\}\}$/))? +a[1]:null};x.prototype={uc:function(a){var b={};a.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(c,d,e){if(d)b[decodeURIComponent(d)]=decodeURIComponent(e)});return b},Ta:function(a){var b=this;a=a||this.qa.Ga();var c=a.indexOf("#");if(!(c<0)){a=this.uc(a.substring(c+1));q(b.anchor,function(d,e){delete b.anchor[e]});q(a,function(d,e){b.anchor[e]=d})}},tc:function(a){this.Ta(a);this.c()},Hc:function(){var a=this.qa.Ga(),b=a.indexOf("#");if(b>-1)a=a.substring(0,b);a+="#";b="";for(var c in this.anchor){var d= +this.anchor[c];if(typeof d==="undefined"||d===null)delete this.anchor[c];else{a+=b+encodeURIComponent(c);if(d!==true)a+="="+encodeURIComponent(d);b="&"}}this.qa.Dc(a);return a},c:function(){(new Date).getTime();var a=k(this.B).scope();a.i("$invalidWidgets",[]);a.c();(new Date).getTime();this.Hc();_.each(this.ab,function(b){b()})},ha:function(a){var b=k(this.B),c=b.find(a);if(b.is(a))c=c.andSelf();return c},K:function(a){this.ha("[ng-entity]").attr("ng-watch",function(){try{var b=k(this);return a.K(b.attr("ng-entity"))+ +(b.attr("ng-watch")||"")}catch(c){alert(c)}})},compile:function(){var a=k(this.B),b=this;if(this.j.ad){var c=this.ha(":submit").not("[ng-action]");c.attr("ng-action","$save()");c.not(":disabled").not("ng-bind-attr").attr("ng-bind-attr",'{disabled:"{{$invalidWidgets}}"}')}this.Ua(this.B)(this.B,a.scope(),"");this.ha("a[ng-action]").live("click",function(){var d=k(this);try{d.scope().eval(d.attr("ng-action"));d.removeAttr("ng-error");d.removeClass("ng-exception")}catch(e){d.addClass("ng-exception"); +d.attr("ng-error",z(e,true))}b.c();return false})},Fc:function(a,b,c){b=b.concat();var d=b.pop(),e=x.Z(a.nodeValue);if(e.length>1||x.J(e[0])){var f=a.parentNode;if(ea(f)){f.setAttribute("ng-bind-template",a.nodeValue);c.push({path:b,b:function(l){return new N(l,l.getAttribute("ng-bind-template"))}})}else for(var g=0;g<e.length;g++){var h=e[g],i=x.J(h),j;if(i){j=y.createElement("span");k(j).attr("ng-bind",i);g===0&&c.push({path:b.concat(d+g),b:this.Ra})}else if(X&&h.charAt(0)==" "){j=y.createElement("span"); +j.innerHTML=" "+h.substring(1)}else j=y.createTextNode(h);f.insertBefore(j,a)}f.removeChild(a)}},Ua:function(a){var b=[];this.Va(a,[],b);return function(c,d,e){for(var f=b.length,g=0;g<f;g++){for(var h=b[g],i=c,j=h.path,l=0;l<j.length;l++)i=i.childNodes[j[l]];try{d.sb(h.b(i,d,e))}catch(p){alert(p)}}}},Va:function(a,b,c){var d=a.nodeType;if(d==Node.TEXT_NODE)this.Fc(a,b,c);else if(!(d!=Node.ELEMENT_NODE&&d!=Node.DOCUMENT_NODE))if(a.getAttribute){d=a.getAttribute("ng-non-bindable");if(!(d||d=== +"")){if(d=a.attributes){var e=a.getAttribute("ng-bind-attr");a.removeAttribute("ng-bind-attr");e=e?O(e):{};for(var f=d.length,g=0;g<f;g++){var h=d[g],i=h.name;h=X&&i=="href"?decodeURI(a.getAttribute(i,2)):h.value;if(x.Vb(h))e[i]=h}d=z(e);d.length>2&&a.setAttribute("ng-bind-attr",d)}a.getAttribute||w(a);var j=a.getAttribute("ng-repeat");if(j){a.removeAttribute("ng-repeat");var l=this.Ua(a);d=y.createComment("ng-repeat: "+j);e=a.parentNode;e.insertBefore(d,a);e.removeChild(a);function p(s,t,A){var J= +k(a).clone();J.css("display","");J.attr("ng-repeat-index",""+A);J.data("scope",s);l(J[0],s,t+A+":");return J}c.push({path:b,b:function(s,t,A){return new Ba(k(s),j,p,A)}})}else{a.getAttribute("ng-eval")&&c.push({path:b,b:this.lc});a.getAttribute("ng-bind")&&c.push({path:b,b:this.Ra});a.getAttribute("ng-bind-attr")&&c.push({path:b,b:this.hc});a.getAttribute("ng-hide")&&c.push({path:b,b:this.mc});a.getAttribute("ng-show")&&c.push({path:b,b:this.nc});a.getAttribute("ng-class")&&c.push({path:b,b:this.ic}); +a.getAttribute("ng-class-odd")&&c.push({path:b,b:this.kc});a.getAttribute("ng-class-even")&&c.push({path:b,b:this.jc});a.getAttribute("ng-style")&&c.push({path:b,b:this.oc});a.getAttribute("ng-watch")&&c.push({path:b,b:this.pc});d=a.nodeName;if(d=="INPUT"||d=="TEXTAREA"||d=="SELECT"||d=="BUTTON"){var C=this;c.push({path:b,b:function(s,t,A){s.name=A+s.name.split(":").pop();return C.Oc.Eb(k(s),t)}})}if(d=="OPTION")if(!k("<select/>").append(k(a).clone()).html().match(/<option(\s.*\s|\s)value\s*=\s*.*>.*<\/\s*option\s*>/gi))a.value= +a.text;d=a.childNodes;for(e=0;e<d.length;e++)this.Va(d[e],b.concat(e),c)}}}},lc:function(a){return new ua(a,a.getAttribute("ng-eval"))},Ra:function(a){return new N(a,"{{"+a.getAttribute("ng-bind")+"}}")},hc:function(a){return new ta(a,O(a.getAttribute("ng-bind-attr")))},mc:function(a){return new va(a,a.getAttribute("ng-hide"))},nc:function(a){return new wa(a,a.getAttribute("ng-show"))},ic:function(a){return new xa(a,a.getAttribute("ng-class"))},jc:function(a){return new ya(a,a.getAttribute("ng-class-even"))}, +kc:function(a){return new za(a,a.getAttribute("ng-class-odd"))},oc:function(a){return new Aa(a,a.getAttribute("ng-style"))},pc:function(a,b){b.watch(a.getAttribute("ng-watch"))}};P.Xc='<div><div class="ui-widget-overlay"></div><div id="ng-login" ng-non-bindable="true"><div class="ng-login-container"></div></div></div>';P.kb='<div ng-non-bindable="true" title="Permission Error:">Sorry, you do not have permission for this!</div>';P.prototype={bind:K(),ka:function(a){this.D.push(a);this.D.length==1&& +this.Ca("/user_session/new.mini?return_url="+encodeURIComponent(this.bb()))},cc:function(a){this.D.push(a);this.D.length==1&&this.Ca("/user_session/do_destroy.mini")},bb:function(){return this.window.location.href.split("#")[0]},Ca:function(a){var b=this,c=(new Date).getTime(),d=this.bb();d+="#$iframe_notify="+c;var e=k('<div style="overflow:hidden; padding:2px 0 0 0;"><iframe name="'+d+'" src="'+this.ca+a+'" width="500" height="330"/></div>');this.document.append(e);e.Ba({height:363,width:500,Gd:false, +ec:true,title:'Authentication: <a href="http://www.getangular.com"><tt><angular/></tt></a>'});callbacks["_iframe_notify_"+c]=function(){e.Ba("destroy");e.remove();q(b.D,function(f){f()});b.D=[]}},Sa:function(){if(!this.Fa){this.Fa=k(P.kb);this.Fa.Ba({fd:true,height:70,ec:true})}}};T.lb=S(K(),{all:function(){return[]},query:function(){return[]},load:function(){return{}},title:undefined});T.prototype={T:function(a){if(!a instanceof F)throw"Parameter must be an instance of Entity! "+z(a);var b= +a.Q+"/"+a.z,c=this.A[b];if(c)F.ga(a,c);else c=this.A[b]=a;return c},load:function(a,b,c,d){if(b&&b!=="*"){var e=this;this.C(["GET",a.Q+"/"+b],function(f){a.R(f);a.gb();f=a.Rc(a);e.T(f);(c||n)(a)},d)}return a},Ma:function(a,b,c){var d=this,e=[],f=0;q(b,function(g){e.push(d.load(a(),g,function(){f++;if(f==b.length)(c||n)(e)}))});return e},bc:function(a,b,c){return this.load(a,b,c,function(d){if(d.da==404){a.z=b;(c||n)(a)}else throw d;})},ac:function(a,b){var c=this,d=[];d.sa=function(e){return e.Q== +a.title};this.A.P.push(d);this.C(["GET",a.title],function(e){for(var f=0;f<e.length;f++){var g=a();g.R(e[f]);d.push(c.T(g))}(b||n)(d)});return d},save:function(a,b){var c=this,d={};a.hb(d);this.C(["POST","",d],function(e){a.R(e);var f=c.T(a);_.each(c.A.P,function(g){g.sa(a)&&m.Array.includeIf(g,f,true)});if(a.ta)c.anchor[a.ta]=a.z;b&&b(a)})},remove:function(a,b){var c=this,d={};a.hb(d);this.C(["DELETE","",d],function(e){delete c.A[a.Q+"/"+a.z];_.each(c.A.P,function(f){for(var g=0;g<f.length;g++)f[g].z== +a.z&&f.splice(g,1)});(b||n)(e)})},C:function(a,b,c){a.eb=b;a.fb=c||function(d){throw d;};this.S.push(a)},Ea:function(){function a(d,e){w("RESPONSE["+d+"]: ",e);if(e.da==401)b.cb.ka(function(){b.post(c,a)});else if(e.da)alert(z(e));else for(d=0;d<e.length;d++){var f=e[d],g=c[d],h=f.da;if(h)h==403?b.cb.Sa():g.fb(f);else g.eb(f)}}if(this.S.length!==0){var b=this,c=this.S;this.S=[];w("REQUEST:",c);this.post(c,a)}},Ac:function(a,b){function c(){d--;d===0&&b&&b()}var d=1;for(var e in a){var f=a[e];if(f&& +f.ua==F.prototype.ua){d++;f.ua(c)}}c()},vc:function(a,b,c,d){var e=this,f=[];f.sa=L(false);this.A.P.push(f);this.C(["GET",a.title+"/"+b+"="+c],function(g){for(var h=0;h<g.length;h++){var i=(new a).R(g[h]);f.push(e.T(i))}d&&d(f)});return f},K:function(a,b){if(!a)return T.lb;var c=this,d=S(function(e){return new F(d,e)},{title:a,$$factory:true,datastore:this,defaults:b||{},load:function(e,f){return c.load(d(),e,f)},loadMany:function(e,f){return c.Ma(d,e,f)},loadOrCreate:function(e,f){return c.bc(d(), e,f)},all:function(e){return c.ac(d,e)},query:function(e,f,g){return c.vc(d,e,f,g)},properties:function(e){c.C(["GET",a+"/$properties"],e)}});return d},join:function(a){function b(){throw"Joined entities can not be instantiated into a document.";}var c=_(a).gd().map(function(d,e){return e}).sortBy(function(d){var e=[];do{if(_(e).include(d))throw"Infinite loop in join: "+e.join(" -> ");e.push(d);if(!a[d])throw _("Named entity '<%=name%>' is undefined.").template({name:d});d=a[d].Y?a[d].Y.substring(0, -a[d].Y.indexOf(".")):undefined}while(d);return e.length}).value();if(_(c).select(function(d){return a[d].Y}).length!=c.length-1)throw"Exactly one entity needs to be primary.";b.query=function(d,e){var f=[],g=d?d.substring(0,d.indexOf(".")):undefined;if(g!=c[0])throw _("Named entity '<%=name%>' is not a primary entity.").template({name:g});var h=1;a[g].join.query(d.substring(d.indexOf(".")+1),e,function(i){var j=c[h++],l=a[j],q=l.Y,C={};_(i).each(function(s){var t={};f.push(t);t[g]=s;s=v.M(t,q);C[s]= -s});l.join.Na(_.toArray(C),function(s){var t={};_(s).each(function(A){t[A.z]=A});_(f).each(function(A){var I=v.M(A,q);A[j]=t[I]})})});return f};return b}};r.g=function(a){if(a)for(var b in a)this[b]=a[b]};r.g.get=function(a,b){b=b||"text";switch(typeof a){case "string":return b=="text"?a:undefined;case "object":if(a&&typeof a[b]!=="undefined")return a[b];return;default:return a}};var u;p({currency:function(a){k(this.element).toggleClass("ng-format-negative",a<0);return"$"+r.number.apply(this,[a,2])}, -number:function(a,b){if(isNaN(a)||!isFinite(a))return"";b=typeof b=="undefined"?2:b;var c=a<0;a=Math.abs(a);var d=Math.pow(10,b);a=""+Math.round(a*d);var e=a.substring(0,a.length-b);e=e||"0";d=a.substring(a.length-b);a=c?"-":"";for(c=0;c<e.length;c++){if((e.length-c)%3===0&&c!==0)a+=",";a+=e.charAt(c)}if(b>0){for(c=d.length;c<b;c++)d+="0";a+="."+d.substring(0,b)}return a},date:J(),json:function(a){k(this.element).addClass("ng-monospace");return z(a,true)},trackPackage:function(){var a=[{name:"UPS", -url:"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&track.x=0&track.y=0&InquiryNumber1=",na:[/^1Z[0-9A-Z]{16}$/i]},{name:"FedEx",url:"http://www.fedex.com/Tracking?tracknumbers=",na:[/^96\d{10}?$/i,/^96\d{17}?$/i,/^96\d{20}?$/i,/^\d{15}$/i,/^\d{12}$/i]},{name:"USPS",url:"http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=",na:[/^(91\d{20})$/i,/^(91\d{18})$/i]}];return function(b,c){b=b.replace(/^ */, -"").replace(/ *$/,"");var d=b.replace(/ /g,""),e;p(a,function(f){p(f.na,function(g){if(g.test(d)){g=f.name+": "+b;var h=f.url+b;e=new r.g({text:g,url:h,html:'<a href="'+Da(h)+'">'+g+"</a>",Kd:b});_.breakLoop()}});e&&_.breakLoop()});return e?e:b?c||new r.g({text:b+" is not recognized"}):null}}(),link:function(a,b){b=b||r.g.get(a);var c=r.g.get(a,"url")||r.g.get(a);if(c){if(m.O.vd(c)===null)c="mailto:"+c;a='<a href="'+L(c)+'">'+b+"</a>";return new r.g({text:b,url:c,html:a})}return a},bytes:function(){var a= +a[d].Y.indexOf(".")):undefined}while(d);return e.length}).value();if(_(c).select(function(d){return a[d].Y}).length!=c.length-1)throw"Exactly one entity needs to be primary.";b.query=function(d,e){var f=[],g=d?d.substring(0,d.indexOf(".")):undefined;if(g!=c[0])throw _("Named entity '<%=name%>' is not a primary entity.").template({name:g});var h=1;a[g].join.query(d.substring(d.indexOf(".")+1),e,function(i){var j=c[h++],l=a[j],p=l.Y,C={};_(i).each(function(s){var t={};f.push(t);t[g]=s;s=v.M(t,p);C[s]= +s});l.join.Ma(_.toArray(C),function(s){var t={};_(s).each(function(A){t[A.z]=A});_(f).each(function(A){var J=v.M(A,p);A[j]=t[J]})})});return f};return b}};r.g=function(a){if(a)for(var b in a)this[b]=a[b]};r.g.get=function(a,b){b=b||"text";switch(typeof a){case "string":return b=="text"?a:undefined;case "object":if(a&&typeof a[b]!=="undefined")return a[b];return;default:return a}};var u;q({currency:function(a){k(this.element).toggleClass("ng-format-negative",a<0);return"$"+r.number.apply(this,[a,2])}, +number:function(a,b){if(isNaN(a)||!isFinite(a))return"";b=typeof b=="undefined"?2:b;var c=a<0;a=Math.abs(a);var d=Math.pow(10,b);a=""+Math.round(a*d);var e=a.substring(0,a.length-b);e=e||"0";d=a.substring(a.length-b);a=c?"-":"";for(c=0;c<e.length;c++){if((e.length-c)%3===0&&c!==0)a+=",";a+=e.charAt(c)}if(b>0){for(c=d.length;c<b;c++)d+="0";a+="."+d.substring(0,b)}return a},date:K(),json:function(a){k(this.element).addClass("ng-monospace");return z(a,true)},trackPackage:function(){var a=[{name:"UPS", +url:"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&track.x=0&track.y=0&InquiryNumber1=",oa:[/^1Z[0-9A-Z]{16}$/i]},{name:"FedEx",url:"http://www.fedex.com/Tracking?tracknumbers=",oa:[/^96\d{10}?$/i,/^96\d{17}?$/i,/^96\d{20}?$/i,/^\d{15}$/i,/^\d{12}$/i]},{name:"USPS",url:"http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=",oa:[/^(91\d{20})$/i,/^(91\d{18})$/i]}];return function(b,c){b=b.replace(/^ */, +"").replace(/ *$/,"");var d=b.replace(/ /g,""),e;q(a,function(f){q(f.oa,function(g){if(g.test(d)){g=f.name+": "+b;var h=f.url+b;e=new r.g({text:g,url:h,html:'<a href="'+Da(h)+'">'+g+"</a>",Kd:b});_.breakLoop()}});e&&_.breakLoop()});return e?e:b?c||new r.g({text:b+" is not recognized"}):null}}(),link:function(a,b){b=b||r.g.get(a);var c=r.g.get(a,"url")||r.g.get(a);if(c){if(m.O.vd(c)===null)c="mailto:"+c;a='<a href="'+D(c)+'">'+b+"</a>";return new r.g({text:b,url:c,html:a})}return a},bytes:function(){var a= ["bytes","KB","MB","GB","TB","PB"];return function(b){if(b===null)return"";for(var c=0;b>1E3;){b/=1024;c++}b=""+b;var d=b.indexOf(".");if(d>-1&&d+2<b.length)b=b.substring(0,d+2);return b+" "+a[c]}}(),image:function(a,b,c){if(a&&a.url){var d="";if(b)d=' style="max-width: '+b+"px; max-height: "+(c||b)+'px;"';return new r.g({url:a.url,text:a.url,html:'<img src="'+a.url+'"'+d+"/>"})}return null},lowercase:function(a){return(a=r.g.get(a))?(""+a).toLowerCase():a},uppercase:function(a){return(a=r.g.get(a))? -(""+a).toUpperCase():a},linecount:function(a){a=r.g.get(a);if(a===""||!a)return 1;return a.split(/\n|\f/).length},"if":function(a,b){return b?a:undefined},unless:function(a,b){return b?undefined:a},googleChartApi:S(function(a,b,c,d){b=b||{};a={Ab:a,hd:u.Bb(b,"color"),od:u.title(b),kd:u.Bb(b,"label"),jd:u.values(b),ld:"bg,s,FFFFFF00"};if(_.isArray(b.Pc)){a.qd="x";a.pd="0:|"+b.Pc.join("|")}return u.encode(a,c,d)},{values:function(a){var b=[];p(a.Cc||[],function(c){var d=[];p(c.values||[],function(e){d.push(e)}); -b.push(d.join(","))});a=b.join("|");return a===""?null:"t:"+a},title:function(a){var b=[];a=a.title||[];p(_.isArray(a)?a:[a],function(c){b.push(encodeURIComponent(c))});return b.join("|")},collect:function(a,b){var c=[],d=0;p(a.Cc||[],function(e){var f=[];e=e[b]||[];p(_.isArray(e)?e:[e],function(g){f.push(encodeURIComponent(g));d++});c.push(f.join("|"))});return d?c.join(","):null},encode:function(a,b,c){b=b||200;c=c||b;var d="http://chart.apis.google.com/chart?",e=[];a.nd=b+"x"+c;p(a,function(f, -g){f&&e.push(g+"="+f)});e.sort();d+=e.join("&");return new r.g({url:d,html:'<img width="'+b+'" height="'+c+'" src="'+d+'"/>'})}}),qrcode:function(a,b,c){return u.encode({Ab:"qr",md:encodeURIComponent(a)},b,c)},chart:{Dd:function(a,b,c){return u("p",a,b,c)},Ed:function(a,b,c){return u("p3",a,b,c)},Fd:function(a,b,c){return u("pc",a,b,c)},cd:function(a,b,c){return u("bhs",a,b,c)},bd:function(a,b,c){return u("bhg",a,b,c)},ed:function(a,b,c){return u("bvs",a,b,c)},dd:function(a,b,c){return u("bvg",a, -b,c)},zd:function(a,b,c){return u("lc",a,b,c)},Id:function(a,b,c){return u("ls",a,b,c)},Hd:function(a,b,c){return u("s",a,b,c)}},html:function(a){return new r.g({html:a})},linky:function(a){var b=a,c={};p(a.match(/(ftp|http|https):\/\/([^\(\)|\s]+)/gm)||[],function(d){d=d.replace(/\.$/,"");if(!c[d]){b=b.replace(new RegExp(d.replace(/([\/\.\*\+\?\|\(\)\[\]\{\}\\])/g,"\\$1"),"gm"),'<a href="'+d+'">'+d+"</a>");c[d]=true}});return new r.g({text:a,html:b})}},function(a,b){r[b]=a});u=r.googleChartApi;array= -[].constructor;m.toJson=z;m.fromJson=O;E.fa=function(a,b){if(!(a===b||!a||!b)){var c=function(e,f,g){return g.substring(0,2)!=="$$"&&typeof e[g]!=="function"&&typeof f[g]!=="function"};for(var d in b)c(a,b,d)&&delete b[d];for(d in a)if(c(a,b,d))b[d]=a[d]}};E.prototype={$migrate:function(){Z(this.$$entity.ud,this);return this},$save:function(a){this.$$entity.Ib.save(this,a===true?undefined:a);a===true&&this.$$entity.Ib.Fa();return this},$loadFrom:function(a){E.fa(a,this);return this},$saveTo:function(a){E.fa(this, -a);return this}};F.ua={"null":K(null),"true":K(true),"false":K(false),"+":function(a,b,c){return(b||0)+(c||0)},"-":function(a,b,c){return(b||0)-(c||0)},"*":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 a.scope.i(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 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}};F.kb={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'};F.prototype={G:function(){return this.index+1<this.text.length?this.text.charAt(this.index+1):false},parse:function(){for(var a=this.h,b=F.ua,c=true;this.index<this.text.length;){var d=this.text.charAt(this.index);if(d=='"'||d=="'"){this.yc(d);c=true}else if(d== -"("||d=="["){a.push({index:this.index,text:d});this.index++}else if(d=="{"){c=this.G();if(c==":"||c=="("){a.push({index:this.index,text:d+c});this.index++}else a.push({index:this.index,text:d});this.index++;c=true}else if(d==")"||d=="]"||d=="}"){a.push({index:this.index,text:d});this.index++;c=false}else if(d==":"||d=="."||d==","||d==";"){a.push({index:this.index,text:d});this.index++;c=true}else if(c&&d=="/"){this.xc();c=false}else if(this.ha(d)){this.wc();c=false}else if(this.W(d)){this.Xa();c= -false}else if(this.Yb(d))this.index++;else{c=d+this.G();var e=b[d],f=b[c];if(f){a.push({index:this.index,text:c,b:f});this.index+=2}else if(e){a.push({index:this.index,text:d,b:e});this.index+=1}else throw"Lexer Error: Unexpected next character ["+this.text.substring(this.index)+"] in expression '"+this.text+"' at column '"+(this.index+1)+"'.";c=true}}return a},ha:function(a){return"0"<=a&&a<="9"},Yb:function(a){return a==" "||a=="\r"||a=="\t"||a=="\n"||a=="\u000b"},W:function(a){return"a"<=a&&a<= -"z"||"A"<=a&&a<="Z"||"_"==a||a=="$"},wc:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(c=="."||this.ha(c))a+=c;else break;this.index++}a=1*a;this.h.push({index:b,text:a,b:function(){return a}})},Xa:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(c=="."||this.W(c)||this.ha(c))a+=c;else break;this.index++}c=F.ua[a];if(!c){c=function(d){return d.scope.get(a)};c.V=a}this.h.push({index:b, -text:a,b:c})},yc:function(a){var b=this.index,c=this.Jb;this.index++;for(var d="",e=false;this.index<this.text.length;){var f=this.text.charAt(this.index);if(e){if(f=="u"){f=this.text.substring(this.index+1,this.index+5);this.index+=4;d+=String.fromCharCode(parseInt(f,16))}else{e=F.kb[f];d+=e?e:f}e=false}else if(f=="\\")e=true;else if(f==a){this.index++;this.h.push({index:b,text:d,b:function(){return d.length==c?m.String.toDate(d):d}});return}else d+=f;this.index++}throw"Lexer Error: Unterminated quote ["+ -this.text.substring(b)+"] starting at column '"+(b+1)+"' in expression '"+this.text+"'.";},xc:function(){var a=this.index;this.index++;for(var b="",c=false;this.index<this.text.length;){var d=this.text.charAt(this.index);if(c){b+=d;c=false}else if(d==="\\"){b+=d;c=true}else if(d==="/"){this.index++;c="";if(this.W(this.text.charAt(this.index))){this.Xa();c=this.h.pop().text}var e=new RegExp(b,c);this.h.push({index:a,text:b,xd:c,b:function(){return e}});return}else b+=d;this.index++}throw"Lexer Error: Unterminated RegExp ["+ -this.text.substring(a)+"] starting at column '"+(a+1)+"' in expression '"+this.text+"'.";}};D.nb=K(0);D.prototype={error:function(a,b){throw"Token '"+b.text+"' is "+a+" at column='"+(b.index+1)+"' of expression '"+this.text+"' starting at '"+this.text.substring(b.index)+"'.";},$:function(){if(this.h.length===0)throw"Unexpected end of expression: "+this.text;return this.h[0]},G:function(a,b,c,d){var e=this.h;if(e.length>0){e=e[0];var f=e.text;if(f==a||f==b||f==c||f==d||!a&&!b&&!c&&!d)return e}return false}, -a:function(a,b,c,d){if(a=this.G(a,b,c,d)){this.h.shift();return this.rd=a}return false},k:function(a){if(!this.a(a)){var b=this.G();throw"Expecting '"+a+"' at column '"+(b.index+1)+"' in '"+this.text+"' got '"+this.text.substring(b.index)+"'.";}},ob:function(a,b){var c=b.apply(this);return function(d){return a(d,c(d))}},s:function(a,b,c){var d=c.apply(this);return function(e){return b(e,a(e),d(e))}},Ia:function(){return this.h.length>0},I:function(){if(this.h.length!==0)throw"Did not understand '"+ -this.text.substring(this.h[0].index)+"' while evaluating '"+this.text+"'.";},oa:function(){for(var a=[];;){this.h.length>0&&!this.G("}",")",";","]")&&a.push(this.Ea());if(!this.a(";"))return function(b){for(var c,d=0;d<a.length;d++){var e=a[d];if(e)c=e(b)}return c}}},Ea:function(){for(var a=this.o(),b;;)if(b=this.a("|"))a=this.s(a,b.b,this.filter);else return a},filter:function(){return this.wa(m.filter)},O:function(){return this.wa(m.validator)},wa:function(a){for(var b=this.Ub(a),c=[];;)if(this.a(":"))c.push(this.o()); -else{var d=function(e,f){f=[f];for(var g=0;g<c.length;g++)f.push(c[g](e));return b.apply(e,f)};return function(){return d}}},o:function(){return this.Ec()},Ec:function(){if(this.a("throw")){var a=this.ya();return function(b){throw a(b);}}else return this.ya()},ya:function(){var a=this.Qa(),b;if(b=this.a("=")){if(!a.V)throw"Left hand side '"+this.text.substring(0,b.index)+"' of assignment '"+this.text.substring(b.index)+"' is not assignable.";return this.s(function(){return a.V},b.b,this.Qa)}else return a}, -Qa:function(){for(var a=this.Pa(),b;;)if(b=this.a("||"))a=this.s(a,b.b,this.Pa);else return a},Pa:function(){for(var a=this.Ra(),b;;)if(b=this.a("&&"))a=this.s(a,b.b,this.Ra);else return a},Ra:function(){var a;return(a=this.a("!"))?this.ob(a.b,this.Da):this.Da()},Da:function(){for(var a=this.Ya(),b;;)if(b=this.a("==","!="))a=this.s(a,b.b,this.Ya);else return a},Ya:function(){for(var a=this.xa(),b;;)if(b=this.a("<",">","<=",">="))a=this.s(a,b.b,this.xa);else return a},xa:function(){for(var a=this.la(), -b;b=this.a("+","-");)a=this.s(a,b.b,this.la);return a},la:function(){for(var a=this.ab(),b;b=this.a("*","/","%");)a=this.s(a,b.b,this.ab);return a},ab:function(){var a;return this.a("+")?this.aa():(a=this.a("-"))?this.s(D.nb,a.b,this.la):this.aa()},Ub:function(a){var b=this.a(),c=b.text.split(".");a=a;for(var d,e=0;e<c.length;e++){d=c[e];if(a)a=a[d]}if(typeof a!="function")throw"Function '"+b.text+"' at column '"+(b.index+1)+"' in '"+this.text+"' is not defined.";return a},aa:function(){var a;if(this.a("(")){a= -this.Ea();this.k(")");a=a}else if(this.a("["))a=this.ub();else if(this.a("{"))a=this.object();else if(this.a("{:"))a=this.za(false);else if(this.a("{("))a=this.za(true);else{var b=this.a();(a=b.b)||this.error("not a primary expression",b)}for(;b=this.a("(","[",".");)if(b.text==="(")a=this.Tb(a);else if(b.text==="[")a=this.qc(a);else if(b.text===".")a=this.Rb(a);else throw"IMPOSSIBLE";return a},za:function(a){var b=[];if(a){if(!this.a(")")){for(b.push(this.a().text);this.a(",");)b.push(this.a().text); -this.k(")")}this.k(":")}var c=this.oa();this.k("}");return function(d){return function(e){var f=new v(d.scope.q);f.i("$",e);for(var g=0;g<b.length;g++)f.i(b[g],arguments[g]);return c({scope:f})}}},Rb:function(a){var b=this.a().text;function c(d){return v.M(a(d),b)}c.V=b;return c},qc:function(a){var b=this.o();this.k("]");if(this.a("=")){var c=this.o();return function(d){return a(d)[b(d)]=c(d)}}else return function(d){var e=a(d);d=b(d);return e?e[d]:undefined}},Tb:function(a){var b=[];if(this.$().text!= -")"){do b.push(this.o());while(this.a(","))}this.k(")");return function(c){for(var d=[],e=0;e<b.length;e++)d.push(b[e](c));e=a(c);if(typeof e==="function")return e.apply(c,d);else throw"Expression '"+a.V+"' is not a function.";}},ub:function(){var a=[];if(this.$().text!="]"){do a.push(this.o());while(this.a(","))}this.k("]");return function(b){for(var c=[],d=0;d<a.length;d++)c.push(a[d](b));return c}},object:function(){var a=[];if(this.$().text!="}"){do{var b=this.a().text;this.k(":");var c=this.o(); -a.push({Zb:b,value:c})}while(this.a(","))}this.k("}");return function(d){for(var e={},f=0;f<a.length;f++){var g=a[f],h=g.value(d);e[g.Zb]=h}return e}},Pb:function(){for(var a=[];this.Ia();){a.push(this.Ob());this.a(";")||this.I()}return function(b){for(var c="",d=0;d<a.length;d++)c+=a[d](b);return c}},Ob:function(){var a=this.a().text,b,c;if(this.a("=")){b=a;a=this.a().text}if(this.a(":"))c=this.aa()(null);return function(d){var e=d.scope.get("$datastore").K(a,c);d.scope.i(a,e);if(b){e=e();e.sa=b; -d.scope.i(b,e);return"$anchor."+b+":{"+b+"="+a+".load($anchor."+b+");"+b+".$$anchor="+m.String.quote(b)+";};"}else return""}},watch:function(){for(var a=[];this.Ia();){a.push(this.Mc());this.a(";")||this.I()}this.I();return function(b){for(var c=0;c<a.length;c++){var d=a[c](b);b.rb(d.name,d.b)}}},Mc:function(){var a=this.a().text;this.k(":");var b;if(this.$().text=="{"){this.k("{");b=this.oa();this.k("}")}else b=this.o();return function(){return{name:a,b:b}}}};v.U={};v.M=function(a,b){if(!b)return a; -for(var c=b.split("."),d,e=a,f=c.length,g=0;g<f;g++){d=c[g];if(!d.match(/^[\$\w][\$\w\d]*$/))throw"Expression '"+b+"' is not a valid expression for accesing variables.";if(a){e=a;a=a[d]}if(_.isUndefined(a)&&d.charAt(0)=="$"){var h=m.Global.typeOf(e);if(d=(h=m[h.charAt(0).toUpperCase()+h.substring(1)])?h[[d.substring(1)]]:undefined)return a=_.bind(d,e,e)}}if(typeof a==="function"&&!a.Sc)return ga(e,a);return a};v.prototype={c:function(){var a=this;this.Sb();_.each(this.eb,function(b){a.l(b,"",{},function(){this.c(a)})})}, -tb:function(a){a&&this.eb.push(a)},Xb:function(a){for(var b=0;b<a.length;b++){var c=a.charAt(b);if(c!="."&&!F.prototype.W(c))return false}return true},get:function(a){return v.M(this.q,a)},i:function(a,b){a=a.split(".");for(var c=this.q,d=0;a.length>1;d++){var e=a.shift(),f=c[e];if(!f){f={};c[e]=f}c=f}return c[a.shift()]=b},m:function(a,b){this.eval(a+"="+z(b))},eval:function(a,b){var c=v.U[a];if(!c){var d=new D(a);c=d.oa();d.I();v.U[a]=c}b=b||{};b.scope=this;return c(b)},l:function(a,b,c,d,e){try{var f= -this.eval(b,c);if(a.w){a.w=false;k(a.view).removeClass("ng-exception").removeAttr("ng-error")}d&&d.apply(a,[f]);return true}catch(g){W("Eval Widget Error:",g);b=z(g,true);a.w=true;k(a.view).addClass("ng-exception").attr("ng-error",b);e&&e.apply(a,[g,b]);return false}},Kc:function(a,b){var c=v.U[a];if(!c){c=(new D(a)).O();v.U[a]=c}a={scope:this};return c(a)(a,b)},K:function(a){return(new D(a)).Pb()({scope:this})},dc:function(a){this.q.Tc.push(a)},watch:function(a){var b=this;(new D(a)).watch()({scope:this, -rb:function(c,d){b.sb(c,function(e,f){try{return d({scope:b},e,f)}catch(g){alert(g)}})}})},sb:function(a,b){var c=this.qa[a];if(!c){c={Ma:[],o:a};this.qa[a]=c}c.Ma.push(b)},Sb:function(){var a=this,b=false;p(this.qa,function(c){var d=a.eval(c.o);if(d!==c.d){p(c.Ma,function(e){e(d,c.d);b=true});c.d=d}});return b}};ka.prototype={wb:function(a){return ba.Mb(a)},N:function(a,b,c,d){var e=this.Jc+this.fc++;ca[e]=function(h){delete m[e];d(200,h)};a={Ld:b,Ad:a,Cd:c};a=this.wb(z(a));b=Math.ceil(a.length/ -this.ka);c=this.url+"/$/"+e+"/"+b+"/";for(var f=0;f<b;f++){var g=a.substr(f*this.ka,this.ka);this.getScript(c+(f+1)+"?h="+g,n)}}};aa.Yc="$DATASET:";aa.prototype={N:J()};la.prototype={N:function(a,b,c,d){var e=this;this.status.xb(c);this.Lb.N(a,b,c,function(){e.status.Nb();try{d.apply(this,arguments)}catch(f){alert(z(f))}e.update()})}};ma.prototype={fetchCurrentUser:function(a){var b=this;this.H.N("GET","/account.json",{},function(c,d){b.Hb=d.Ic;a(d.Ic)})},logout:function(a){var b=this;this.ea.cc(function(){delete b.Hb; -(a||n)()})},login:function(a){var b=this;this.ea.ja(function(){b.Qb(function(){(a||n)()})})},notAuthorized:function(){this.ea.Ta()}};p({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;if(d==a){if(typeof b!="undefined"&&d<b)return"Value can not be less than "+b+".";if(typeof b!="undefined"&&d>c)return"Value can not be greater than "+c+".";return null}else return"Value is not a number."},integer:function(a,b,c){b=Ca.number(a, +(""+a).toUpperCase():a},linecount:function(a){a=r.g.get(a);if(a===""||!a)return 1;return a.split(/\n|\f/).length},"if":function(a,b){return b?a:undefined},unless:function(a,b){return b?undefined:a},googleChartApi:S(function(a,b,c,d){b=b||{};a={zb:a,hd:u.Ab(b,"color"),od:u.title(b),kd:u.Ab(b,"label"),jd:u.values(b),ld:"bg,s,FFFFFF00"};if(_.isArray(b.Pc)){a.qd="x";a.pd="0:|"+b.Pc.join("|")}return u.encode(a,c,d)},{values:function(a){var b=[];q(a.Cc||[],function(c){var d=[];q(c.values||[],function(e){d.push(e)}); +b.push(d.join(","))});a=b.join("|");return a===""?null:"t:"+a},title:function(a){var b=[];a=a.title||[];q(_.isArray(a)?a:[a],function(c){b.push(encodeURIComponent(c))});return b.join("|")},collect:function(a,b){var c=[],d=0;q(a.Cc||[],function(e){var f=[];e=e[b]||[];q(_.isArray(e)?e:[e],function(g){f.push(encodeURIComponent(g));d++});c.push(f.join("|"))});return d?c.join(","):null},encode:function(a,b,c){b=b||200;c=c||b;var d="http://chart.apis.google.com/chart?",e=[];a.nd=b+"x"+c;q(a,function(f, +g){f&&e.push(g+"="+f)});e.sort();d+=e.join("&");return new r.g({url:d,html:'<img width="'+b+'" height="'+c+'" src="'+d+'"/>'})}}),qrcode:function(a,b,c){return u.encode({zb:"qr",md:encodeURIComponent(a)},b,c)},chart:{Dd:function(a,b,c){return u("p",a,b,c)},Ed:function(a,b,c){return u("p3",a,b,c)},Fd:function(a,b,c){return u("pc",a,b,c)},cd:function(a,b,c){return u("bhs",a,b,c)},bd:function(a,b,c){return u("bhg",a,b,c)},ed:function(a,b,c){return u("bvs",a,b,c)},dd:function(a,b,c){return u("bvg",a, +b,c)},zd:function(a,b,c){return u("lc",a,b,c)},Id:function(a,b,c){return u("ls",a,b,c)},Hd:function(a,b,c){return u("s",a,b,c)}},html:function(a){return new r.g({html:a})},linky:function(a){if(!a)return a;for(var b=/(ftp|http|https|mailto):\/\/([^\(\)|\s]+)/,c,d=a,e=[];c=d.match(b);){c=c[0].replace(/[\.\;\,\(\)\{\}\<\>]$/,"");var f=d.indexOf(c);e.push(D(d.substr(0,f)));e.push('<a href="'+c+'">');e.push(c);e.push("</a>");d=d.substring(f+c.length)}e.push(D(d));return new r.g({text:a,html:e.join("")})}}, +function(a,b){r[b]=a});u=r.googleChartApi;array=[].constructor;m.toJson=z;m.fromJson=O;F.ga=function(a,b){if(!(a===b||!a||!b)){var c=function(e,f,g){return g.substring(0,2)!=="$$"&&typeof e[g]!=="function"&&typeof f[g]!=="function"};for(var d in b)c(a,b,d)&&delete b[d];for(d in a)if(c(a,b,d))b[d]=a[d]}};F.prototype={$migrate:function(){Z(this.$$entity.ud,this);return this},$save:function(a){this.$$entity.Hb.save(this,a===true?undefined:a);a===true&&this.$$entity.Hb.Ea();return this},$loadFrom:function(a){F.ga(a, +this);return this},$saveTo:function(a){F.ga(this,a);return this}};G.va={"null":L(null),"true":L(true),"false":L(false),"+":function(a,b,c){return(b||0)+(c||0)},"-":function(a,b,c){return(b||0)-(c||0)},"*":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 a.scope.i(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 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}};G.jb={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'};G.prototype={G:function(){return this.index+1<this.text.length?this.text.charAt(this.index+1):false},parse:function(){for(var a=this.h,b=G.va,c=true;this.index<this.text.length;){var d=this.text.charAt(this.index); +if(d=='"'||d=="'"){this.yc(d);c=true}else if(d=="("||d=="["){a.push({index:this.index,text:d});this.index++}else if(d=="{"){c=this.G();if(c==":"||c=="("){a.push({index:this.index,text:d+c});this.index++}else a.push({index:this.index,text:d});this.index++;c=true}else if(d==")"||d=="]"||d=="}"){a.push({index:this.index,text:d});this.index++;c=false}else if(d==":"||d=="."||d==","||d==";"){a.push({index:this.index,text:d});this.index++;c=true}else if(c&&d=="/"){this.xc();c=false}else if(this.ia(d)){this.wc(); +c=false}else if(this.W(d)){this.Wa();c=false}else if(this.Yb(d))this.index++;else{c=d+this.G();var e=b[d],f=b[c];if(f){a.push({index:this.index,text:c,b:f});this.index+=2}else if(e){a.push({index:this.index,text:d,b:e});this.index+=1}else throw"Lexer Error: Unexpected next character ["+this.text.substring(this.index)+"] in expression '"+this.text+"' at column '"+(this.index+1)+"'.";c=true}}return a},ia:function(a){return"0"<=a&&a<="9"},Yb:function(a){return a==" "||a=="\r"||a=="\t"||a=="\n"||a=="\u000b"}, +W:function(a){return"a"<=a&&a<="z"||"A"<=a&&a<="Z"||"_"==a||a=="$"},wc:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(c=="."||this.ia(c))a+=c;else break;this.index++}a=1*a;this.h.push({index:b,text:a,b:function(){return a}})},Wa:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(c=="."||this.W(c)||this.ia(c))a+=c;else break;this.index++}c=G.va[a];if(!c){c=function(d){return d.scope.get(a)}; +c.V=a}this.h.push({index:b,text:a,b:c})},yc:function(a){var b=this.index,c=this.Ib;this.index++;for(var d="",e=false;this.index<this.text.length;){var f=this.text.charAt(this.index);if(e){if(f=="u"){f=this.text.substring(this.index+1,this.index+5);this.index+=4;d+=String.fromCharCode(parseInt(f,16))}else{e=G.jb[f];d+=e?e:f}e=false}else if(f=="\\")e=true;else if(f==a){this.index++;this.h.push({index:b,text:d,b:function(){return d.length==c?m.String.toDate(d):d}});return}else d+=f;this.index++}throw"Lexer Error: Unterminated quote ["+ +this.text.substring(b)+"] starting at column '"+(b+1)+"' in expression '"+this.text+"'.";},xc:function(){var a=this.index;this.index++;for(var b="",c=false;this.index<this.text.length;){var d=this.text.charAt(this.index);if(c){b+=d;c=false}else if(d==="\\"){b+=d;c=true}else if(d==="/"){this.index++;c="";if(this.W(this.text.charAt(this.index))){this.Wa();c=this.h.pop().text}var e=new RegExp(b,c);this.h.push({index:a,text:b,xd:c,b:function(){return e}});return}else b+=d;this.index++}throw"Lexer Error: Unterminated RegExp ["+ +this.text.substring(a)+"] starting at column '"+(a+1)+"' in expression '"+this.text+"'.";}};E.mb=L(0);E.prototype={error:function(a,b){throw"Token '"+b.text+"' is "+a+" at column='"+(b.index+1)+"' of expression '"+this.text+"' starting at '"+this.text.substring(b.index)+"'.";},$:function(){if(this.h.length===0)throw"Unexpected end of expression: "+this.text;return this.h[0]},G:function(a,b,c,d){var e=this.h;if(e.length>0){e=e[0];var f=e.text;if(f==a||f==b||f==c||f==d||!a&&!b&&!c&&!d)return e}return false}, +a:function(a,b,c,d){if(a=this.G(a,b,c,d)){this.h.shift();return this.rd=a}return false},k:function(a){if(!this.a(a)){var b=this.G();throw"Expecting '"+a+"' at column '"+(b.index+1)+"' in '"+this.text+"' got '"+this.text.substring(b.index)+"'.";}},nb:function(a,b){return function(c){return a(c,b(c))}},s:function(a,b,c){return function(d){return b(d,a(d),c(d))}},Ha:function(){return this.h.length>0},I:function(){if(this.h.length!==0)throw"Did not understand '"+this.text.substring(this.h[0].index)+"' while evaluating '"+ +this.text+"'.";},pa:function(){for(var a=[];;){this.h.length>0&&!this.G("}",")",";","]")&&a.push(this.Da());if(!this.a(";"))return function(b){for(var c,d=0;d<a.length;d++){var e=a[d];if(e)c=e(b)}return c}}},Da:function(){for(var a=this.o(),b;;)if(b=this.a("|"))a=this.s(a,b.b,this.filter());else return a},filter:function(){return this.xa(m.filter)},O:function(){return this.xa(m.validator)},xa:function(a){for(var b=this.Ub(a),c=[];;)if(this.a(":"))c.push(this.o());else{var d=function(e,f){f=[f];for(var g= +0;g<c.length;g++)f.push(c[g](e));return b.apply(e,f)};return function(){return d}}},o:function(){return this.Ec()},Ec:function(){if(this.a("throw")){var a=this.ea();return function(b){throw a(b);}}else return this.ea()},ea:function(){var a=this.Pa(),b;if(b=this.a("=")){if(!a.V)throw"Left hand side '"+this.text.substring(0,b.index)+"' of assignment '"+this.text.substring(b.index)+"' is not assignable.";return this.s(function(){return a.V},b.b,this.Pa())}else return a},Pa:function(){for(var a=this.Oa(), +b;;)if(b=this.a("||"))a=this.s(a,b.b,this.Oa());else return a},Oa:function(){for(var a=this.Qa(),b;;)if(b=this.a("&&"))a=this.s(a,b.b,this.Qa());else return a},Qa:function(){var a;return(a=this.a("!"))?this.nb(a.b,this.ea()):this.Pb()},Pb:function(){for(var a=this.Xa(),b;;)if(b=this.a("==","!="))a=this.s(a,b.b,this.Xa());else return a},Xa:function(){for(var a=this.ya(),b;;)if(b=this.a("<",">","<=",">="))a=this.s(a,b.b,this.ya());else return a},ya:function(){for(var a=this.ma(),b;b=this.a("+","-");)a= +this.s(a,b.b,this.ma());return a},ma:function(){for(var a=this.$a(),b;b=this.a("*","/","%");)a=this.s(a,b.b,this.$a());return a},$a:function(){var a;return this.a("+")?this.aa():(a=this.a("-"))?this.s(E.mb,a.b,this.ma()):this.aa()},Ub:function(a){var b=this.a(),c=b.text.split(".");a=a;for(var d,e=0;e<c.length;e++){d=c[e];if(a)a=a[d]}if(typeof a!="function")throw"Function '"+b.text+"' at column '"+(b.index+1)+"' in '"+this.text+"' is not defined.";return a},aa:function(){var a;if(this.a("(")){a=this.Da(); +this.k(")");a=a}else if(this.a("["))a=this.tb();else if(this.a("{"))a=this.object();else if(this.a("{:"))a=this.za(false);else if(this.a("{("))a=this.za(true);else{var b=this.a();(a=b.b)||this.error("not a primary expression",b)}for(;b=this.a("(","[",".");)if(b.text==="(")a=this.Tb(a);else if(b.text==="[")a=this.qc(a);else if(b.text===".")a=this.Rb(a);else throw"IMPOSSIBLE";return a},za:function(a){var b=[];if(a){if(!this.a(")")){for(b.push(this.a().text);this.a(",");)b.push(this.a().text);this.k(")")}this.k(":")}var c= +this.pa();this.k("}");return function(d){return function(e){var f=new v(d.scope.q);f.i("$",e);for(var g=0;g<b.length;g++)f.i(b[g],arguments[g]);return c({scope:f})}}},Rb:function(a){var b=this.a().text;function c(d){return v.M(a(d),b)}c.V=b;return c},qc:function(a){var b=this.o();this.k("]");if(this.a("=")){var c=this.o();return function(d){return a(d)[b(d)]=c(d)}}else return function(d){var e=a(d);d=b(d);return e?e[d]:undefined}},Tb:function(a){var b=[];if(this.$().text!=")"){do b.push(this.o()); +while(this.a(","))}this.k(")");return function(c){for(var d=[],e=0;e<b.length;e++)d.push(b[e](c));e=a(c);if(typeof e==="function")return e.apply(c,d);else throw"Expression '"+a.V+"' is not a function.";}},tb:function(){var a=[];if(this.$().text!="]"){do a.push(this.o());while(this.a(","))}this.k("]");return function(b){for(var c=[],d=0;d<a.length;d++)c.push(a[d](b));return c}},object:function(){var a=[];if(this.$().text!="}"){do{var b=this.a().text;this.k(":");var c=this.o();a.push({Zb:b,value:c})}while(this.a(",")) +}this.k("}");return function(d){for(var e={},f=0;f<a.length;f++){var g=a[f],h=g.value(d);e[g.Zb]=h}return e}},Ob:function(){for(var a=[];this.Ha();){a.push(this.Nb());this.a(";")||this.I()}return function(b){for(var c="",d=0;d<a.length;d++)c+=a[d](b);return c}},Nb:function(){var a=this.a().text,b,c;if(this.a("=")){b=a;a=this.a().text}if(this.a(":"))c=this.aa()(null);return function(d){var e=d.scope.get("$datastore").K(a,c);d.scope.i(a,e);if(b){e=e();e.ta=b;d.scope.i(b,e);return"$anchor."+b+":{"+b+ +"="+a+".load($anchor."+b+");"+b+".$$anchor="+m.String.quote(b)+";};"}else return""}},watch:function(){for(var a=[];this.Ha();){a.push(this.Mc());this.a(";")||this.I()}this.I();return function(b){for(var c=0;c<a.length;c++){var d=a[c](b);b.qb(d.name,d.b)}}},Mc:function(){var a=this.a().text;this.k(":");var b;if(this.$().text=="{"){this.k("{");b=this.pa();this.k("}")}else b=this.o();return function(){return{name:a,b:b}}}};v.U={};v.M=function(a,b){if(!b)return a;for(var c=b.split("."),d,e=a,f=c.length, +g=0;g<f;g++){d=c[g];if(!d.match(/^[\$\w][\$\w\d]*$/))throw"Expression '"+b+"' is not a valid expression for accesing variables.";if(a){e=a;a=a[d]}if(_.isUndefined(a)&&d.charAt(0)=="$"){var h=m.Global.typeOf(e);if(d=(h=m[h.charAt(0).toUpperCase()+h.substring(1)])?h[[d.substring(1)]]:undefined)return a=_.bind(d,e,e)}}if(typeof a==="function"&&!a.Sc)return ga(e,a);return a};v.prototype={c:function(){var a=this;this.Sb();_.each(this.db,function(b){a.l(b,"",{},function(){this.c(a)})})},sb:function(a){a&& +this.db.push(a)},Xb:function(a){for(var b=0;b<a.length;b++){var c=a.charAt(b);if(c!="."&&!G.prototype.W(c))return false}return true},get:function(a){return v.M(this.q,a)},i:function(a,b){a=a.split(".");for(var c=this.q,d=0;a.length>1;d++){var e=a.shift(),f=c[e];if(!f){f={};c[e]=f}c=f}return c[a.shift()]=b},m:function(a,b){this.eval(a+"="+z(b))},eval:function(a,b){var c=v.U[a];if(!c){var d=new E(a);c=d.pa();d.I();v.U[a]=c}b=b||{};b.scope=this;return c(b)},l:function(a,b,c,d,e){try{var f=this.eval(b, +c);if(a.w){a.w=false;k(a.view).removeClass("ng-exception").removeAttr("ng-error")}d&&d.apply(a,[f]);return true}catch(g){W("Eval Widget Error:",g);b=z(g,true);a.w=true;k(a.view).addClass("ng-exception").attr("ng-error",b);e&&e.apply(a,[g,b]);return false}},Kc:function(a,b){var c=v.U[a];if(!c){c=(new E(a)).O();v.U[a]=c}a={scope:this};return c(a)(a,b)},K:function(a){return(new E(a)).Ob()({scope:this})},dc:function(a){this.q.Tc.push(a)},watch:function(a){var b=this;(new E(a)).watch()({scope:this,qb:function(c, +d){b.rb(c,function(e,f){try{return d({scope:b},e,f)}catch(g){alert(g)}})}})},rb:function(a,b){var c=this.ra[a];if(!c){c={La:[],o:a};this.ra[a]=c}c.La.push(b)},Sb:function(){var a=this,b=false;q(this.ra,function(c){var d=a.eval(c.o);if(d!==c.d){q(c.La,function(e){e(d,c.d);b=true});c.d=d}});return b}};ka.prototype={vb:function(a){return ba.Lb(a)},N:function(a,b,c,d){var e=this.Jc+this.fc++;ca[e]=function(h){delete m[e];d(200,h)};a={Ld:b,Ad:a,Cd:c};a=this.vb(z(a));b=Math.ceil(a.length/this.la);c=this.url+ +"/$/"+e+"/"+b+"/";for(var f=0;f<b;f++){var g=a.substr(f*this.la,this.la);this.getScript(c+(f+1)+"?h="+g,n)}}};aa.Yc="$DATASET:";aa.prototype={N:K()};la.prototype={N:function(a,b,c,d){var e=this;this.status.wb(c);this.Kb.N(a,b,c,function(){e.status.Mb();try{d.apply(this,arguments)}catch(f){alert(z(f))}e.update()})}};ma.prototype={fetchCurrentUser:function(a){var b=this;this.H.N("GET","/account.json",{},function(c,d){b.Gb=d.Ic;a(d.Ic)})},logout:function(a){var b=this;this.fa.cc(function(){delete b.Gb; +(a||n)()})},login:function(a){var b=this;this.fa.ka(function(){b.Qb(function(){(a||n)()})})},notAuthorized:function(){this.fa.Sa()}};q({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;if(d==a){if(typeof b!="undefined"&&d<b)return"Value can not be less than "+b+".";if(typeof b!="undefined"&&d>c)return"Value can not be greater than "+c+".";return null}else return"Value is not a number."},integer:function(a,b,c){b=Ca.number(a, b,c);if(b===null&&a!=Math.round(a))return"Value is not a whole number.";return b},date:function(a){if(a.match(/^\d\d?\/\d\d?\/\d\d\d\d$/))return null;return"Value is not a date. (Expecting format: 12/31/2009)."},ssn:function(a){if(a.match(/^\d\d\d-\d\d-\d\d\d\d$/))return null;return"SSN needs to be in 999-99-9999 format."},email:function(a){if(a.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/))return null;return"Email needs to be in username@host.com format."},phone:function(a){if(a.match(/^1\(\d\d\d\)\d\d\d-\d\d\d\d$/))return null; -if(a.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/))return null;return"Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationaly."},url:function(a){if(a.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/))return null;return"URL needs to be in http://server[:port]/path format."},json:function(a){try{O(a);return null}catch(b){return b.toString()}}},function(a,b){Ca[b]=a});na.prototype={Fb:function(a,b){var c,d=a.attr("type").toLowerCase(), -e=a.attr("name");if(e)e=e.split(":").pop();var f="change",g=true;if(d=="button"||d=="submit"||d=="reset"||d=="image"){c=new Ja(a[0],e);f="click";g=false}else if(d=="text"||d=="textarea"||d=="hidden"||d=="password"){c=new oa(a[0],e);f="keyup change"}else if(d=="checkbox"){c=new pa(a[0],e);f="click"}else if(d=="radio"){c=new sa(a[0],e);f="click"}else if(d=="select-one")c=new qa(a[0],e);else if(d=="select-multiple")c=new ra(a[0],e);else if(d=="file")c=this.Gb(a,e);else throw"Unknown type: "+d;a.data("controller", -c);var h=b.get("$binder");k(c.view,":input").bind(f,function(){if(c.e(b)){var i=k(c.view).attr("ng-action")||"";b.l(c,i)&&h.c(b)}return g});return c},Gb:function(a){var b="__uploadWidget_"+this.gc++,c=M.template(b);a.after(c);b=this.Aa({data:this.ca+"/admin/ServerAPI.swf",width:"95",height:"20",align:"top",Nd:"transparent"},{yd:"uploadWidgetId="+b,Zc:"always"},b);a.remove();a=new M(c,a[0].name,b,this.ca+"/data/"+this.F);k(b).data("controller",a);return a}};M.dispatchEvent=function(a,b,c){a=y.getElementById(a); -a=k(a).data("controller");M.prototype["_on_"+b].apply(a,c)};M.template=function(a){return k('<span class="ng-upload-widget"><input type="checkbox" ng-non-bindable="true"/><object id="'+a+'" /><a></a><span/></span>')};M.prototype={e:function(a){var b=this.view.find("input").attr("checked")?this.value:null;if(this.d===b)return false;else{a.i(this.Za,b);return true}},c:function(a){if((a=a.get(this.Za))&&this.value!==a){this.value=a;this.view.find("a").attr("href",this.value.url).text(this.value.text); -this.view.find("span").text(m.filter.bytes(this.value.size))}this.view.find("input").attr("checked",!!a)}};Q.prototype={e:K(true),c:n};Q.Wb=new Q;var Ja=Q;oa.prototype={e:function(a){var b=this.view.value;if(this.d===b)return false;else{a.m(this.exp,b);this.d=b;return true}},c:function(a){var b=this.view,c=a.get(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}c=c?c:"";if(this.d!=c)this.d=b.value=c;var d=false;b.removeAttribute("ng-error");if(this.zc)d=!(c&&c.length>0);var e=d?"Required Value": -null;if(!d&&this.O&&c){e=a.Kc(this.O,c);d=!!e}if(this.Ka!==e){this.Ka=d;if(e!==null){b.setAttribute("ng-error",e);a.dc(this)}k(b).toggleClass("ng-validation-error",d)}}};pa.prototype={e:function(a){var b=this.view;b=b.checked?b.value:"";if(this.d===b)return false;else{a.m(this.exp,b);this.d=b;return true}},c:function(a){var b=this.view,c=a.eval(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}b.checked=b.value==""+c}};qa.prototype={e:function(a){if(this.view.selectedIndex<0)a.m(this.exp, +if(a.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/))return null;return"Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationaly."},url:function(a){if(a.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/))return null;return"URL needs to be in http://server[:port]/path format."},json:function(a){try{O(a);return null}catch(b){return b.toString()}}},function(a,b){Ca[b]=a});na.prototype={Eb:function(a,b){var c,d=a.attr("type").toLowerCase(), +e=a.attr("name");if(e)e=e.split(":").pop();var f="change",g=true;if(d=="button"||d=="submit"||d=="reset"||d=="image"){c=new Ja(a[0],e);f="click";g=false}else if(d=="text"||d=="textarea"||d=="hidden"||d=="password"){c=new oa(a[0],e);f="keyup change"}else if(d=="checkbox"){c=new pa(a[0],e);f="click"}else if(d=="radio"){c=new sa(a[0],e);f="click"}else if(d=="select-one")c=new qa(a[0],e);else if(d=="select-multiple")c=new ra(a[0],e);else if(d=="file")c=this.Fb(a,e);else throw"Unknown type: "+d;a.data("controller", +c);var h=b.get("$binder");k(c.view,":input").bind(f,function(){if(c.e(b)){var i=k(c.view).attr("ng-action")||"";b.l(c,i)&&h.c(b)}return g});return c},Fb:function(a){var b="__uploadWidget_"+this.gc++,c=M.template(b);a.after(c);b=this.Aa({data:this.ca+"/admin/ServerAPI.swf",width:"95",height:"20",align:"top",Nd:"transparent"},{yd:"uploadWidgetId="+b,Zc:"always"},b);a.remove();a=new M(c,a[0].name,b,this.ca+"/data/"+this.F);k(b).data("controller",a);return a}};M.dispatchEvent=function(a,b,c){a=y.getElementById(a); +a=k(a).data("controller");M.prototype["_on_"+b].apply(a,c)};M.template=function(a){return k('<span class="ng-upload-widget"><input type="checkbox" ng-non-bindable="true"/><object id="'+a+'" /><a></a><span/></span>')};M.prototype={e:function(a){var b=this.view.find("input").attr("checked")?this.value:null;if(this.d===b)return false;else{a.i(this.Ya,b);return true}},c:function(a){if((a=a.get(this.Ya))&&this.value!==a){this.value=a;this.view.find("a").attr("href",this.value.url).text(this.value.text); +this.view.find("span").text(m.filter.bytes(this.value.size))}this.view.find("input").attr("checked",!!a)}};Q.prototype={e:L(true),c:n};Q.Wb=new Q;var Ja=Q;oa.prototype={e:function(a){var b=this.view.value;if(this.d===b)return false;else{a.m(this.exp,b);this.d=b;return true}},c:function(a){var b=this.view,c=a.get(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}c=c?c:"";if(this.d!=c)this.d=b.value=c;var d=false;b.removeAttribute("ng-error");if(this.zc)d=!(c&&c.length>0);var e=d?"Required Value": +null;if(!d&&this.O&&c){e=a.Kc(this.O,c);d=!!e}if(this.Ja!==e){this.Ja=d;if(e!==null){b.setAttribute("ng-error",e);a.dc(this)}k(b).toggleClass("ng-validation-error",d)}}};pa.prototype={e:function(a){var b=this.view;b=b.checked?b.value:"";if(this.d===b)return false;else{a.m(this.exp,b);this.d=b;return true}},c:function(a){var b=this.view,c=a.eval(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}b.checked=b.value==""+c}};qa.prototype={e:function(a){if(this.view.selectedIndex<0)a.m(this.exp, null);else{var b=this.view.value;if(this.d===b)return false;else{a.m(this.exp,b);this.d=b;return true}}},c:function(a){var b=this.view,c=a.get(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}if(c!==this.d){b.value=c?c:"";this.d=c}}};ra.prototype={selected:function(){for(var a=[],b=this.view.options,c=0;c<b.length;c++){var d=b[c];d.selected&&a.push(d.value)}return a},e:function(a){var b=this.selected();if(this.d===b)return false;else{a.m(this.exp,b);this.d=b;return true}},c:function(a){var b= -this.view,c=a.get(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}if(c!==this.d){a=b.options;for(b=0;b<a.length;b++){var d=a[b];d.selected=_.include(c,d.value)}this.d=c}}};sa.prototype={e:function(a){var b=this.view;if(this.ia)return false;else{b.checked=true;this.d=a.m(this.exp,this.Ja);return this.ia=true}},c:function(a){var b=this.view,c=a.get(this.exp);if(this.p&&typeof c==="undefined"){c=this.p;a.m(this.exp,c)}if(this.d!=c){this.ia=b.checked=this.Ja==""+c;this.d=c}}};N.$a=function(a){switch(typeof a){case "string":case "boolean":case "number":return L(a); -case "function":return N.$a(a());case "object":if(a&&a.tagName&&a.nodeName&&a.ownerDocument&&a.removeAttribute)return ha(a);else if(a instanceof m.filter.g){switch(typeof a.html){case "string":case "number":return a.html;case "function":return a.html();case "object":if(a.html&&a.html.tagName&&a.html.nodeName&&a.html.ownerDocument&&a.html.removeAttribute)return ha(a.html);default:break}switch(typeof a.text){case "string":case "number":return L(a.text);case "function":return L(a.text());default:break}}if(a=== -null)return"";return L(z(a,true));default:return""}};N.prototype={e:n,c:function(a){for(var b=[],c=this.exp,d=c.length,e=0;e<d;e++){var f=c[e],g=x.J(f);if(g){a.l(this,g,this.Bc,function(h){b.push(N.$a(h))},function(h,i){fa(this.view,i)});if(this.w)return}else b.push(L(f))}fa(this.view,b.join(""))}};ta.prototype={e:n,c:function(a){var b=k(this.view),c=this.vb;if(this.w){this.w=false;b.removeClass("ng-exception").removeAttr("ng-error")}var d=b.is("img");for(var e in c){for(var f=x.Z(c[e]),g=[],h=0;h< +this.view,c=a.get(this.exp);if(typeof c==="undefined"){c=this.p;a.m(this.exp,c)}if(c!==this.d){a=b.options;for(b=0;b<a.length;b++){var d=a[b];d.selected=_.include(c,d.value)}this.d=c}}};sa.prototype={e:function(a){var b=this.view;if(this.ja)return false;else{b.checked=true;this.d=a.m(this.exp,this.Ia);return this.ja=true}},c:function(a){var b=this.view,c=a.get(this.exp);if(this.p&&typeof c==="undefined"){c=this.p;a.m(this.exp,c)}if(this.d!=c){this.ja=b.checked=this.Ia==""+c;this.d=c}}};N.Za=function(a){switch(typeof a){case "string":case "boolean":case "number":return D(a); +case "function":return N.Za(a());case "object":if(a&&a.tagName&&a.nodeName&&a.ownerDocument&&a.removeAttribute)return ha(a);else if(a instanceof m.filter.g){switch(typeof a.html){case "string":case "number":return a.html;case "function":return a.html();case "object":if(a.html&&a.html.tagName&&a.html.nodeName&&a.html.ownerDocument&&a.html.removeAttribute)return ha(a.html);default:break}switch(typeof a.text){case "string":case "number":return D(a.text);case "function":return D(a.text());default:break}}if(a=== +null)return"";return D(z(a,true));default:return""}};N.prototype={e:n,c:function(a){for(var b=[],c=this.exp,d=c.length,e=0;e<d;e++){var f=c[e],g=x.J(f);if(g){a.l(this,g,this.Bc,function(h){b.push(N.Za(h))},function(h,i){fa(this.view,i)});if(this.w)return}else b.push(D(f))}fa(this.view,b.join(""))}};ta.prototype={e:n,c:function(a){var b=k(this.view),c=this.ub;if(this.w){this.w=false;b.removeClass("ng-exception").removeAttr("ng-error")}var d=b.is("img");for(var e in c){for(var f=x.Z(c[e]),g=[],h=0;h< f.length;h++){var i=x.J(f[h]);if(i)try{var j=a.eval(i,{element:b[0],attrName:e});if(j&&(j.constructor!==array||j.length!==0))g.push(j)}catch(l){this.w=true;W("BindAttrUpdater",l);i=z(l,true);g.push("["+i+"]");b.addClass("ng-exception").attr("ng-error",i)}else g.push(f[h])}f=g.length?g.join(""):null;if(d&&e=="src"&&!f)f=a.get("config.server")+"/images/blank.gif";b.attr(e,f)}}};ua.prototype={e:n,c:function(a){a.l(this,this.exp)}};va.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){var c= k(this.view);Y(b)?c.hide():c.show()})}};wa.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){var c=k(this.view);Y(b)?c.show():c.hide()})}};xa.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){if(b!==null&&b!==undefined)this.view.className=b})}};ya.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){var c=a.get("$index");k(this.view).toggleClass(b,c%2===1)})}};za.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){var c=a.get("$index");k(this.view).toggleClass(b, -c%2===0)})}};Aa.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){k(this.view).attr("style","").css(b)})}};Ba.prototype={e:n,c:function(a){a.l(this,this.X,{},function(b){var c=this;if(!b){b=[];a.Xb(this.X)&&a.i(this.X,b)}var d=b.length,e=this.children.length,f=this.view,g=0,h=null,i=this.$b,j=this.Lc,l=0;p(b,function(C,s){if(l<e){h=c.children[l];h.scope.i(j,C)}else{var t=new v(a.q,c.prefix+j+" in "+c.X+"["+l+"]");t.i("$index",l);i&&t.i(i,s);t.i(j,C);h={scope:t,element:c.template(t,c.prefix, -l)};f.after(h.element);c.children.push(h)}f=h.element;C=(new Date).getTime();h.scope.c();g+=(new Date).getTime()-C;l++});for(b=e;b>d;--b){var q=this.children.pop().element[0];q.parentNode.removeChild(q)}if(h&&h.element[0].nodeName==="OPTION")if(d=k(h.element[0].parentNode).data("controller")){d.d=undefined;d.c(a)}})}};B.va="mouseleave mouseout click dblclick keypress keyup";B.sc=function(){B.ma();var a=k(this);a.bind(B.va,B.ma);var b=a.position(),c=y.documentElement,d=(self.innerWidth||c&&c.clientWidth|| -y.body.clientWidth)-b.left;c=a.hasClass("ng-exception")?"EXCEPTION:":"Validation error...";a=a.attr("ng-error");d=d>375?"left":"right";c=k("<div id='ng-callout' style='width:300px'><div class='ng-arrow-"+d+"'/><div class='ng-title'>"+c+"</div><div class='ng-content'>"+a+"</div></div>");k("body").append(c);if(d==="left")a=b.left+this.offsetWidth+11;else{a=b.left-315;c.find(".ng-arrow-right").css({left:301})}c.css({left:a+"px",top:b.top-3+"px"});return true};B.ma=function(){k("#ng-callout").unbind(B.va, -B.ma).remove();return true};B.prototype={bind:function(){this.B.find(".ng-validation-error,.ng-exception").live("mouseover",B.sc)}};U.jb='<div id="ng-spacer"></div><div id="ng-loading">loading....</div>';U.prototype={xb:function(){this.ba===0&&this.Oa.show();this.ba++},Nb:function(){this.ba--;this.ba===0&&this.Oa.hide("fold")}}})(window,document); +c%2===0)})}};Aa.prototype={e:n,c:function(a){a.l(this,this.exp,{},function(b){k(this.view).attr("style","").css(b)})}};Ba.prototype={e:n,c:function(a){a.l(this,this.X,{},function(b){var c=this;if(!b){b=[];a.Xb(this.X)&&a.i(this.X,b)}var d=b.length,e=this.children.length,f=this.view,g=0,h=null,i=this.$b,j=this.Lc,l=0;q(b,function(C,s){if(l<e){h=c.children[l];h.scope.i(j,C)}else{var t=new v(a.q,c.prefix+j+" in "+c.X+"["+l+"]");t.i("$index",l);i&&t.i(i,s);t.i(j,C);h={scope:t,element:c.template(t,c.prefix, +l)};f.after(h.element);c.children.push(h)}f=h.element;C=(new Date).getTime();h.scope.c();g+=(new Date).getTime()-C;l++});for(b=e;b>d;--b){var p=this.children.pop().element[0];p.parentNode.removeChild(p)}if(h&&h.element[0].nodeName==="OPTION")if(d=k(h.element[0].parentNode).data("controller")){d.d=undefined;d.c(a)}})}};B.wa="mouseleave mouseout click dblclick keypress keyup";B.sc=function(){B.na();var a=k(this);a.bind(B.wa,B.na);var b=a.position(),c=y.documentElement,d=(self.innerWidth||c&&c.clientWidth|| +y.body.clientWidth)-b.left;c=a.hasClass("ng-exception")?"EXCEPTION:":"Validation error...";a=a.attr("ng-error");d=d>375?"left":"right";c=k("<div id='ng-callout' style='width:300px'><div class='ng-arrow-"+d+"'/><div class='ng-title'>"+c+"</div><div class='ng-content'>"+a+"</div></div>");k("body").append(c);if(d==="left")a=b.left+this.offsetWidth+11;else{a=b.left-315;c.find(".ng-arrow-right").css({left:301})}c.css({left:a+"px",top:b.top-3+"px"});return true};B.na=function(){k("#ng-callout").unbind(B.wa, +B.na).remove();return true};B.prototype={bind:function(){this.B.find(".ng-validation-error,.ng-exception").live("mouseover",B.sc)}};U.ib='<div id="ng-spacer"></div><div id="ng-loading">loading....</div>';U.prototype={wb:function(){this.ba===0&&this.Na.show();this.ba++},Mb:function(){this.ba--;this.ba===0&&this.Na.hide("fold")}}})(window,document); @@ -537,6 +537,7 @@ UrlWatcher.prototype = { }, setUrl: function(url) { + //TODO: conditionaly? var existingURL = window.location.href; if (!existingURL.match(/#/)) existingURL += '#'; @@ -1952,20 +1953,25 @@ foreach({ }, 'linky': function(text){ + if (!text) return text; function regExpEscape(text) { return text.replace(/([\/\.\*\+\?\|\(\)\[\]\{\}\\])/g, '\\$1'); } - var URL = /(ftp|http|https):\/\/([^\(\)|\s]+)/gm; - var html = text; - var dups = {}; - foreach(text.match(URL)||[], function(url){ - url = url.replace(/\.$/, ''); - if (!dups[url]) { - html = html.replace(new RegExp(regExpEscape(url), 'gm'), '<a href="'+url+'">'+url+'</a>'); - dups[url] = true; - } - }); - return new angularFilter.Meta({text:text, html:html}); + var URL = /(ftp|http|https|mailto):\/\/([^\(\)|\s]+)/; + var match; + var raw = text; + var html = []; + while (match=raw.match(URL)) { + var url = match[0].replace(/[\.\;\,\(\)\{\}\<\>]$/,''); + var i = raw.indexOf(url); + html.push(escapeHtml(raw.substr(0, i))); + html.push('<a href="' + url + '">'); + html.push(url); + html.push('</a>'); + raw = raw.substring(i + url.length); + } + html.push(escapeHtml(raw)); + return new angularFilter.Meta({text:text, html:html.join('')}); } }, function(v,k){angularFilter[k] = v;}); @@ -2424,15 +2430,13 @@ Parser.prototype = { } }, - _unary: function(fn, parse) { - var right = parse.apply(this); + _unary: function(fn, right) { return function(self) { return fn(self, right(self)); }; }, - _binary: function(left, fn, parse) { - var right = parse.apply(this); + _binary: function(left, fn, right) { return function(self) { return fn(self, left(self), right(self)); }; @@ -2473,7 +2477,7 @@ Parser.prototype = { var token; while(true) { if ((token = this.expect('|'))) { - left = this._binary(left, token.fn, this.filter); + left = this._binary(left, token.fn, this.filter()); } else { return left; } @@ -2535,7 +2539,7 @@ Parser.prototype = { this.text.substring(token.index) + "' is not assignable."; } var ident = function(){return left.isAssignable;}; - return this._binary(ident, token.fn, this.logicalOR); + return this._binary(ident, token.fn, this.logicalOR()); } else { return left; } @@ -2546,7 +2550,7 @@ Parser.prototype = { var token; while(true) { if ((token = this.expect('||'))) { - left = this._binary(left, token.fn, this.logicalAND); + left = this._binary(left, token.fn, this.logicalAND()); } else { return left; } @@ -2558,7 +2562,7 @@ Parser.prototype = { var token; while(true) { if ((token = this.expect('&&'))) { - left = this._binary(left, token.fn, this.negated); + left = this._binary(left, token.fn, this.negated()); } else { return left; } @@ -2568,9 +2572,9 @@ Parser.prototype = { negated: function(){ var token; if (token = this.expect('!')) { - return this._unary(token.fn, this.equality); + return this._unary(token.fn, this.assignment()); } else { - return this.equality(); + return this.equality(); } }, @@ -2579,7 +2583,7 @@ Parser.prototype = { var token; while(true) { if ((token = this.expect('==','!='))) { - left = this._binary(left, token.fn, this.relational); + left = this._binary(left, token.fn, this.relational()); } else { return left; } @@ -2591,7 +2595,7 @@ Parser.prototype = { var token; while(true) { if ((token = this.expect('<', '>', '<=', '>='))) { - left = this._binary(left, token.fn, this.additive); + left = this._binary(left, token.fn, this.additive()); } else { return left; } @@ -2602,7 +2606,7 @@ Parser.prototype = { var left = this.multiplicative(); var token; while(token = this.expect('+','-')) { - left = this._binary(left, token.fn, this.multiplicative); + left = this._binary(left, token.fn, this.multiplicative()); } return left; }, @@ -2611,7 +2615,7 @@ Parser.prototype = { var left = this.unary(); var token; while(token = this.expect('*','/','%')) { - left = this._binary(left, token.fn, this.unary); + left = this._binary(left, token.fn, this.unary()); } return left; }, @@ -2621,7 +2625,7 @@ Parser.prototype = { if (this.expect('+')) { return this.primary(); } else if (token = this.expect('-')) { - return this._binary(Parser.ZERO, token.fn, this.multiplicative); + return this._binary(Parser.ZERO, token.fn, this.multiplicative()); } else { return this.primary(); } diff --git a/example/tweeter/tweeter_addressbook.html b/example/tweeter/tweeter_addressbook.html index 70068b0a..21296925 100644 --- a/example/tweeter/tweeter_addressbook.html +++ b/example/tweeter/tweeter_addressbook.html @@ -20,7 +20,7 @@ [ <a href="#" ng-action="$anchor.edituser=user.screen_name">edit</a> | <a href="#" ng-action="users.$remove(user)">X</a> ] - <div class="notes">{{user.notes}}</div> + <div class="notes">{{user.notes|linky}}</div> <div class="clrleft"></div> </li> </ul> @@ -67,7 +67,7 @@ tweets={{tweets}} ]: {{tweet.text | linky}} <span class="notes">{{tweet.created_at}}</span> - <span class="notes">{{user.notes}}</span> + <span class="notes">{{user.notes|linky}}</span> <div class="clrleft"></div> </li> </ul> diff --git a/example/tweeter/tweeterclient.js b/example/tweeter/tweeterclient.js index f5f2d731..6b8427a7 100644 --- a/example/tweeter/tweeterclient.js +++ b/example/tweeter/tweeterclient.js @@ -25,9 +25,9 @@ $(document).ready(function(){ scope.set('fetchTweets', fetchTweets); scope.set('users', [ - {screen_name:'mhevery', name:'Mi\u0161ko Hevery', notes:'Author of <angular/>.', + {screen_name:'mhevery', name:'Mi\u0161ko Hevery', notes:'Author of <angular/> http://www.getangular.com.', profile_image_url:'http://a3.twimg.com/profile_images/54360179/Me_-_Small_Banner_normal.jpg'}, - {screen_name:'abrons', name:'Adam Abrons', notes:'Author of <angular/> & Ruby guru.', + {screen_name:'abrons', name:'Adam Abrons', notes:'Author of <angular/> & Ruby guru see: http://www.getangular.com.', profile_image_url:'http://media.linkedin.com/mpr/mpr/shrink_80_80/p/2/000/005/0a8/044278d.jpg'} ]); scope.watchUrl(); diff --git a/src/Filters.js b/src/Filters.js index 833d5630..a0bedaaf 100644 --- a/src/Filters.js +++ b/src/Filters.js @@ -296,20 +296,25 @@ foreach({ }, 'linky': function(text){ + if (!text) return text; function regExpEscape(text) { return text.replace(/([\/\.\*\+\?\|\(\)\[\]\{\}\\])/g, '\\$1'); } - var URL = /(ftp|http|https):\/\/([^\(\)|\s]+)/gm; - var html = text; - var dups = {}; - foreach(text.match(URL)||[], function(url){ - url = url.replace(/\.$/, ''); - if (!dups[url]) { - html = html.replace(new RegExp(regExpEscape(url), 'gm'), '<a href="'+url+'">'+url+'</a>'); - dups[url] = true; - } - }); - return new angularFilter.Meta({text:text, html:html}); + var URL = /(ftp|http|https|mailto):\/\/([^\(\)|\s]+)/; + var match; + var raw = text; + var html = []; + while (match=raw.match(URL)) { + var url = match[0].replace(/[\.\;\,\(\)\{\}\<\>]$/,''); + var i = raw.indexOf(url); + html.push(escapeHtml(raw.substr(0, i))); + html.push('<a href="' + url + '">'); + html.push(url); + html.push('</a>'); + raw = raw.substring(i + url.length); + } + html.push(escapeHtml(raw)); + return new angularFilter.Meta({text:text, html:html.join('')}); } }, function(v,k){angularFilter[k] = v;}); diff --git a/test/FiltersTest.js b/test/FiltersTest.js index fee59bac..5ca63ca7 100644 --- a/test/FiltersTest.js +++ b/test/FiltersTest.js @@ -153,10 +153,15 @@ FiltersTest.prototype.testHtml = function() { }; FiltersTest.prototype.testLinky = function() { + var linky = angular.filter.linky; assertEquals( - 'a (<a href="http://a">http://a</a>) <a href="http://a">http://a</a> \n <a href="http://1.2/v:~-123">http://1.2/v:~-123</a>. c', - angular.filter.linky("a (http://a) http://a \n http://1.2/v:~-123. c").html); - assertTrue(angular.filter.linky("a") instanceof angular.filter.Meta); + '<a href="http://ab">http://ab</a> ' + + '(<a href="http://a">http://a</a>) ' + + '<<a href="http://a">http://a</a>> \n ' + + '<a href="http://1.2/v:~-123">http://1.2/v:~-123</a>. c', + linky("http://ab (http://a) <http://a> \n http://1.2/v:~-123. c").html); + assertTrue(linky("a") instanceof angular.filter.Meta); + assertEquals(undefined, linky(undefined)); }; |
