mailcatcher 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.4
1
+ 0.5.5
@@ -1,20 +1,22 @@
1
1
  (function() {
2
2
  var MailCatcher;
3
- var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
3
+
4
4
  MailCatcher = (function() {
5
+
5
6
  function MailCatcher() {
6
- $('#messages tr').live('click', __bind(function(e) {
7
+ var _this = this;
8
+ $('#messages tr').live('click', function(e) {
7
9
  e.preventDefault();
8
- return this.loadMessage($(e.currentTarget).attr('data-message-id'));
9
- }, this));
10
- $('#message .views .format.tab a').live('click', __bind(function(e) {
10
+ return _this.loadMessage($(e.currentTarget).attr('data-message-id'));
11
+ });
12
+ $('#message .views .format.tab a').live('click', function(e) {
11
13
  e.preventDefault();
12
- return this.loadMessageBody(this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format'));
13
- }, this));
14
- $('#message .views .analysis.tab a').live('click', __bind(function(e) {
14
+ return _this.loadMessageBody(_this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format'));
15
+ });
16
+ $('#message .views .analysis.tab a').live('click', function(e) {
15
17
  e.preventDefault();
16
- return this.loadMessageAnalysis(this.selectedMessage());
17
- }, this));
18
+ return _this.loadMessageAnalysis(_this.selectedMessage());
19
+ });
18
20
  $('#resizer').live({
19
21
  mousedown: function(e) {
20
22
  var events;
@@ -33,7 +35,7 @@
33
35
  });
34
36
  }
35
37
  });
36
- $('nav.app .clear a').live('click', __bind(function(e) {
38
+ $('nav.app .clear a').live('click', function(e) {
37
39
  e.preventDefault();
38
40
  if (confirm("You will lose all your received messages.\n\nAre you sure you want to clear all messages?")) {
39
41
  return $.ajax({
@@ -49,8 +51,8 @@
49
51
  }
50
52
  });
51
53
  }
52
- }, this));
53
- $('nav.app .quit a').live('click', __bind(function(e) {
54
+ });
55
+ $('nav.app .quit a').live('click', function(e) {
54
56
  e.preventDefault();
55
57
  if (confirm("You will lose all your received messages.\n\nAre you sure you want to quit?")) {
56
58
  return $.ajax({
@@ -63,46 +65,48 @@
63
65
  }
64
66
  });
65
67
  }
66
- }, this));
68
+ });
67
69
  this.refresh();
68
70
  this.subscribe();
69
71
  }
72
+
70
73
  MailCatcher.prototype.parseDateRegexp = /^(\d{4})[-\/\\](\d{2})[-\/\\](\d{2})(?:\s+|T)(\d{2})[:-](\d{2})[:-](\d{2})(?:([ +-]\d{2}:\d{2}|\s*\S+|Z?))?$/;
74
+
71
75
  MailCatcher.prototype.parseDate = function(date) {
72
76
  var match;
73
77
  if (match = this.parseDateRegexp.exec(date)) {
74
78
  return new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6], 0);
75
79
  }
76
80
  };
81
+
77
82
  MailCatcher.prototype.formatDate = function(date) {
78
- if (typeof date === "string") {
79
- date && (date = this.parseDate(date));
80
- }
83
+ if (typeof date === "string") date && (date = this.parseDate(date));
81
84
  return date && (date = date.toString("dddd, d MMM yyyy h:mm:ss tt"));
82
85
  };
86
+
83
87
  MailCatcher.prototype.haveMessage = function(message) {
84
- if (message.id != null) {
85
- message = message.id;
86
- }
88
+ if (message.id != null) message = message.id;
87
89
  return $("#messages tbody tr[data-message-id=\"" + message + "\"]").length > 0;
88
90
  };
91
+
89
92
  MailCatcher.prototype.selectedMessage = function() {
90
93
  return $('#messages tr.selected').data('message-id');
91
94
  };
95
+
92
96
  MailCatcher.prototype.addMessage = function(message) {
93
97
  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))));
94
98
  };
