mailcatcher 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,7 +4,7 @@ Catches mail and serves it through a dream.
4
4
 
5
5
  MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface. Run mailcatcher, set your favourite app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server, then check out http://127.0.0.1:1080 to see the mail that's arrived so far.
6
6
 
7
- ![MailCatcher screenshot](http://cl.ly/1400252J3k313s2b0v1Z/Screen_shot_2011-06-23_at_11.39.03_PM.png)
7
+ ![MailCatcher screenshot](http://f.cl.ly/items/3w2T1p0F3g003b2i1F2z/Screen%20shot%202011-06-23%20at%2011.39.03%20PM.png)
8
8
 
9
9
  ## Features
10
10
 
@@ -32,7 +32,7 @@ The brave can get the source from [the GitHub repository][mailcatcher-github].
32
32
 
33
33
  ### RVM
34
34
 
35
- Under RVM your mailcatcher command may only available under the ruby you install mailcatcher into. To prevent this, and to prevent gem conflicts, install mailcatcher into a dedicated gemset and create wrapper scripts:
35
+ Under RVM your mailcatcher command may only be available under the ruby you install mailcatcher into. To prevent this, and to prevent gem conflicts, install mailcatcher into a dedicated gemset and create wrapper scripts:
36
36
 
37
37
  rvm default@mailcatcher --create gem install mailcatcher
38
38
  rvm wrapper default@mailcatcher --no-prefix mailcatcher catchmail
@@ -42,7 +42,7 @@ Under RVM your mailcatcher command may only available under the ruby you install
42
42
  To set up your rails app, I recommend adding this to your `environment/development.rb`:
43
43
 
44
44
  config.action_mailer.delivery_method = :smtp
45
- config.action_mailer.smtp_settings = { :host => "localhost", :port => 1025 }
45
+ config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
46
46
 
47
47
  ### PHP
48
48
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.5
1
+ 0.5.6
@@ -29,6 +29,10 @@ OptionParser.new do |parser|
29
29
  options[:smtp_port] = port
30
30
  end
31
31
 
32
+ parser.on('-f FROM', 'Set the sending address') do |from|
33
+ options[:from] = from
34
+ end
35
+
32
36
  parser.on('-h', '--help', 'Display this help information') do
33
37
  puts parser
34
38
  exit!
@@ -41,4 +45,6 @@ Mail.defaults do
41
45
  :port => options[:smtp_port]
42
46
  end
43
47
 
44
- Mail.deliver ARGF.read
48
+ message = Mail.new ARGF.read
49
+ message.return_path = options[:from] if options[:from]
50
+ message.deliver
@@ -1,6 +1,11 @@
1
1
  (function() {
2
2
  var MailCatcher;
3
3
 
4
+ jQuery.expr[':'].icontains = function(a, i, m) {
5
+ var _ref, _ref2;
6
+ return ((_ref = (_ref2 = a.textContent) != null ? _ref2 : a.innerText) != null ? _ref : "").toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
7
+ };
8
+
4
9
  MailCatcher = (function() {
5
10
 
6
11
  function MailCatcher() {
@@ -9,6 +14,15 @@
9
14
  e.preventDefault();
10
15
  return _this.loadMessage($(e.currentTarget).attr('data-message-id'));
11
16
  });
17
+ $('input[name=search]').keyup(function(e) {
18
+ var query;
19
+ query = $.trim($(e.currentTarget).val());
20
+ if (query) {
21
+ return _this.searchMessages(query);
22
+ } else {
23
+ return _this.clearSearch();
24
+ }
25
+ });
12
26
  $('#message .views .format.tab a').live('click', function(e) {
13
27
  e.preventDefault();
14
28
  return _this.loadMessageBody(_this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format'));
@@ -79,8 +93,16 @@
79
93
  }
80
94
  };
81
95
 
96
+ MailCatcher.prototype.offsetTimeZone = function(date) {
97
+ var offset;
98
+ offset = Date.now().getTimezoneOffset() * 60000;
99
+ date.setTime(date.getTime() - offset);
100
+ return date;
101
+ };
102
+
82
103
  MailCatcher.prototype.formatDate = function(date) {
83
104
  if (typeof date === "string") date && (date = this.parseDate(date));
105
+ date && (date = this.offsetTimeZone(date));
84
106
  return date && (date = date.toString("dddd, d MMM yyyy h:mm:ss tt"));
85
107
  };
86
108
 
@@ -93,6 +115,27 @@
93
115
  return $('#messages tr.selected').data('message-id');
94
116
  };
95
117
 
118
+ MailCatcher.prototype.searchMessages = function(query) {
119
+ var $rows, selector, token;
120
+ selector = ((function() {
121
+ var _i, _len, _ref, _results;
122
+ _ref = query.split(/\s+/);
123
+ _results = [];
124
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
125
+ token = _ref[_i];
126
+ _results.push(":icontains('" + token + "')");
127
+ }
128
+ return _results;
129
+ })()).join("");
130
+ $rows = $("#messages tbody tr");
131
+ $rows.not(selector).hide();
132
+ return $rows.filter(selector).show();
133
+ };
134
+
135
+ MailCatcher.prototype.clearSearch = function() {
136
+ return $('#messages tbody tr').show();
137
+ };
138
+
96
139
  MailCatcher.prototype.addMessage = function(message) {
97
140
  return $('#messages tbody').append($('<tr />').attr('data-message-id', message.id.toString()).append($('<td/>').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('<td/>').text((message.recipients || []).join(', ') || "No receipients").toggleClass("blank", !message.recipients.length)).append($('<td/>').text(message.subject || "No subject").toggleClass("blank", !message.subject)).append($('<td/>').text(this.formatDate(message.created_at))));
98
141
  };
@@ -188,8 +231,8 @@
188
231
  };
189
232
 
190
233
  MailCatcher.prototype.subscribeWebSocket = function() {
191
- var secure;
192
- var _this = this;
234
+ var secure,
235
+ _this = this;
193
236
  secure = window.location.scheme === 'https';
194
237
  this.websocket = new WebSocket("" + (secure ? 'wss' : 'ws') + "://" + window.location.host + "/messages");
195
238
  return this.websocket.onmessage = function(event) {
@@ -0,0 +1,36 @@
1
+ var Flexie=function(H,R){function O(a){if(a)a=a.replace(Ha,E).replace(Ia,E);return a}function ia(a,d){a="on"+a;var c=H[a];H[a]=typeof H[a]!=="function"?d:function(){c&&c();d()}}function ja(a){var d=a.nodeName.toLowerCase();if(a.id)d+="#"+a.id;else if(a.FLX_DOM_ID)d+="["+ka+"='"+a.FLX_DOM_ID+"']";return d}function ca(a){if(!a.FLX_DOM_ID){da+=1;a.FLX_DOM_ID=da;a.setAttribute(ka,a.FLX_DOM_ID)}}function Ja(a){var d,c,b,e,f=/\s?,\s?/,g,h,k,i={},n={},r,p,j,l,m,o,y,v;g=function(s,w,q,A){var z,C,I;s={selector:O(s),
2
+ properties:[]};z=0;for(C=w.properties.length;z<C;z++){I=w.properties[z];s.properties.push({property:O(I.property),value:O(I.value)})}if(q&&A)s[q]=A;return s};h=function(s,w,q,A){var z=q&&A?i[s]:n[s],C,I,P,L,t;if(z){C=0;for(I=w.properties.length;C<I;C++){P=w.properties[C];L=0;for(t=z.properties.length;L<t;L++){s=z.properties[L];if(P.property===s.property)return false}z.properties.push(P)}if(q&&A)z[q]=A}else if(q&&A)i[s]=g(s,w,q,A);else n[s]=g(s,w,x,x)};r=0;for(p=a.length;r<p;r++){j=a[r];d=O(j.selector).replace(f,
3
+ ",").split(f);l=0;for(m=d.length;l<m;l++){o=O(d[l]);c=j.properties;y=0;for(v=c.length;y<v;y++){e=c[y];b=O(e.property);e=O(e.value);if(b){b=b.replace("box-",E);switch(b){case "display":e==="box"&&h(o,j,x,x);break;case "orient":case "align":case "direction":case "pack":h(o,j,x,x);break;case "flex":case "flex-group":case "ordinal-group":h(o,j,b,e)}}}}}for(k in n)n.hasOwnProperty(k)&&B.push(n[k]);for(k in i)i.hasOwnProperty(k)&&la.push(i[k]);return{boxes:B,children:la}}function ma(a,d,c){var b,e,f=[],
4
+ g,h,k,i,n,r,p;g=0;for(h=c.length;g<h;g++){k=c[g];if(k.selector){b=d(k.selector);b=b[0]?b:[b];if(b[0]){i=0;for(n=b.length;i<n;i++){r=b[i];if(r.nodeName!==na)switch(r.nodeName.toLowerCase()){case "script":case "style":case "link":break;default:if(r.parentNode===a){ca(r);e={};for(p in k)if(k.hasOwnProperty(p))e[p]=k[p];e.match=r;f.push(e)}}}}}else{ca(k);f.push({match:k,selector:ja(k)})}}return f}function oa(a,d,c){c=c.replace(c.charAt(0),c.charAt(0).toUpperCase());c=a["offset"+c]||0;var b,e,f;if(c){b=
5
+ 0;for(e=d.length;b<e;b++){f=parseFloat(a.currentStyle[d[b]]);isNaN(f)||(c-=f)}}return c}function pa(a,d){var c,b,e=a.currentStyle&&a.currentStyle[d],f=a.style;if(!qa.test(e)&&Ka.test(e)){c=f.left;b=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;f.left=e||0;e=f.pixelLeft+"px";f.left=c||0;a.runtimeStyle.left=b}return e}function D(a,d,c){if(a!==na){if(H.getComputedStyle)a=H.getComputedStyle(a,x)[d];else if(La.test(d)){var b=a&&a.currentStyle?a.currentStyle[d]:0;if(!qa.test(b)){if(b==="auto"||
6
+ b==="medium"){switch(d){case "width":b=[ra,sa,ta,ua];b=oa(a,b,d);break;case "height":b=[ea,va,wa,xa];b=oa(a,b,d);break;default:b=pa(a,d)}a=b}else a=pa(a,d);b=a}a=b}else a=a.currentStyle[d];if(c){a=parseInt(a,10);if(isNaN(a))a=0}return a}}function Ma(a){return a.innerWidth||a.clientWidth}function Na(a){return a.innerHeight||a.clientHeight}function fa(a,d,c,b){var e=[],f,g,h;f=0;for(g=ya.length;f<g;f++){h=ya[f];e.push((b?h:E)+d+":"+(!b?h:E)+c)}a.style.cssText+=e.join(";");return a}function M(a,d,c){var b=
7
+ a&&a[0]?a:[a],e,f;e=0;for(f=b.length;e<f;e++)if((a=b[e])&&a.style)a.style[d]=c?c+"px":E}function Oa(a){var d,c,b,e,f;a=a.replace(Pa,function(g,h){return"%"+h}).replace(/\s|\>|\+|\~/g,"%").split(/%/g);d={_id:100,_class:10,_tag:1};b=c=0;for(e=a.length;b<e;b++){f=a[b];if(/#/.test(f))c+=d._id;else if(/\.|\[|\:/.test(f))c+=d._class;else if(/[a-zA-Z]+/.test(f))c+=d._tag}return c}function Qa(a,d,c){d=[];var b,e=(c?"ordinal":"flex")+"Specificity",f,g,h,k,i,n;f=0;for(g=a.length;f<g;f++){h=a[f];if(!c&&h.flex||
8
+ c&&h["ordinal-group"]){h[e]=h[e]||Oa(h.selector);b=U;k=0;for(i=d.length;k<i;k++){n=d[k];if(n.match===h.match){if(n[e]<h[e])d[g]=h;return U}}b||d.push(h)}}return d}function Z(a,d,c){var b={},e=[],f=0,g,h,k,i,n,r,p,j;a=Qa(a,d,c);h=0;for(k=d.length;h<k;h++){i=d[h];n=0;for(r=a.length;n<r;n++){p=a[n];if(c){g=p["ordinal-group"]||"1";if(p.match===i){p.match.setAttribute("data-ordinal-group",g);b[g]=b[g]||[];b[g].push(p)}}else{g=p.flex||"0";if(p.match===i&&(!p[g]||p[g]&&parseInt(p[g],10)<=1)){f+=parseInt(g,
9
+ 10);b[g]=b[g]||[];b[g].push(p)}}}if(c&&!i.getAttribute("data-ordinal-group")){g="1";i.setAttribute("data-ordinal-group",g);b[g]=b[g]||[];b[g].push({match:i})}}for(j in b)b.hasOwnProperty(j)&&e.push(j);e.sort(function(l,m){return m-l});return{keys:e,groups:b,total:f}}function Ra(){if(!za){var a,d,c,b,e=R.body,f=R.documentElement,g;ia("resize",function(){g&&window.clearTimeout(g);g=window.setTimeout(function(){c=H.innerWidth||f.innerWidth||f.clientWidth||e.clientWidth;b=H.innerHeight||f.innerHeight||
10
+ f.clientHeight||e.clientHeight;if(a!==c||d!==b){J.updateInstance(x,x);a=c;d=b}},250)});za=u}}function Aa(a){var d,c,b,e,f;d=0;for(c=a.length;d<c;d++){b=a[d];e=b.style.width;f=b.style.height;b.style.cssText=E;b.style.width=e;b.style.height=f}}function Y(a,d){var c=[],b,e,f;e=0;for(f=d.length;e<f;e++)if(b=d[e])switch(b.nodeName.toLowerCase()){case "script":case "style":case "link":break;default:if(b.nodeType===1)c.push(b);else if(b.nodeType===3&&(b.isElementContentWhitespace||Sa.test(b.data))){a.removeChild(b);
11
+ e--}}return c}function Ba(a){var d=0;a=a.parentNode;for(var c;a.FLX_DOM_ID;){c=B[a.FLX_DOM_ID];c=Z(c.children,Y(a,a.childNodes),x);d+=c.total;c=u;a=a.parentNode}return{nested:c,flex:d}}function Ta(a,d){var c=a.target;if(!c.FLX_DOM_ID)c.FLX_DOM_ID=c.FLX_DOM_ID||++da;if(!a.nodes)a.nodes=Y(c,c.childNodes);if(!a.selector){a.selector=ja(c);c.setAttribute($,u)}if(!a.properties)a.properties=[];if(!a.children)a.children=ma(c,T,Y(c,c.childNodes));if(!a.nested)a.nested=a.selector+" ["+$+"]";a.target=c;a._instance=
12
+ d;return a}var J={},da=0,ka="data-flexie-id",$="data-flexie-parent",Q,Ca,V={NW:{s:"*.Dom.select"},DOMAssistant:{s:"*.$",m:"*.DOMReady"},Prototype:{s:"$$",m:"document.observe",p:"dom:loaded",c:"document"},YAHOO:{s:"*.util.Selector.query",m:"*.util.Event.onDOMReady",c:"*.util.Event"},MooTools:{s:"$$",m:"window.addEvent",p:"domready"},Sizzle:{s:"*"},jQuery:{s:"*",m:"*(document).ready"},dojo:{s:"*.query",m:"*.addOnLoad"}},T,qa=/^-?\d+(?:px)?$/i,Ka=/^-?\d/,La=/width|height|margin|padding|border/,Ua=/(msie) ([\w.]+)/,
13
+ Va=/\t|\n|\r/g,Wa=/^max\-([a-z]+)/,Xa=/^https?:\/\//i,Ha=/^\s\s*/,Ia=/\s\s*$/,Sa=/^\s*$/,Pa=/\s?(\#|\.|\[|\:(\:)?[^first\-(line|letter)|before|after]+)/g,E="",Da=" ",aa="$1",sa="paddingRight",va="paddingBottom",ra="paddingLeft",ea="paddingTop",ua="borderRightWidth",xa="borderBottomWidth",ta="borderLeftWidth",wa="borderTopWidth",ya=" -o- -moz- -ms- -webkit- -khtml- ".split(Da),Ya={orient:"horizontal",align:"stretch",direction:"inherit",pack:"start"},B=[],la=[],ga,za,u=true,U=false,x=null,na,W={IE:function(){var a,
14
+ d=Ua.exec(H.navigator.userAgent.toLowerCase());if(d)a=parseInt(d[2],10);return a}()},Ea;Ea=function(){function a(j){return j.replace(k,function(l,m,o){var y,v;l=o.split(",");o=0;for(y=l.length;o<y;o++){v=l[o];v.replace(i,aa).replace(n,aa).replace(p,aa).replace(r,Da)}return m+l.join(",")})}function d(){if(H.XMLHttpRequest)return new H.XMLHttpRequest;try{return new H.ActiveXObject("Microsoft.XMLHTTP")}catch(j){return x}}function c(j){var l=d();l.open("GET",j,U);l.send();l=l.status===200?l.responseText:
15
+ E;if(j===window.location.href){j=l;l=/<style[^<>]*>([^<>]*)<\/style[\s]?>/img;for(var m=l.exec(j),o=[];m;){(m=m[1])&&o.push(m);m=l.exec(j)}l=o.join("\n\n")}return l}function b(j,l){if(j){if(Xa.test(j))return l.substring(0,l.indexOf("/",8))===j.substring(0,j.indexOf("/",8))?j:x;if(j.charAt(0)==="/")return l.substring(0,l.indexOf("/",8))+j;var m=l.split("?")[0];if(j.charAt(0)!=="?"&&m.charAt(m.length-1)!=="/")m=m.substring(0,m.lastIndexOf("/")+1);return m+j}}function e(j){if(j)return c(j).replace(f,
16
+ E).replace(g,function(l,m,o,y,v,s){l=e(b(o||v,j));return s?"@media "+s+" {"+l+"}":l}).replace(h,function(l,m,o,y){o=o||E;return m?l:" url("+o+b(y,j,true)+o+") "});return E}var f=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*?/g,g=/@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))\s*([^;]*);/g,h=/(behavior\s*?:\s*)?\burl\(\s*(["']?)(?!data:)([^"')]+)\2\s*\)/g,k=/((?:^|(?:\s*\})+)(?:\s*@media[^\{]+\{)?)\s*([^\{]*?[\[:][^{]+)/g,i=/([(\[+~])\s+/g,n=/\s+([)\]+~])/g,r=/\s+/g,p=/^\s*((?:[\S\s]*\S)?)\s*$/;
17
+ return function(){var j,l=[],m,o;m=R.getElementsByTagName("BASE");var y=m.length>0?m[0].href:R.location.href,v=R.styleSheets,s,w;m=0;for(o=v.length;m<o;m++){j=v[m];j!=x&&l.push(j)}l.push(window.location);m=0;for(o=l.length;m<o;m++)if(j=l[m]){if(j=b(j.href,y))s=a(e(j));if(s){w=s;j=[];v=void 0;var q=void 0,A=void 0;q=void 0;A=void 0;var z=void 0,C=void 0,I=void 0,P=void 0;z=void 0;w=w.replace(Va,E);w=w.replace(/\s?(\{|\:|\})\s?/g,aa);v=w.split("}");for(I in v)if(v.hasOwnProperty(I))if(w=v[I]){q=[w,
18
+ "}"].join(E);if((A=/(\@media[^\{]+\{)?(.*)\{(.*)\}/.exec(q))&&A[3]){q=A[2];A=A[3].split(";");C=[];for(P in A)if(A.hasOwnProperty(P)){z=A[P];z=z.split(":");z.length&&z[1]&&C.push({property:z[0],value:z[1]})}q&&C.length&&j.push({selector:q,properties:C})}}w=j;w=Ja(w)}}l=w;var L,t,F,G;I={};var N;P="["+$+"]";var K,X,S,ha,ba,Fa,Ga;if(l){q=0;for(A=l.boxes.length;q<A;q++){F=l.boxes[q];F.selector=O(F.selector);s=F.selector;m=F.properties;o=y=w=j=v=x;C=0;for(z=m.length;C<z;C++){G=m[C];L=O(G.property);t=O(G.value);
19
+ if(L){L=L.replace("box-",E);switch(L){case "display":if(t==="box")o=t;break;case "orient":y=t;break;case "align":w=t;break;case "direction":j=t;break;case "pack":v=t}}}L=T;F=L(F.selector);F=F[0]?F:[F];C=0;for(z=F.length;C<z;C++){t=F[C];if(t.nodeType){ca(t);G=ma(t,L,l.children);N=s+" "+P;G={target:t,selector:s,properties:m,children:G,display:o,orient:y,align:w,direction:j,pack:v,nested:N};if(N=I[t.FLX_DOM_ID])for(K in G){if(G.hasOwnProperty(K)){t=G[K];switch(K){case "selector":if(t&&!RegExp(t).test(N[K]))N[K]+=
20
+ ", "+t;break;case "children":X=0;for(S=G[K].length;X<S;X++){ha=G[K][X];t=U;ba=0;for(Fa=N[K].length;ba<Fa;ba++){Ga=N[K][ba];if(ha.match.FLX_DOM_ID===Ga.match.FLX_DOM_ID)t=u}t||N[K].push(ha)}break;default:if(t)N[K]=t}}}else{N=I;X=t.FLX_DOM_ID;S=void 0;for(S in G)if(G.hasOwnProperty(S))G[S]=G[S]||Ya[S];N[X]=G;I[t.FLX_DOM_ID].target.setAttribute($,u)}}}}ga=T(P);B={};q=0;for(A=ga.length;q<A;q++){t=ga[q];B[t.FLX_DOM_ID]=I[t.FLX_DOM_ID]}for(K in B)if(B.hasOwnProperty(K)){F=B[K];F.display==="box"&&new J.box(F)}}}}();
21
+ J.box=function(a){return this.renderModel(a)};J.box.prototype={properties:{boxModel:function(a,d,c){var b,e,f,g,h;a.style.display="block";if(W.IE===8)a.style.overflow="hidden";if(!c.cleared){d=c.selector.split(/\s?,\s?/);b=R.styleSheets;b=b[b.length-1];e="padding-top:"+(D(a,ea,x)||"0.1px;");f=0;for(g=d.length;f<g;f++){h=d[f];if(b.addRule)if(W.IE<8){a.style.zoom="1";if(W.IE===6)b.addRule(h.replace(/\>|\+|\~/g,""),e+"zoom:1;",0);else W.IE===7&&b.addRule(h,e+"display:inline-block;",0)}else{b.addRule(h,
22
+ e,0);b.addRule(h+":before","content: '.';display: block;height: 0;overflow: hidden",0);b.addRule(h+":after","content: '.';display: block;height: 0;overflow: hidden;clear:both;",0)}else if(b.insertRule){b.insertRule(h+"{"+e+"}",0);b.insertRule(h+":after{content: '.';display: block;height: 0;overflow: hidden;clear:both;}",0)}}c.cleared=u}},boxDirection:function(a,d,c){var b,e,f;if(c.direction==="reverse"&&!c.reversed||c.direction==="normal"&&c.reversed){d=d.reverse();b=0;for(e=d.length;b<e;b++){f=d[b];
23
+ a.appendChild(f)}a=T(c.nested);b=0;for(e=a.length;b<e;b++){d=a[b];if((d=B[d.FLX_DOM_ID])&&d.direction==="inherit")d.direction=c.direction}c.reversed=!c.reversed}},boxOrient:function(a,d,c){var b,e,f,g;a={pos:"marginLeft",opp:"marginRight",dim:"width",out:"offsetWidth",func:Ma,pad:[ra,sa,ta,ua]};b={pos:"marginTop",opp:"marginBottom",dim:"height",out:"offsetHeight",func:Na,pad:[ea,va,wa,xa]};if(!Q){e=0;for(f=d.length;e<f;e++){g=d[e];g.style[W.IE>=9?"cssFloat":"styleFloat"]="left";if(c.orient==="vertical"||
24
+ c.orient==="block-axis")g.style.clear="left";if(W.IE===6)g.style.display="inline"}}switch(c.orient){case "vertical":case "block-axis":this.props=b;this.anti=a;break;default:this.props=a;this.anti=b}},boxOrdinalGroup:function(a,d,c){var b,e;if(d.length){b=function(f){f=f.keys;f=c.reversed?f:f.reverse();var g,h,k,i,n,r;g=0;for(h=f.length;g<h;g++){k=f[g];i=0;for(n=d.length;i<n;i++){r=d[i];k===r.getAttribute("data-ordinal-group")&&a.appendChild(r)}}};e=Z(c.children,d,u);e.keys.length>1&&b(e)}},boxFlex:function(a,
25
+ d,c){var b=this,e,f,g,h;if(d.length){e=function(k){var i=k.groups;k=k.keys;var n,r,p,j,l,m,o,y,v,s;r=0;for(p=k.length;r<p;r++){j=k[r];l=0;for(m=i[j].length;l<m;l++){o=i[j][l];n=x;y=0;for(v=o.properties.length;y<v;y++){s=o.properties[y];if(Wa.test(s.property))n=parseFloat(s.value)}if(!n||o.match[b.props.out]>n)M(o.match,b.props.pos,x)}}};f=function(k){var i=0,n,r,p,j,l,m;n=0;for(r=d.length;n<r;n++){p=d[n];i+=D(p,b.props.dim,u);j=0;for(l=b.props.pad.length;j<l;j++){m=b.props.pad[j];i+=D(p,m,u)}i+=D(p,
26
+ b.props.pos,u);i+=D(p,b.props.opp,u)}i=a[b.props.out]-i;n=0;for(r=b.props.pad.length;n<r;n++){m=b.props.pad[n];i-=D(a,m,u)}return{whitespace:i,ration:i/k.total}};g=function(k,i){var n=k.groups,r=k.keys,p,j,l=i.ration,m,o,y,v,s,w,q;o=0;for(y=r.length;o<y;o++){v=r[o];m=l*v;s=0;for(w=n[v].length;s<w;s++){q=n[v][s];if(q.match){p=q.match.getAttribute("data-flex");j=q.match.getAttribute("data-specificity");if(!p||j<=q.flexSpecificity){q.match.setAttribute("data-flex",v);q.match.setAttribute("data-specificity",
27
+ q.flexSpecificity);p=D(q.match,b.props.dim,u);p=Math.max(0,p+m);M(q.match,b.props.dim,p)}}}}};h=Z(c.children,d,x);if(h.total){c.hasFlex=u;e(h);c=f(h);g(h,c)}}},boxAlign:function(a,d,c){var b,e;b=Ba(a);var f,g,h,k,i;if(!Q&&!b.flex&&(c.orient==="vertical"||c.orient==="block-axis")){a:{b=this.anti.dim;f=a.parentNode;if(f.FLX_DOM_ID){f=B[f.FLX_DOM_ID];g=0;for(h=f.properties.length;g<h;g++){k=f.properties[g];if(RegExp(b).test(k.property)){b=U;break a}}}b=void 0}b||M(a,this.anti.dim,x);M(d,this.anti.dim,
28
+ x)}b=a[this.anti.out];f=0;for(g=this.anti.pad.length;f<g;f++){h=this.anti.pad[f];b-=D(a,h,u)}switch(c.align){case "start":break;case "end":f=0;for(g=d.length;f<g;f++){i=d[f];e=b-i[this.anti.out];e-=D(i,this.anti.opp,u);M(i,this.anti.pos,e)}break;case "center":f=0;for(g=d.length;f<g;f++){i=d[f];e=(b-i[this.anti.out])/2;M(i,this.anti.pos,e)}break;default:f=0;for(g=d.length;f<g;f++){i=d[f];switch(i.nodeName.toLowerCase()){case "button":case "input":case "select":break;default:c=e=0;for(k=this.anti.pad.length;c<
29
+ k;c++){h=this.anti.pad[c];e+=D(i,h,u);e+=D(a,h,u)}i.style[this.anti.dim]="100%";M(i,this.anti.dim,x);e=b;e-=D(i,this.anti.pos,u);c=0;for(k=this.anti.pad.length;c<k;c++){h=this.anti.pad[c];e-=D(i,h,u)}e-=D(i,this.anti.opp,u);e=Math.max(0,e);M(i,this.anti.dim,e)}}}},boxPack:function(a,d,c){var b=0,e=0,f=0,g;g=d.length-1;var h,k,i;h=0;for(k=d.length;h<k;h++){e=d[h];b+=e[this.props.out];b+=D(e,this.props.pos,u);b+=D(e,this.props.opp,u)}e=D(d[0],this.props.pos,u);b=a[this.props.out]-b;h=0;for(k=this.props.pad.length;h<
30
+ k;h++){i=this.props.pad[h];b-=D(a,i,u)}if(b<0)b=Math.max(0,b);switch(c.pack){case "end":M(d[0],this.props.pos,f+e+b);break;case "center":if(f)f/=2;M(d[0],this.props.pos,f+e+Math.floor(b/2));break;case "justify":c=Math.floor((f+b)/g);g=c*g-b;for(h=d.length-1;h;){e=d[h];f=c;if(g){f++;g++}f=D(e,this.props.pos,u)+f;M(e,this.props.pos,f);h--}}a.style.overflow=""}},setup:function(a,d,c){var b,e;if(!(!a||!d||!c))if(Q&&Q.partialSupport){b=Z(c.children,d,x);e=Ba(a);d=Y(a,a.childNodes);this.properties.boxOrient.call(this,
31
+ a,d,c);if(!b.total||!T(c.nested).length){if(c.align==="stretch"&&!Q.boxAlignStretch&&(!e.nested||!e.flex))this.properties.boxAlign.call(this,a,d,c);c.pack==="justify"&&!Q.boxPackJustify&&!b.total&&this.properties.boxPack.call(this,a,d,c)}}else if(!Q)for(b in this.properties)if(this.properties.hasOwnProperty(b)){d=this.properties[b];d.call(this,a,Y(a,a.childNodes),c)}},trackDOM:function(a){Ra(this,a)},updateModel:function(a){var d=a.target,c=a.nodes;Aa(c);if(a.flexMatrix||a.ordinalMatrix){var b,e,
32
+ f;if(a.flexMatrix){b=0;for(e=a.children.length;b<e;b++){f=a.children[b];f.flex=a.flexMatrix[b]}}if(a.ordinalMatrix){b=0;for(e=a.children.length;b<e;b++){f=a.children[b];f["ordinal-group"]=a.ordinalMatrix[b]}}}this.setup(d,c,a);this.bubbleUp(d,a)},renderModel:function(a){var d=this,c=a.target,b=c.childNodes;if(!c.length&&!b)return false;a=Ta(a,this);d.updateModel(a);H.setTimeout(function(){d.trackDOM(a)},0);return d},bubbleUp:function(a,d){for(var c,b=d.target.parentNode;b;){if(c=B[b.FLX_DOM_ID]){Aa(c.nodes);
33
+ this.setup(c.target,c.nodes,c)}b=b.parentNode}}};J.updateInstance=function(a,d){var c,b;if(a)if(c=B[a.FLX_DOM_ID])c._instance.updateModel(c);else new J.box(d);else for(b in B)if(B.hasOwnProperty(b)){c=B[b];c._instance.updateModel(c)}};J.getInstance=function(a){return B[a.FLX_DOM_ID]};J.destroyInstance=function(a){var d,c,b,e,f;d=function(g){g.target.FLX_DOM_ID=x;g.target.style.cssText=E;c=0;for(b=g.children.length;c<b;c++){e=g.children[c];e.match.style.cssText=E}};if(a)(a=B[a.FLX_DOM_ID])&&d(a);else{for(f in B)B.hasOwnProperty(f)&&
34
+ d(B[f]);B=[]}};J.flexboxSupport=function(){var a={},d,c=R.createElement("flxbox"),b,e,f;c.style.width=c.style.height="100px";c.innerHTML='<b style="margin: 0; padding: 0; display:block; width: 10px; height:50px"></b><b style="margin: 0; padding: 0; display:block; width: 10px; height:50px"></b><b style="margin: 0; padding: 0; display:block; width: 10px; height:50px"></b>';fa(c,"display","box",x);fa(c,"box-align","stretch",u);fa(c,"box-pack","justify",u);R.body.appendChild(c);d=c.firstChild.offsetHeight;
35
+ b={boxAlignStretch:function(){return d===100},boxPackJustify:function(){var g=0,h,k;h=0;for(k=c.childNodes.length;h<k;h++)g+=c.childNodes[h].offsetLeft;return g===135}};for(f in b)if(b.hasOwnProperty(f)){e=b[f];e=e();if(!e)a.partialSupport=u;a[f]=e}R.body.removeChild(c);return~c.style.display.indexOf("box")?a:U};J.init=function(){J.flexboxSupported=Q=J.flexboxSupport();if((!Q||Q.partialSupport)&&T)Ea()};J.version="1.0.3";(function(a){if(!Ca){var d,c,b;for(c in V)if(V.hasOwnProperty(c)){b=V[c];if(H[c]&&
36
+ !d)if(d=eval(b.s.replace("*",c))){Ca=c;break}}T=d}var e,f;for(f in V)if(V.hasOwnProperty(f)){b=V[f];if(H[f]&&!e&&b.m){e=eval(b.m.replace("*",f));d=b.c?eval(b.c.replace("*",f)):H;c=[];if(e&&d){b.p&&c.push(b.p);c.push(a);e.apply(d,c);break}}}e||ia("load",a)})(J.init);return J}(this,document);
@@ -16,38 +16,48 @@ time, mark, audio, video {
16
16
  border: 0;
17
17
  font-size: 100%;
18
18
  font: inherit;
19
- vertical-align: baseline; }
19
+ vertical-align: baseline;
20
+ }
20
21
 
21
22
  body {
22
- line-height: 1; }
23
+ line-height: 1;
24
+ }
23
25
 
24
26
  ol, ul {
25
- list-style: none; }
27
+ list-style: none;
28
+ }
26
29
 
27
30
  table {
28
31
  border-collapse: collapse;
29
- border-spacing: 0; }
32
+ border-spacing: 0;
33
+ }
30
34
 
31
35
  caption, th, td {
32
36
  text-align: left;
33
37
  font-weight: normal;
34
- vertical-align: middle; }
38
+ vertical-align: middle;
39
+ }
35
40
 
36
41
  q, blockquote {
37
- quotes: none; }
38
- q:before, q:after, blockquote:before, blockquote:after {
39
- content: "";
40
- content: none; }
42
+ quotes: none;
43
+ }
44
+ q:before, q:after, blockquote:before, blockquote:after {
45
+ content: "";
46
+ content: none;
47
+ }
41
48
 
