mailcatcher 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/public/javascripts/application.js +58 -50
- data/public/javascripts/xslt-3.2.js +1 -0
- data/public/stylesheets/analysis.xsl +33 -0
- data/public/stylesheets/application.css +64 -29
- data/views/index.haml +1 -0
- metadata +30 -28
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.5
|
@@ -1,20 +1,22 @@
|
|
1
1
|
(function() {
|
2
2
|
var MailCatcher;
|
3
|
-
|
3
|
+
|
4
4
|
MailCatcher = (function() {
|
5
|
+
|
5
6
|
function MailCatcher() {
|
6
|
-
|
7
|
+
var _this = this;
|
8
|
+
$('#messages tr').live('click', function(e) {
|
7
9
|
e.preventDefault();
|
8
|
-
return
|
9
|
-
}
|
10
|
-
$('#message .views .format.tab a').live('click',
|
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
|
13
|
-
}
|
14
|
-
$('#message .views .analysis.tab a').live('click',
|
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
|
17
|
-
}
|
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',
|
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
|
-
}
|
53
|
-
$('nav.app .quit a').live('click',
|
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
|
-
}
|
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
|
-
|
97
|
-
|
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',
|
107
|
+
return $.getJSON('/messages/' + id + '.json', function(message) {
|
104
108
|
var $ul;
|
105
|
-
$('#message .metadata dd.created_at').text(
|
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
|
139
|
+
return _this.loadMessageAnalysis();
|
136
140
|
} else {
|
137
|
-
return
|
141
|
+
return _this.loadMessageBody();
|
138
142
|
}
|
139
|
-
}
|
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<
|
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…</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
|
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
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
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 =
|
194
|
-
return
|
195
|
-
}
|
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((
|
200
|
-
return
|
201
|
-
}
|
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
|
-
-
|
86
|
+
-moz-border-radius: 2px;
|
87
87
|
-ms-border-radius: 2px;
|
88
|
-
-
|
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
|
-
-
|
137
|
-
-
|
138
|
-
-o-transition
|
139
|
-
transition
|
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
|
-
-
|
216
|
-
-
|
217
|
-
-o-transition
|
218
|
-
transition
|
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
|
+
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *70278781254840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
27
|
-
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: *
|
35
|
+
version_requirements: *70278781220820
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: haml
|
38
|
-
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: *
|
46
|
+
version_requirements: *70278781233560
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mail
|
49
|
-
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: *
|
57
|
+
version_requirements: *70278781232620
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sinatra
|
60
|
-
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: *
|
68
|
+
version_requirements: *70278781232020
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: skinny
|
71
|
-
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: *
|
79
|
+
version_requirements: *70278781230360
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sqlite3
|
82
|
-
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: *
|
90
|
+
version_requirements: *70278781229540
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: thin
|
93
|
-
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: *
|
101
|
+
version_requirements: *70278781227040
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: coffee-script
|
104
|
-
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: *
|
112
|
+
version_requirements: *70278781021100
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: compass
|
115
|
-
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: *
|
123
|
+
version_requirements: *70278781019120
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rake
|
126
|
-
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: *
|
134
|
+
version_requirements: *70278781050380
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rdoc
|
137
|
-
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: *
|
145
|
+
version_requirements: *70278781272240
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: sass
|
148
|
-
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: *
|
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: []
|