99
+
95
100
  MailCatcher.prototype.loadMessage = function(id) {
96
- if ((id != null ? id.id : void 0) != null) {
97
- id = id.id;
98
- }
101
+ var _this = this;
102
+ if ((id != null ? id.id : void 0) != null) id = id.id;
99
103
  id || (id = $('#messages tr.selected').attr('data-message-id'));
100
104
  if (id != null) {
101
105
  $('#messages tbody tr:not([data-message-id="' + id + '"])').removeClass('selected');
102
106
  $('#messages tbody tr[data-message-id="' + id + '"]').addClass('selected');
103
- return $.getJSON('/messages/' + id + '.json', __bind(function(message) {
107
+ return $.getJSON('/messages/' + id + '.json', function(message) {
104
108
  var $ul;
105
- $('#message .metadata dd.created_at').text(this.formatDate(message.created_at));
109
+ $('#message .metadata dd.created_at').text(_this.formatDate(message.created_at));
106
110
  $('#message .metadata dd.from').text(message.sender);
107
111
  $('#message .metadata dd.to').text((message.recipients || []).join(', '));
108
112
  $('#message .metadata dd.subject').text(message.subject);
@@ -132,13 +136,14 @@
132
136
  }
133
137
  $('#message .views .download a').attr('href', "/messages/" + id + ".eml");
134
138
  if ($('#message .views .tab.analysis.selected').length) {
135
- return this.loadMessageAnalysis();
139
+ return _this.loadMessageAnalysis();
136
140
  } else {
137
- return this.loadMessageBody();
141
+ return _this.loadMessageBody();
138
142
  }
139
- }, this));
143
+ });
140
144
  }
141
145
  };
146
+
142
147
  MailCatcher.prototype.loadMessageBody = function(id, format) {
143
148
  id || (id = this.selectedMessage());
144
149
  format || (format = $('#message .views .tab.format.selected').attr('data-message-format'));
@@ -149,36 +154,31 @@
149
154
  return $('#message iframe').attr("src", "/messages/" + id + "." + format);
150
155
  }
151
156
  };
157
+
152
158
  MailCatcher.prototype.loadMessageAnalysis = function(id) {
153
159
  var $form, $iframe;
154
160
  id || (id = this.selectedMessage());
155
161
  $("#message .views .analysis.tab:not(.selected)").addClass('selected');
156
162
  $("#message .views :not(.analysis).tab.selected").removeClass('selected');
157
163
  if (id != null) {
158
- $iframe = $('#message iframe').contents().children().html("<html>\n<head>\n<title>Analysis</title>\n" + ($('link[rel="stylesheet"]')[0].outerHTML) + "\n</head>\n<body class=\"iframe\">\n<h1>Analyse your email with Fractal</h1>\n<p><a href=\"http://getfractal.com/\" target=\"_blank\">Fractal</a> is a really neat service that applies common email design and development knowledge from <a href=\"http://www.email-standards.org/\" target=\"_blank\">Email Standards Project</a> to your HTML email and tells you what you've done wrong or what you should do instead.</p>\n<p>Please note that this <strong>sends your email to the Fractal service</strong> for analysis. Read their <a href=\"http://getfractal.com/terms\" target=\"_blank\">terms of service</a> if you're paranoid.</p>\n<p>(This output is still just raw XML. Someone keen to transform this into something prettier would be greatly appreciated!)</p>\n<form>\n<input type=\"submit\" value=\"Analyse\" /><span class=\"loading\" style=\"color: #999; display: none\">Analysing&hellip;</span>\n</form>\n</body>\n</html>");
164
+ $iframe = $('#message iframe').contents().children().html("<html>\n<head>\n<title>Analysis</title>\n" + ($('link[rel="stylesheet"]')[0].outerHTML) + "\n</head>\n<body class=\"iframe\">\n<h1>Analyse your email with Fractal</h1>\n<p><a href=\"http://getfractal.com/\" target=\"_blank\">Fractal</a> is a really neat service that applies common email design and development knowledge from <a href=\"http://www.email-standards.org/\" target=\"_blank\">Email Standards Project</a> to your HTML email and tells you what you've done wrong or what you should do instead.</p>\n<p>Please note that this <strong>sends your email to the Fractal service</strong> for analysis. Read their <a href=\"http://getfractal.com/terms\" target=\"_blank\">terms of service</a> if you're paranoid.</p>\n<form>\n<input type=\"submit\" value=\"Analyse\" /><span class=\"loading\" style=\"color: #999; display: none\">Analysing&hellip;</span>\n</form>\n</body>\n</html>");
159
165
  return $form = $iframe.find('form').submit(function(e) {
160
166
  e.preventDefault();
161
167
  $(this).find('input[type="submit"]').attr('disabled', 'disabled').end().find('.loading').show();
162
- return $.ajax({
163
- url: "/messages/" + id + "/analysis.xml",
164
- dataType: "text",
165
- success: function(data) {
166
- $form.replaceWith('<h2>Results</h2><pre id="result"></pre>');
167
- return $iframe.find("#result").text(data);
168
- }
169
- });
168
+ return $('#message iframe').contents().find('body').xslt("/messages/" + id + "/analysis.xml", "/stylesheets/analysis.xsl");
170
169
  });
171
170
  }
172
171
  };