42
49
  a img {
43
- border: none; }
50
+ border: none;
51
+ }
44
52
 
45
53
  article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
46
- display: block; }
54
+ display: block;
55
+ }
47
56
 
48
57
  html, body {
49
58
  width: 100%;
50
- height: 100%; }
59
+ height: 100%;
60
+ }
51
61
 
52
62
  body {
53
63
  display: -webkit-box;
@@ -61,23 +71,30 @@ body {
61
71
  background: #eeeeee;
62
72
  color: black;
63
73
  font-size: 12px;
64
- font-family: Helvetica, sans-serif; }
65
- body body {
66
- font-size: 75%;
67
- line-height: 2em; }
68
- body html > body {
69
- font-size: 12px; }
70
- body.iframe {
71
- background: white; }
72
- body.iframe h1 {
73
- font-size: 1.3em;
74
- margin: 12px; }
75
- body.iframe p, body.iframe form {
76
- margin: 0 12px 12px 12px;
77
- line-height: 1.25; }
78
- body.iframe .loading {
79
- color: #666666;
80
- margin-left: 0.5em; }
74
+ font-family: Helvetica, sans-serif;
75
+ }
76
+ body body {
77
+ font-size: 75%;
78
+ line-height: 2em;
79
+ }
80
+ body html > body {
81
+ font-size: 12px;
82
+ }
83
+ body.iframe {
84
+ background: white;
85
+ }
86
+ body.iframe h1 {
87
+ font-size: 1.3em;
88
+ margin: 12px;
89
+ }
90
+ body.iframe p, body.iframe form {
91
+ margin: 0 12px 12px 12px;
92
+ line-height: 1.25;
93
+ }
94
+ body.iframe .loading {
95
+ color: #666666;
96
+ margin-left: 0.5em;
97
+ }
81
98
 