172
+
173
173
  MailCatcher.prototype.refresh = function() {
174
- return $.getJSON('/messages', __bind(function(messages) {
175
- return $.each(messages, __bind(function(i, message) {
176
- if (!this.haveMessage(message)) {
177
- return this.addMessage(message);
178
- }
179
- }, this));
180
- }, this));
174
+ var _this = this;
175
+ return $.getJSON('/messages', function(messages) {
176
+ return $.each(messages, function(i, message) {
177
+ if (!_this.haveMessage(message)) return _this.addMessage(message);
178
+ });
179
+ });
181
180
  };
181
+
182
182
  MailCatcher.prototype.subscribe = function() {
183
183
  if (typeof WebSocket !== "undefined" && WebSocket !== null) {
184
184
  return this.subscribeWebSocket();
@@ -186,24 +186,32 @@
186
186
  return this.subscribePoll();
187
187
  }
188
188
  };
189
+
189
190
  MailCatcher.prototype.subscribeWebSocket = function() {
190
191
  var secure;
192
+ var _this = this;
191
193
  secure = window.location.scheme === 'https';
192
194
  this.websocket = new WebSocket("" + (secure ? 'wss' : 'ws') + "://" + window.location.host + "/messages");
193
- return this.websocket.onmessage = __bind(function(event) {
194
- return this.addMessage($.parseJSON(event.data));
195
- }, this);
195
+ return this.websocket.onmessage = function(event) {
196
+ return _this.addMessage($.parseJSON(event.data));
197
+ };
196
198
  };
199
+
197
200
  MailCatcher.prototype.subscribePoll = function() {
201
+ var _this = this;
198
202
  if (this.refreshInterval == null) {
199
- return this.refreshInterval = setInterval((__bind(function() {
200
- return this.refresh();
201
- }, this)), 1000);
203
+ return this.refreshInterval = setInterval((function() {
204
+ return _this.refresh();
205
+ }), 1000);
202
206
  }
203
207
  };
208
+
204
209
  return MailCatcher;
210
+
205
211
  })();
212
+
206
213
  $(function() {
207
214
  return window.MailCatcher = new MailCatcher;
208
215
  });
216
+
209
217
  }).call(this);