82
99
  .button {
83
100
  padding: 0.5em 1em;
@@ -95,103 +112,115 @@ body {
95
112
  background: linear-gradient(#f4f4f4, #ececec), #ececec;
96
113
  color: #666666;
97
114
  text-shadow: 1px 1px 0 white;
98
- text-decoration: none; }
99
- .button:hover, .button:focus {
100
- border-color: #999999;
101
- border-bottom-color: #666666;
102
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
103
- background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
104
- background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
105
- background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
106
- background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
107
- background: linear-gradient(#eeeeee, #dddddd), #dddddd;
108
- color: #333333;
109
- text-decoration: none; }
110
- .button:active, .button.active {
111
- border-color: #666666;
112
- border-bottom-color: #999999;
113
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
114
- background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
115
- background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
116
- background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
117
- background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
118
- background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
119
- color: #333333;
120
- text-decoration: none;
121
- text-shadow: -1px -1px 0 #eeeeee; }
115
+ text-decoration: none;
116
+ }
117
+ .button:hover, .button:focus {
118
+ border-color: #999999;
119
+ border-bottom-color: #666666;
120
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
121
+ background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
122
+ background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
123
+ background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
124
+ background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
125
+ background: linear-gradient(#eeeeee, #dddddd), #dddddd;
126
+ color: #333333;
127
+ text-decoration: none;
128
+ }
129
+ .button:active, .button.active {
130
+ border-color: #666666;
131
+ border-bottom-color: #999999;
132
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
133
+ background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
134
+ background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
135
+ background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
136
+ background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
137
+ background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
138
+ color: #333333;
139
+ text-decoration: none;
140
+ text-shadow: -1px -1px 0 #eeeeee;
141
+ }
122
142
 
123
143
  body > header {
124
144
  overflow: hidden;
125
145
  *zoom: 1;
126
- border-bottom: 1px solid #cccccc; }
127
- body > header h1 {
128
- float: left;
129
- margin-left: 6px;
130
- padding: 6px;
131
- padding-left: 30px;
132
- background: url(/images/logo.png) left no-repeat;
133
- font-size: 18px;
134
- font-weight: bold; }
135
- body > header h1 a {
136
- color: black;
137
- text-decoration: none;
138
- text-shadow: 0 1px 0 white;
139
- -webkit-transition: 0.1s ease;
140
- -moz-transition: 0.1s ease;
141
- -o-transition: 0.1s ease;
142
- transition: 0.1s ease; }
143
- body > header h1 a:hover {
144
- color: #4183c4; }
145
- body > header nav {
146
- border-left: 1px solid #cccccc; }
147
- body > header nav.project {
148
- float: left; }
149
- body > header nav.app {
150
- float: right; }
151
- body > header nav li {
152
- display: inline; }
153
- body > header nav li a {
154
- display: -moz-inline-box;
155
- -moz-box-orient: vertical;
156
- display: inline-block;
157
- vertical-align: middle;
158
- *vertical-align: auto;
159
- float: left;
160
- padding: 9px;
161
- border-left: 1px solid white;
162
- border-right: 1px solid #cccccc;
163
- text-decoration: none;
164
- text-shadow: 0 1px 0 white;
165
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
166
- background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
167
- background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
168
- background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
169
- background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
170
- background: linear-gradient(#f4f4f4, #ececec), #ececec;
171
- color: #666666;
172
- text-shadow: 1px 1px 0 white;
173
- text-decoration: none; }
174
- body > header nav li a {
175
- *display: inline; }
176
- body > header nav li a:hover, body > header nav li a:focus {
177
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
178
- background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
179
- background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
180
- background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
181
- background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
182
- background: linear-gradient(#eeeeee, #dddddd), #dddddd;
183
- color: #333333;
184
- text-decoration: none; }
185
- body > header nav li a:active, body > header nav li a.active {
186
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
187
- background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
188
- background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
189
- background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
190
- background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
191
- background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
192
- color: #333333;
193
- text-decoration: none;
194
- text-shadow: -1px -1px 0 #eeeeee; }
146
+ border-bottom: 1px solid #cccccc;
147
+ }
148
+ body > header h1 {
149
+ float: left;
150
+ margin-left: 6px;
151
+ padding: 6px;
152
+ padding-left: 30px;
153
+ background: url(/images/logo.png) left no-repeat;
154
+ font-size: 18px;
155
+ font-weight: bold;
156
+ }
157
+ body > header h1 a {
158
+ color: black;
159
+ text-decoration: none;
160
+ text-shadow: 0 1px 0 white;
161
+ -webkit-transition: 0.1s ease;
162
+ -moz-transition: 0.1s ease;
163
+ -ms-transition: 0.1s ease;
164
+ -o-transition: 0.1s ease;
165
+ transition: 0.1s ease;
166
+ }
167
+ body > header h1 a:hover {
168
+ color: #4183c4;
169
+ }
170
+ body > header nav {
171
+ border-left: 1px solid #cccccc;
172
+ }
173
+ body > header nav.project {
174
+ float: left;
175
+ }
176
+ body > header nav.app {
177
+ float: right;
178
+ }
179
+ body > header nav li {
180
+ display: block;
181
+ float: left;
182
+ border-left: 1px solid white;
183
+ border-right: 1px solid #cccccc;
184
+ }
185
+ body > header nav li input {
186
+ margin: 6px;
187
+ }
188
+ body > header nav li a {
189
+ display: block;
190
+ padding: 10px;
191
+ text-decoration: none;
192
+ text-shadow: 0 1px 0 white;
193
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
194
+ background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
195
+ background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
196
+ background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
197
+ background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
198
+ background: linear-gradient(#f4f4f4, #ececec), #ececec;
199
+ color: #666666;
200
+ text-shadow: 1px 1px 0 white;
201
+ text-decoration: none;
202
+ }
203
+ body > header nav li a:hover, body > header nav li a:focus {
204
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
205
+ background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
206
+ background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
207
+ background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
208
+ background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
209
+ background: linear-gradient(#eeeeee, #dddddd), #dddddd;
210
+ color: #333333;
211
+ text-decoration: none;
212
+ }
213
+ body > header nav li a:active, body > header nav li a.active {
214
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
215
+ background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
216
+ background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
217
+ background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
218
+ background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
219
+ background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
220
+ color: #333333;
221
+ text-decoration: none;
222
+ text-shadow: -1px -1px 0 #eeeeee;
223
+ }
195
224
 
196
225
  #messages {
197
226
  width: 100%;
@@ -199,45 +228,58 @@ body > header {
199
228
  min-height: 3em;
200
229
  overflow: auto;
201
230
  background: white;
202
- border-top: 1px solid white; }
203
- #messages table {
204
- overflow: hidden;
205
- *zoom: 1;
206
- width: 100%; }
207
- #messages table thead tr {
208
- background: #eeeeee;
209
- color: #333333; }
210
- #messages table thead tr th {
211
- padding: 0.25em;
212
- font-weight: bold;
213
- color: #666666;
214
- text-shadow: 0 1px 0 white; }
215
- #messages table tbody tr {
216
- cursor: pointer;
217
- -webkit-transition: 0.1s ease;
218
- -moz-transition: 0.1s ease;
219
- -o-transition: 0.1s ease;
220
- transition: 0.1s ease;
221
- color: #333333; }
222
- #messages table tbody tr:hover {
223
- color: black; }
224
- #messages table tbody tr:nth-child(even) {
225
- background: #f0f0f0; }
226
- #messages table tbody tr.selected {
227
- background: Highlight;
228
- color: HighlightText; }
229
- #messages table tbody tr td {
230
- padding: 0.25em; }
231
- #messages table tbody tr td.blank {
232
- color: #666666;
233
- font-style: italic; }
231
+ border-top: 1px solid white;
232
+ }
233
+ #messages table {
234
+ overflow: hidden;
235
+ *zoom: 1;
236
+ width: 100%;
237
+ }
238
+ #messages table thead tr {
239
+ background: #eeeeee;
240
+ color: #333333;
241
+ }
242
+ #messages table thead tr th {
243
+ padding: 0.25em;
244
+ font-weight: bold;
245
+ color: #666666;
246
+ text-shadow: 0 1px 0 white;
247
+ }
248
+ #messages table tbody tr {
249
+ cursor: pointer;
250
+ -webkit-transition: 0.1s ease;
251
+ -moz-transition: 0.1s ease;
252
+ -ms-transition: 0.1s ease;
253
+ -o-transition: 0.1s ease;
254
+ transition: 0.1s ease;
255
+ color: #333333;
256
+ }
257
+ #messages table tbody tr:hover {
258
+ color: black;
259
+ }
260
+ #messages table tbody tr:nth-child(even) {
261
+ background: #f0f0f0;
262
+ }
263
+ #messages table tbody tr.selected {
264
+ background: Highlight;
265
+ color: HighlightText;
266
+ }
267
+ #messages table tbody tr td {
268
+ padding: 0.25em;
269
+ }
270
+ #messages table tbody tr td.blank {
271
+ color: #666666;
272
+ font-style: italic;
273
+ }
234
274
 
235
275
  #resizer {
236
276
  padding-bottom: 5px;
237
- cursor: ns-resize; }
238
- #resizer .ruler {
239
- border-top: 1px solid #cccccc;
240
- border-bottom: 1px solid white; }
277
+ cursor: ns-resize;
278
+ }
279
+ #resizer .ruler {
280
+ border-top: 1px solid #cccccc;
281
+ border-bottom: 1px solid white;
282
+ }
241
283
 
242
284
  #message {
243
285
  display: -webkit-box;
@@ -251,122 +293,152 @@ body > header {
251
293
  -webkit-box-flex: 1;
252
294
  -moz-box-flex: 1;
253
295
  -ms-box-flex: 1;
254
- box-flex: 1; }
255
- #message > header {
256
- overflow: hidden;
257
- *zoom: 1; }
258
- #message > header .metadata {
259
- overflow: hidden;
260
- *zoom: 1;
261
- padding: 0.5em;
262
- padding-top: 0; }
263
- #message > header .metadata dt, #message > header .metadata dd {
264
- padding: 0.25em; }
265
- #message > header .metadata dt {
266
- float: left;
267
- clear: left;
268
- width: 8em;
269
- margin-right: 0.5em;
270
- text-align: right;
271
- font-weight: bold;
272
- color: #666666;
273
- text-shadow: 0 1px 0 white; }
274
- #message > header .metadata dd.subject {
275
- font-weight: bold; }
276
- #message > header .metadata .attachments {
277
- display: none; }
278
- #message > header .metadata .attachments ul {
279
- display: inline; }
280
- #message > header .metadata .attachments ul li {
281
- display: -moz-inline-box;
282
- -moz-box-orient: vertical;
283
- display: inline-block;
284
- vertical-align: middle;
285
- *vertical-align: auto;
286
- margin-right: 0.5em; }
287
- #message > header .metadata .attachments ul li {
288
- *display: inline; }
289
- #message > header .views ul {
290
- padding: 0 0.5em;
291
- border-bottom: 1px solid #cccccc; }
292
- #message > header .views .tab {
293
- display: -moz-inline-box;
294
- -moz-box-orient: vertical;
295
- display: inline-block;
296
- vertical-align: middle;
297
- *vertical-align: auto; }
298
- #message > header .views .tab {
299
- *display: inline; }
300
- #message > header .views .tab a {
301
- display: -moz-inline-box;
302
- -moz-box-orient: vertical;
303
- display: inline-block;
304
- vertical-align: middle;
305
- *vertical-align: auto;
306
- padding: 0.5em;
307
- border: 1px solid #cccccc;
308
- background: #dddddd;
309
- color: #333333;
310
- border-width: 1px 1px 0 1px;
311
- cursor: pointer;
312
- text-shadow: 0 1px 0 #eeeeee;
313
- text-decoration: none; }
314
- #message > header .views .tab a {
315
- *display: inline; }
316
- #message > header .views .tab:not(.selected):hover a {
317
- background-color: #eeeeee; }
318
- #message > header .views .tab.selected a {
319
- background: white;
320
- color: black;
321
- height: 13px;
322
- -webkit-box-shadow: 1px 1px 0 #cccccc;
323
- -moz-box-shadow: 1px 1px 0 #cccccc;
324
- -o-box-shadow: 1px 1px 0 #cccccc;
325
- box-shadow: 1px 1px 0 #cccccc;
326
- margin-bottom: -2px;
327
- cursor: default; }
328
- #message > header .views .action {
329
- display: -moz-inline-box;
330
- -moz-box-orient: vertical;
331
- display: inline-block;
332
- vertical-align: middle;
333
- *vertical-align: auto;
334
- float: right;
335
- margin: 0 0.25em; }
336
- #message > header .views .action {
337
- *display: inline; }
296
+ box-flex: 1;
297
+ }
298
+ #message > header {
299
+ overflow: hidden;
300
+ *zoom: 1;
301
+ }
302
+ #message > header .metadata {
303
+ overflow: hidden;
304
+ *zoom: 1;
305
+ padding: 0.5em;
306
+ padding-top: 0;
307
+ }
308
+ #message > header .metadata dt, #message > header .metadata dd {
309
+ padding: 0.25em;
310
+ }
311
+ #message > header .metadata dt {
312
+ float: left;
313
+ clear: left;
314
+ width: 8em;
315
+ margin-right: 0.5em;
316
+ text-align: right;
317
+ font-weight: bold;
318
+ color: #666666;
319
+ text-shadow: 0 1px 0 white;
320
+ }
321
+ #message > header .metadata dd.subject {
322
+ font-weight: bold;
323
+ }
324
+ #message > header .metadata .attachments {
325
+ display: none;
326
+ }
327
+ #message > header .metadata .attachments ul {
328
+ display: inline;
329
+ }
330
+ #message > header .metadata .attachments ul li {
331
+ display: -moz-inline-box;
332
+ -moz-box-orient: vertical;
333
+ display: inline-block;
334
+ vertical-align: middle;
335
+ *vertical-align: auto;
336
+ margin-right: 0.5em;
337
+ }
338
+ #message > header .metadata .attachments ul li {
339
+ *display: inline;
340
+ }
341
+ #message > header .views ul {
342
+ padding: 0 0.5em;
343
+ border-bottom: 1px solid #cccccc;
344
+ }
345
+ #message > header .views .tab {
346
+ display: -moz-inline-box;
347
+ -moz-box-orient: vertical;
348
+ display: inline-block;
349
+ vertical-align: middle;
350
+ *vertical-align: auto;
351
+ }
352
+ #message > header .views .tab {
353
+ *display: inline;
354
+ }
355
+ #message > header .views .tab a {
356
+ display: -moz-inline-box;
357
+ -moz-box-orient: vertical;
358
+ display: inline-block;
359
+ vertical-align: middle;
360
+ *vertical-align: auto;
361
+ padding: 0.5em;
362
+ border: 1px solid #cccccc;
363
+ background: #dddddd;
364
+ color: #333333;
365
+ border-width: 1px 1px 0 1px;
366
+ cursor: pointer;
367
+ text-shadow: 0 1px 0 #eeeeee;
368
+ text-decoration: none;
369
+ }
370
+ #message > header .views .tab a {
371
+ *display: inline;
372
+ }
373
+ #message > header .views .tab:not(.selected):hover a {
374
+ background-color: #eeeeee;
375
+ }
376
+ #message > header .views .tab.selected a {
377
+ background: white;
378
+ color: black;
379
+ height: 13px;
380
+ -webkit-box-shadow: 1px 1px 0 #cccccc;
381
+ -moz-box-shadow: 1px 1px 0 #cccccc;
382
+ box-shadow: 1px 1px 0 #cccccc;
383
+ margin-bottom: -2px;
384
+ cursor: default;
385
+ }
386
+ #message > header .views .action {
387
+ display: -moz-inline-box;
388
+ -moz-box-orient: vertical;
389
+ display: inline-block;
390
+ vertical-align: middle;
391
+ *vertical-align: auto;
392
+ float: right;
393
+ margin: 0 0.25em;
394
+ }
395
+ #message > header .views .action {
396
+ *display: inline;
397
+ }
338
398
 