@@ -0,0 +1 @@
1
+ eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2(C){C.l.h=2(){k 7};0 D=/^\\s*</;1(a.11){C.l.h=2(F,G){0 H=C(7);0 J=2(){0 K="V";1(I.5==K&&E.5==K){b.W(2(){H.z(I.P(E.Q))},R)}};0 I=a.r("6");I.d=J;I[D.f(F)?"n":"o"]=F;0 E=a.r("6");E.d=J;E[D.f(G)?"n":"o"]=G;C("T").g(I).g(E);k 7}}8{1(b.m!=e&&b.U!=e&&b.i!=e){0 B=9 i();0 A=t;1(C.v(B.j)){A=b.M!=e}8{A=q}1(A){C.l.h=2(G,H){0 I=C(7);0 F=t;0 J={5:4};0 E={5:4};0 K=2(){1(J.5==4&&E.5==4&&!F){0 L=9 i();1(C.v(L.j)){c=a.X.Y("","",y);L.j(J.3,E.3,c,y);I.z(9 M().Z(c))}8{L.10(E.3);c=L.O(J.3,a);I.S().g(c)}F=q}};1(D.f(G)){J.3=9 m().x(G,"p/6")}8{J=C.u({w:"6",N:G});J.d=K}1(D.f(H)){E.3=9 m().x(H,"p/6");K()}8{E=C.u({w:"6",N:H});E.d=K}k 7}}}}})(12);',62,65,'var|if|function|responseXML||readyState|xml|this|else|new|document|window|resultDoc|onreadystatechange|undefined|test|append|xslt|XSLTProcessor|transformDocument|return|fn|DOMParser|innerHTML|src|text|true|createElement||false|ajax|isFunction|dataType|parseFromString|null|html|||||||||||||XMLSerializer|url|transformToFragment|transformNode|XMLDocument|50|empty|body|XMLHttpRequest|complete|setTimeout|implementation|createDocument|serializeToString|importStylesheet|recalc|jQuery'.split('|'),0,{}))
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3
+ <xsl:template match="/xml">
4
+ <section class="fractal-analysis">
5
+ <h1>Fractal Results</h1>
6
+ <xsl:choose>
7
+ <xsl:when test="not(result/errors/node())">
8
+ <p class="report-intro valid">Your HTML and CSS for your email is valid.</p>
9
+ </xsl:when>
10
+ <xsl:otherwise>
11
+ <p class="report-intro invalid">Your HTML and CSS for your email contains potential errors:</p>
12
+ <ol>
13
+ <xsl:for-each select="result/errors/error">
14
+ <li>
15
+ <p class="error-intro">The <code><xsl:value-of select="rule/rule_name" /></code> near <code><xsl:value-of select="snippet" /></code> on line <code><xsl:value-of select="error_line" /></code> of your code.</p>
16
+ <dl class="unsupported-clients">
17
+ <dt>This is unsupported in:</dt>
18
+ <dd>
19
+ <ul>
20
+ <xsl:for-each select="rule/email_client//item">
21
+ <li><xsl:value-of select="." /></li>
22
+ </xsl:for-each>
23
+ </ul>
24
+ </dd>
25
+ </dl>
26
+ </li>
27
+ </xsl:for-each>
28
+ </ol>
29
+ </xsl:otherwise>
30
+ </xsl:choose>
31
+ </section>
32
+ </xsl:template>
33
+ </xsl:stylesheet>
@@ -42,8 +42,7 @@ q, blockquote {
42
42
  a img {
43
43
  border: none; }
44
44
 
45
- article, aside, details, figcaption, figure,
46
- footer, header, hgroup, menu, nav, section {
45
+ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
47
46
  display: block; }
48
47
 
49
48
  html, body {
@@ -51,11 +50,13 @@ html, body {
51
50
  height: 100%; }
52
51
 
53
52
  body {
54
- display: -moz-box;
55
53
  display: -webkit-box;
54
+ display: -moz-box;
55
+ display: -ms-box;
56
56
  display: box;
57
- -moz-box-orient: vertical;
58
57
  -webkit-box-orient: vertical;
58
+ -moz-box-orient: vertical;
59
+ -ms-box-orient: vertical;
59
60
  box-orient: vertical;
60
61
  background: #eeeeee;
61
62
  color: black;
@@ -81,16 +82,16 @@ body {
81
82
  .button {
82
83
  padding: 0.5em 1em;
83
84
  border: 1px solid #cccccc;
84
- -moz-border-radius: 2px;
85
85
  -webkit-border-radius: 2px;
86
- -o-border-radius: 2px;
86
+ -moz-border-radius: 2px;
87
87
  -ms-border-radius: 2px;
88
- -khtml-border-radius: 2px;
88
+ -o-border-radius: 2px;
89
89
  border-radius: 2px;
90
90
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
91
91
  background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
92
92
  background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
93
93
  background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
94
+ background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
94
95
  background: linear-gradient(#f4f4f4, #ececec), #ececec;
95
96
  color: #666666;
96
97
  text-shadow: 1px 1px 0 white;
@@ -102,6 +103,7 @@ body {
102
103
  background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
103
104
  background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
104
105
  background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
106
+ background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
105
107
  background: linear-gradient(#eeeeee, #dddddd), #dddddd;
106
108
  color: #333333;
107
109
  text-decoration: none; }
@@ -112,6 +114,7 @@ body {
112
114
  background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
113
115
  background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
114
116
  background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
117
+ background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
115
118
  background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
116
119
  color: #333333;
117
120
  text-decoration: none;
@@ -133,14 +136,10 @@ body > header {
133
136
  color: black;
134
137
  text-decoration: none;
135
138
  text-shadow: 0 1px 0 white;
136
- -moz-transition-property: 0.1s ease;
137
- -webkit-transition-property: 0.1s ease;
138
- -o-transition-property: 0.1s ease;
139
- transition-property: 0.1s ease;
140
- -moz-transition-duration: 1s;
141
- -webkit-transition-duration: 1s;
142
- -o-transition-duration: 1s;
143
- transition-duration: 1s; }
139
+ -webkit-transition: 0.1s ease;
140
+ -moz-transition: 0.1s ease;
141
+ -o-transition: 0.1s ease;
142
+ transition: 0.1s ease; }
144
143
  body > header h1 a:hover {
145
144
  color: #4183c4; }
146
145
  body > header nav {
@@ -167,6 +166,7 @@ body > header {
167
166
  background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
168
167
  background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
169
168
  background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
169
+ background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
170
170
  background: linear-gradient(#f4f4f4, #ececec), #ececec;
171
171
  color: #666666;
172
172
  text-shadow: 1px 1px 0 white;
@@ -178,6 +178,7 @@ body > header {
178
178
  background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
179
179
  background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
180
180
  background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
181
+ background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
181
182
  background: linear-gradient(#eeeeee, #dddddd), #dddddd;
182
183
  color: #333333;
183
184
  text-decoration: none; }
@@ -186,6 +187,7 @@ body > header {
186
187
  background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
187
188
  background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
188
189
  background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
190
+ background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
189
191
  background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
190
192
  color: #333333;
191
193
  text-decoration: none;
@@ -212,14 +214,10 @@ body > header {
212
214
  text-shadow: 0 1px 0 white; }
213
215
  #messages table tbody tr {
214
216
  cursor: pointer;
215
- -moz-transition-property: 0.1s ease;
216
- -webkit-transition-property: 0.1s ease;
217
- -o-transition-property: 0.1s ease;
218
- transition-property: 0.1s ease;
219
- -moz-transition-duration: 1s;
220
- -webkit-transition-duration: 1s;
221
- -o-transition-duration: 1s;
222
- transition-duration: 1s;
217
+ -webkit-transition: 0.1s ease;
218
+ -moz-transition: 0.1s ease;
219
+ -o-transition: 0.1s ease;
220
+ transition: 0.1s ease;
223
221
  color: #333333; }
224
222
  #messages table tbody tr:hover {
225
223
  color: black; }
@@ -242,14 +240,17 @@ body > header {
242
240
  border-bottom: 1px solid white; }
243
241
 
244
242
  #message {
245
- display: -moz-box;
246
243
  display: -webkit-box;
244
+ display: -moz-box;
245
+ display: -ms-box;
247
246
  display: box;
248
- -moz-box-orient: vertical;
249
247
  -webkit-box-orient: vertical;
248
+ -moz-box-orient: vertical;
249
+ -ms-box-orient: vertical;
250
250
  box-orient: vertical;
251
- -moz-box-flex: 1;
252
251
  -webkit-box-flex: 1;
252
+ -moz-box-flex: 1;
253
+ -ms-box-flex: 1;
253
254
  box-flex: 1; }
254
255
  #message > header {
255
256
  overflow: hidden;
@@ -318,8 +319,8 @@ body > header {
318
319
  background: white;
319
320
  color: black;
320
321
  height: 13px;
321
- -moz-box-shadow: 1px 1px 0 #cccccc;
322
322
  -webkit-box-shadow: 1px 1px 0 #cccccc;
323
+ -moz-box-shadow: 1px 1px 0 #cccccc;
323
324
  -o-box-shadow: 1px 1px 0 #cccccc;
324
325
  box-shadow: 1px 1px 0 #cccccc;
325
326
  margin-bottom: -2px;
@@ -335,11 +336,45 @@ body > header {
335
336
  #message > header .views .action {
336
337
  *display: inline; }
337
338
 
339
+ .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; }
370
+
338
371
  iframe {
339
- display: -moz-box;
340
372
  display: -webkit-box;
373
+ display: -moz-box;
374
+ display: -ms-box;
341
375
  display: box;
342
- -moz-box-flex: 1;
343
376
  -webkit-box-flex: 1;
377
+ -moz-box-flex: 1;
378
+ -ms-box-flex: 1;
344
379
  box-flex: 1;
345
380
  background: white; }
data/views/index.haml CHANGED
@@ -5,6 +5,7 @@
5
5
  %link{:rel => "stylesheet", :href => "/stylesheets/application.css"}
6
6
  %script{:src => "/javascripts/modernizr.js"}
7
7
  %script{:src => "/javascripts/jquery.js"}
8
+ %script{:src => "/javascripts/xslt-3.2.js"}
8
9
  %script{:src => "/javascripts/date.js"}
9
10
  %script{:src => "/javascripts/application.js"}
10
11
  %body
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.4
4
+ version: 0.5.5
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-04 00:00:00.000000000 Z
12
+ date: 2011-12-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70296826135360 !ruby/object:Gem::Requirement
16
+ requirement: &70278781254840 !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: *70296826135360
24
+ version_requirements: *70278781254840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &70296826134880 !ruby/object:Gem::Requirement
27
+ requirement: &70278781220820 !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: *70296826134880
35
+ version_requirements: *70278781220820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: haml
38
- requirement: &70296826134400 !ruby/object:Gem::Requirement
38
+ requirement: &70278781233560 !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: *70296826134400
46
+ version_requirements: *70278781233560
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mail
49
- requirement: &70296826133700 !ruby/object:Gem::Requirement
49
+ requirement: &70278781232620 !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: *70296826133700
57
+ version_requirements: *70278781232620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sinatra
60
- requirement: &70296826132960 !ruby/object:Gem::Requirement
60
+ requirement: &70278781232020 !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: *70296826132960
68
+ version_requirements: *70278781232020
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: skinny
71
- requirement: &70296826132240 !ruby/object:Gem::Requirement
71
+ requirement: &70278781230360 !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: *70296826132240
79
+ version_requirements: *70278781230360
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sqlite3
82
- requirement: &70296826131760 !ruby/object:Gem::Requirement
82
+ requirement: &70278781229540 !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: *70296826131760
90
+ version_requirements: *70278781229540
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: thin
93
- requirement: &70296826131180 !ruby/object:Gem::Requirement
93
+ requirement: &70278781227040 !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: *70296826131180
101
+ version_requirements: *70278781227040
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: coffee-script
104
- requirement: &70296826150680 !ruby/object:Gem::Requirement
104
+ requirement: &70278781021100 !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: *70296826150680
112
+ version_requirements: *70278781021100
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: compass
115
- requirement: &70296826150000 !ruby/object:Gem::Requirement
115
+ requirement: &70278781019120 !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: *70296826150000
123
+ version_requirements: *70278781019120
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rake
126
- requirement: &70296826149040 !ruby/object:Gem::Requirement
126
+ requirement: &70278781050380 !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: *70296826149040
134
+ version_requirements: *70278781050380
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rdoc
137
- requirement: &70296826148320 !ruby/object:Gem::Requirement
137
+ requirement: &70278781272240 !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: *70296826148320
145
+ version_requirements: *70278781272240
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: sass
148
- requirement: &70296826147680 !ruby/object:Gem::Requirement
148
+ requirement: &70278781284060 !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: *70296826147680
156
+ version_requirements: *70278781284060
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
@@ -184,7 +184,9 @@ files:
184
184
  - public/javascripts/date.js
185
185
  - public/javascripts/jquery.js
186
186
  - public/javascripts/modernizr.js
187
+ - public/javascripts/xslt-3.2.js
187
188
  - public/stylesheets/application.css
189
+ - public/stylesheets/analysis.xsl
188
190
  - views/index.haml
189
191
  homepage: http://mailcatcher.me
190
192
  licenses: []