339
399
  .fractal-analysis {
340
- margin: 12px 0; }
341
- .fractal-analysis .report-intro {
342
- font-weight: bold; }
343
- .fractal-analysis .report-intro.valid {
344
- color: #009900; }
345
- .fractal-analysis .report-intro.invalid {
346
- color: #cc3333; }
347
- .fractal-analysis code {
348
- font-family: Monaco, "Courier New", Courier, monospace;
349
- background-color: #f8f8ff;
350
- color: #444444;
351
- padding: 0 0.2em;
352
- border: 1px solid #dedede; }
353
- .fractal-analysis ul {
354
- margin: 1em 0 1em 1em;
355
- list-style-type: square; }
356
- .fractal-analysis ol {
357
- margin: 1em 0 1em 2em;
358
- list-style-type: decimal; }
359
- .fractal-analysis ul li, .fractal-analysis ol li {
360
- display: list-item;
361
- margin: 0.5em 0 0.5em 1em; }
362
- .fractal-analysis .error-intro strong {
363
- font-weight: bold; }
364
- .fractal-analysis .unsupported-clients dt {
365
- padding-left: 1em; }
366
- .fractal-analysis .unsupported-clients dd {
367
- padding-left: 2em; }
368
- .fractal-analysis .unsupported-clients dd ul li {
369
- display: list-item; }
400
+ margin: 12px 0;
401
+ }
402
+ .fractal-analysis .report-intro {
403
+ font-weight: bold;
404
+ }
405
+ .fractal-analysis .report-intro.valid {
406
+ color: #009900;
407
+ }
408
+ .fractal-analysis .report-intro.invalid {
409
+ color: #cc3333;
410
+ }
411
+ .fractal-analysis code {
412
+ font-family: Monaco, "Courier New", Courier, monospace;
413
+ background-color: #f8f8ff;
414
+ color: #444444;
415
+ padding: 0 0.2em;
416
+ border: 1px solid #dedede;
417
+ }
418
+ .fractal-analysis ul {
419
+ margin: 1em 0 1em 1em;
420
+ list-style-type: square;
421
+ }
422
+ .fractal-analysis ol {
423
+ margin: 1em 0 1em 2em;
424
+ list-style-type: decimal;
425
+ }
426
+ .fractal-analysis ul li, .fractal-analysis ol li {
427
+ display: list-item;
428
+ margin: 0.5em 0 0.5em 1em;
429
+ }
430
+ .fractal-analysis .error-intro strong {
431
+ font-weight: bold;
432
+ }
433
+ .fractal-analysis .unsupported-clients dt {
434
+ padding-left: 1em;
435
+ }
436
+ .fractal-analysis .unsupported-clients dd {
437
+ padding-left: 2em;
438
+ }
439
+ .fractal-analysis .unsupported-clients dd ul li {
440
+ display: list-item;
441
+ }
370
442
 
371
443
  iframe {
372
444
  display: -webkit-box;
@@ -377,4 +449,5 @@ iframe {
377
449
  -moz-box-flex: 1;
378
450
  -ms-box-flex: 1;
379
451
  box-flex: 1;
380
- background: white; }
452
+ background: white;
453
+ }
@@ -7,6 +7,7 @@
7
7
  %script{:src => "/javascripts/jquery.js"}
8
8
  %script{:src => "/javascripts/xslt-3.2.js"}
9
9
  %script{:src => "/javascripts/date.js"}
10
+ %script{:src => "/javascripts/flexie.min.js"}
10
11
  %script{:src => "/javascripts/application.js"}
11
12
  %body
12
13
  %header
@@ -14,6 +15,8 @@
14
15
  %a{:href => "http://mailcatcher.me", :target => '_blank'} MailCatcher
15
16
  %nav.app
16
17
  %ul
18
+ %li.search
19
+ %input{:type => 'search', :name => 'search', :placeholder => 'Search messages...', :incremental => true}
17
20
  %li.clear
18
21
  %a{:href => '#', :title => 'Clear all messages'} Clear
19
22
  %li.quit
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailcatcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.5.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-22 00:00:00.000000000 Z
12
+ date: 2012-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70278781254840 !ruby/object:Gem::Requirement
16
+ requirement: &70178931095400 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70278781254840
24
+ version_requirements: *70178931095400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &70278781220820 !ruby/object:Gem::Requirement
27
+ requirement: &70178931094740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.12'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70278781220820
35
+ version_requirements: *70178931094740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: haml
38
- requirement: &70278781233560 !ruby/object:Gem::Requirement
38
+ requirement: &70178931093560 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.1'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70278781233560
46
+ version_requirements: *70178931093560
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mail
49
- requirement: &70278781232620 !ruby/object:Gem::Requirement
49
+ requirement: &70178931092220 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '2.3'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70278781232620
57
+ version_requirements: *70178931092220
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sinatra
60
- requirement: &70278781232020 !ruby/object:Gem::Requirement
60
+ requirement: &70178931091100 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '1.2'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70278781232020
68
+ version_requirements: *70178931091100
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: skinny
71
- requirement: &70278781230360 !ruby/object:Gem::Requirement
71
+ requirement: &70178931089960 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0.2'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70278781230360
79
+ version_requirements: *70178931089960
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sqlite3
82
- requirement: &70278781229540 !ruby/object:Gem::Requirement
82
+ requirement: &70178931089260 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '1.3'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70278781229540
90
+ version_requirements: *70178931089260
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: thin
93
- requirement: &70278781227040 !ruby/object:Gem::Requirement
93
+ requirement: &70178931088420 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '1.2'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70278781227040
101
+ version_requirements: *70178931088420
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: coffee-script
104
- requirement: &70278781021100 !ruby/object:Gem::Requirement
104
+ requirement: &70178931087740 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '2.2'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70278781021100
112
+ version_requirements: *70178931087740
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: compass
115
- requirement: &70278781019120 !ruby/object:Gem::Requirement
115
+ requirement: &70178931087000 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 0.11.1
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70278781019120
123
+ version_requirements: *70178931087000
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rake
126
- requirement: &70278781050380 !ruby/object:Gem::Requirement
126
+ requirement: &70178931086540 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70278781050380
134
+ version_requirements: *70178931086540
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rdoc
137
- requirement: &70278781272240 !ruby/object:Gem::Requirement
137
+ requirement: &70178931085980 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70278781272240
145
+ version_requirements: *70178931085980
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: sass
148
- requirement: &70278781284060 !ruby/object:Gem::Requirement
148
+ requirement: &70178931085200 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ~>
@@ -153,7 +153,7 @@ dependencies:
153
153
  version: '3.1'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *70278781284060
156
+ version_requirements: *70178931085200
157
157
  description: ! " MailCatcher runs a super simple SMTP server which catches any\n
158
158
  \ message sent to it to display in a web interface. Run\n mailcatcher, set
159
159
  your favourite app to deliver to\n smtp://127.0.0.1:1025 instead of your default
@@ -182,6 +182,7 @@ files:
182
182
  - public/images/logo_large.png
183
183
  - public/javascripts/application.js
184
184
  - public/javascripts/date.js
185
+ - public/javascripts/flexie.min.js
185
186
  - public/javascripts/jquery.js
186
187
  - public/javascripts/modernizr.js
187
188
  - public/javascripts/xslt-3.2.js
@@ -213,3 +214,4 @@ signing_key:
213
214
  specification_version: 3
214
215
  summary: Runs an SMTP server, catches and displays email in a web interface.
215
216
  test_files: []
217
+ has_rdoc: