mailcatcher 0.5.7.2 → 0.5.8
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/lib/mail_catcher/web.rb +0 -2
- data/public/javascripts/application.js +104 -84
- data/public/stylesheets/application.css +279 -355
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.8
|
data/lib/mail_catcher/web.rb
CHANGED
@@ -24,9 +24,7 @@ class MailCatcher::Web < Sinatra::Base
|
|
24
24
|
|
25
25
|
get '/messages' do
|
26
26
|
if request.websocket?
|
27
|
-
puts "Gots a websocket"
|
28
27
|
request.websocket!(
|
29
|
-
:protocol => "MailCatcher 0.2 Message Push",
|
30
28
|
:on_start => proc do |websocket|
|
31
29
|
subscription = MailCatcher::Events::MessageAdded.subscribe { |message| websocket.send_message message.to_json }
|
32
30
|
websocket.on_close do |websocket|
|
@@ -1,37 +1,42 @@
|
|
1
1
|
(function() {
|
2
|
-
var MailCatcher
|
3
|
-
|
2
|
+
var MailCatcher,
|
3
|
+
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
4
|
+
|
4
5
|
jQuery.expr[':'].icontains = function(a, i, m) {
|
5
6
|
var _ref, _ref2;
|
6
7
|
return ((_ref = (_ref2 = a.textContent) != null ? _ref2 : a.innerText) != null ? _ref : "").toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
|
7
8
|
};
|
9
|
+
|
8
10
|
MailCatcher = (function() {
|
11
|
+
|
9
12
|
function MailCatcher() {
|
10
|
-
this.nextTab = __bind(this.nextTab, this)
|
11
|
-
this.previousTab = __bind(this.previousTab, this)
|
12
|
-
this.openTab = __bind(this.openTab, this)
|
13
|
-
this.selectedTab = __bind(this.selectedTab, this)
|
14
|
-
this.getTab = __bind(this.getTab, this)
|
13
|
+
this.nextTab = __bind(this.nextTab, this);
|
14
|
+
this.previousTab = __bind(this.previousTab, this);
|
15
|
+
this.openTab = __bind(this.openTab, this);
|
16
|
+
this.selectedTab = __bind(this.selectedTab, this);
|
17
|
+
this.getTab = __bind(this.getTab, this);
|
18
|
+
var _this = this;
|
19
|
+
$('#messages tr').live('click', function(e) {
|
15
20
|
e.preventDefault();
|
16
|
-
return
|
17
|
-
}
|
18
|
-
$('input[name=search]').keyup(
|
21
|
+
return _this.loadMessage($(e.currentTarget).attr('data-message-id'));
|
22
|
+
});
|
23
|
+
$('input[name=search]').keyup(function(e) {
|
19
24
|
var query;
|
20
25
|
query = $.trim($(e.currentTarget).val());
|
21
26
|
if (query) {
|
22
|
-
return
|
27
|
+
return _this.searchMessages(query);
|
23
28
|
} else {
|
24
|
-
return
|
29
|
+
return _this.clearSearch();
|
25
30
|
}
|
26
|
-
}
|
27
|
-
$('#message .views .format.tab a').live('click',
|
31
|
+
});
|
32
|
+
$('#message .views .format.tab a').live('click', function(e) {
|
28
33
|
e.preventDefault();
|
29
|
-
return
|
30
|
-
}
|
31
|
-
$('#message .views .analysis.tab a').live('click',
|
34
|
+
return _this.loadMessageBody(_this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format'));
|
35
|
+
});
|
36
|
+
$('#message .views .analysis.tab a').live('click', function(e) {
|
32
37
|
e.preventDefault();
|
33
|
-
return
|
34
|
-
}
|
38
|
+
return _this.loadMessageAnalysis(_this.selectedMessage());
|
39
|
+
});
|
35
40
|
$('#resizer').live({
|
36
41
|
mousedown: function(e) {
|
37
42
|
var events;
|
@@ -50,7 +55,7 @@
|
|
50
55
|
});
|
51
56
|
}
|
52
57
|
});
|
53
|
-
$('nav.app .clear a').live('click',
|
58
|
+
$('nav.app .clear a').live('click', function(e) {
|
54
59
|
e.preventDefault();
|
55
60
|
if (confirm("You will lose all your received messages.\n\nAre you sure you want to clear all messages?")) {
|
56
61
|
return $.ajax({
|
@@ -66,8 +71,8 @@
|
|
66
71
|
}
|
67
72
|
});
|
68
73
|
}
|
69
|
-
}
|
70
|
-
$('nav.app .quit a').live('click',
|
74
|
+
});
|
75
|
+
$('nav.app .quit a').live('click', function(e) {
|
71
76
|
e.preventDefault();
|
72
77
|
if (confirm("You will lose all your received messages.\n\nAre you sure you want to quit?")) {
|
73
78
|
return $.ajax({
|
@@ -80,106 +85,108 @@
|
|
80
85
|
}
|
81
86
|
});
|
82
87
|
}
|
83
|
-
}
|
84
|
-
key('up',
|
88
|
+
});
|
89
|
+
key('up', function() {
|
85
90
|
var id;
|
86
|
-
id =
|
87
|
-
if (id > 1)
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
}, this));
|
92
|
-
key('down', __bind(function() {
|
91
|
+
id = _this.selectedMessage() || 1;
|
92
|
+
if (id > 1) id -= 1;
|
93
|
+
return _this.loadMessage(id);
|
94
|
+
});
|
95
|
+
key('down', function() {
|
93
96
|
var id;
|
94
|
-
id =
|
95
|
-
if (id <
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
return this.openTab(this.nextTab());
|
111
|
-
}, this));
|
97
|
+
id = _this.selectedMessage() || _this.messagesCount();
|
98
|
+
if (id < _this.messagesCount()) id += 1;
|
99
|
+
return _this.loadMessage(id);
|
100
|
+
});
|
101
|
+
key('⌘+up, ctrl+up', function() {
|
102
|
+
return _this.loadMessage(1);
|
103
|
+
});
|
104
|
+
key('⌘+down, ctrl+down', function() {
|
105
|
+
return _this.loadMessage(_this.messagesCount());
|
106
|
+
});
|
107
|
+
key('left', function() {
|
108
|
+
return _this.openTab(_this.previousTab());
|
109
|
+
});
|
110
|
+
key('right', function() {
|
111
|
+
return _this.openTab(_this.nextTab());
|
112
|
+
});
|
112
113
|
this.refresh();
|
113
114
|
this.subscribe();
|
114
115
|
}
|
116
|
+
|
115
117
|
MailCatcher.prototype.parseDateRegexp = /^(\d{4})[-\/\\](\d{2})[-\/\\](\d{2})(?:\s+|T)(\d{2})[:-](\d{2})[:-](\d{2})(?:([ +-]\d{2}:\d{2}|\s*\S+|Z?))?$/;
|
118
|
+
|
116
119
|
MailCatcher.prototype.parseDate = function(date) {
|
117
120
|
var match;
|
118
121
|
if (match = this.parseDateRegexp.exec(date)) {
|
119
122
|
return new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6], 0);
|
120
123
|
}
|
121
124
|
};
|
125
|
+
|
122
126
|
MailCatcher.prototype.offsetTimeZone = function(date) {
|
123
127
|
var offset;
|
124
128
|
offset = Date.now().getTimezoneOffset() * 60000;
|
125
129
|
date.setTime(date.getTime() - offset);
|
126
130
|
return date;
|
127
131
|
};
|
132
|
+
|
128
133
|
MailCatcher.prototype.formatDate = function(date) {
|
129
|
-
if (typeof date === "string")
|
130
|
-
date && (date = this.parseDate(date));
|
131
|
-
}
|
134
|
+
if (typeof date === "string") date && (date = this.parseDate(date));
|
132
135
|
date && (date = this.offsetTimeZone(date));
|
133
136
|
return date && (date = date.toString("dddd, d MMM yyyy h:mm:ss tt"));
|
134
137
|
};
|
138
|
+
|
135
139
|
MailCatcher.prototype.messagesCount = function() {
|
136
140
|
return $('#messages tr').length - 1;
|
137
141
|
};
|
142
|
+
|
138
143
|
MailCatcher.prototype.tabs = function() {
|
139
144
|
return $('#message ul').children('.tab');
|
140
145
|
};
|
146
|
+
|
141
147
|
MailCatcher.prototype.getTab = function(i) {
|
142
148
|
return $(this.tabs()[i]);
|
143
149
|
};
|
150
|
+
|
144
151
|
MailCatcher.prototype.selectedTab = function() {
|
145
152
|
return this.tabs().index($('#message li.tab.selected'));
|
146
153
|
};
|
154
|
+
|
147
155
|
MailCatcher.prototype.openTab = function(i) {
|
148
156
|
return this.getTab(i).children('a').click();
|
149
157
|
};
|
158
|
+
|
150
159
|
MailCatcher.prototype.previousTab = function(tab) {
|
151
160
|
var i;
|
152
161
|
i = tab || tab === 0 ? tab : this.selectedTab() - 1;
|
153
|
-
if (i < 0)
|
154
|
-
i = this.tabs().length - 1;
|
155
|
-
}
|
162
|
+
if (i < 0) i = this.tabs().length - 1;
|
156
163
|
if (this.getTab(i).is(":visible")) {
|
157
164
|
return i;
|
158
165
|
} else {
|
159
166
|
return this.previousTab(i - 1);
|
160
167
|
}
|
161
168
|
};
|
169
|
+
|
162
170
|
MailCatcher.prototype.nextTab = function(tab) {
|
163
171
|
var i;
|
164
172
|
i = tab ? tab : this.selectedTab() + 1;
|
165
|
-
if (i > this.tabs().length - 1)
|
166
|
-
i = 0;
|
167
|
-
}
|
173
|
+
if (i > this.tabs().length - 1) i = 0;
|
168
174
|
if (this.getTab(i).is(":visible")) {
|
169
175
|
return i;
|
170
176
|
} else {
|
171
177
|
return this.nextTab(i + 1);
|
172
178
|
}
|
173
179
|
};
|
180
|
+
|
174
181
|
MailCatcher.prototype.haveMessage = function(message) {
|
175
|
-
if (message.id != null)
|
176
|
-
message = message.id;
|
177
|
-
}
|
182
|
+
if (message.id != null) message = message.id;
|
178
183
|
return $("#messages tbody tr[data-message-id=\"" + message + "\"]").length > 0;
|
179
184
|
};
|
185
|
+
|
180
186
|
MailCatcher.prototype.selectedMessage = function() {
|
181
187
|
return $('#messages tr.selected').data('message-id');
|
182
188
|
};
|
189
|
+
|
183
190
|
MailCatcher.prototype.searchMessages = function(query) {
|
184
191
|
var $rows, selector, token;
|
185
192
|
selector = ((function() {
|
@@ -196,23 +203,25 @@
|
|
196
203
|
$rows.not(selector).hide();
|
197
204
|
return $rows.filter(selector).show();
|
198
205
|
};
|
206
|
+
|
199
207
|
MailCatcher.prototype.clearSearch = function() {
|
200
208
|
return $('#messages tbody tr').show();
|
201
209
|
};
|
210
|
+
|
202
211
|
MailCatcher.prototype.addMessage = function(message) {
|
203
212
|
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))));
|
204
213
|
};
|
214
|
+
|
205
215
|
MailCatcher.prototype.loadMessage = function(id) {
|
206
|
-
|
207
|
-
|
208
|
-
}
|
216
|
+
var _this = this;
|
217
|
+
if ((id != null ? id.id : void 0) != null) id = id.id;
|
209
218
|
id || (id = $('#messages tr.selected').attr('data-message-id'));
|
210
219
|
if (id != null) {
|
211
220
|
$('#messages tbody tr:not([data-message-id="' + id + '"])').removeClass('selected');
|
212
221
|
$('#messages tbody tr[data-message-id="' + id + '"]').addClass('selected');
|
213
|
-
return $.getJSON('/messages/' + id + '.json',
|
222
|
+
return $.getJSON('/messages/' + id + '.json', function(message) {
|
214
223
|
var $ul;
|
215
|
-
$('#message .metadata dd.created_at').text(
|
224
|
+
$('#message .metadata dd.created_at').text(_this.formatDate(message.created_at));
|
216
225
|
$('#message .metadata dd.from').text(message.sender);
|
217
226
|
$('#message .metadata dd.to').text((message.recipients || []).join(', '));
|
218
227
|
$('#message .metadata dd.subject').text(message.subject);
|
@@ -242,13 +251,14 @@
|
|
242
251
|
}
|
243
252
|
$('#message .views .download a').attr('href', "/messages/" + id + ".eml");
|
244
253
|
if ($('#message .views .tab.analysis.selected').length) {
|
245
|
-
return
|
254
|
+
return _this.loadMessageAnalysis();
|
246
255
|
} else {
|
247
|
-
return
|
256
|
+
return _this.loadMessageBody();
|
248
257
|
}
|
249
|
-
}
|
258
|
+
});
|
250
259
|
}
|
251
260
|
};
|
261
|
+
|
252
262
|
MailCatcher.prototype.loadMessageBody = function(id, format) {
|
253
263
|
id || (id = this.selectedMessage());
|
254
264
|
format || (format = $('#message .views .tab.format.selected').attr('data-message-format'));
|
@@ -259,6 +269,7 @@
|
|
259
269
|
return $('#message iframe').attr("src", "/messages/" + id + "." + format);
|
260
270
|
}
|
261
271
|
};
|
272
|
+
|
262
273
|
MailCatcher.prototype.loadMessageAnalysis = function(id) {
|
263
274
|
var $form, $iframe;
|
264
275
|
id || (id = this.selectedMessage());
|
@@ -273,40 +284,49 @@
|
|
273
284
|
});
|
274
285
|
}
|
275
286
|
};
|
287
|
+
|
276
288
|
MailCatcher.prototype.refresh = function() {
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
}, this));
|
289
|
+
var _this = this;
|
290
|
+
return $.getJSON('/messages', function(messages) {
|
291
|
+
return $.each(messages, function(i, message) {
|
292
|
+
if (!_this.haveMessage(message)) return _this.addMessage(message);
|
293
|
+
});
|
294
|
+
});
|
284
295
|
};
|
296
|
+
|
285
297
|
MailCatcher.prototype.subscribe = function() {
|
286
|
-
if (typeof WebSocket
|
298
|
+
if (typeof WebSocket !== "undefined" && WebSocket !== null) {
|
287
299
|
return this.subscribeWebSocket();
|
288
300
|
} else {
|
289
301
|
return this.subscribePoll();
|
290
302
|
}
|
291
303
|
};
|
304
|
+
|
292
305
|
MailCatcher.prototype.subscribeWebSocket = function() {
|
293
|
-
var secure
|
306
|
+
var secure,
|
307
|
+
_this = this;
|
294
308
|
secure = window.location.scheme === 'https';
|
295
309
|
this.websocket = new WebSocket("" + (secure ? 'wss' : 'ws') + "://" + window.location.host + "/messages");
|
296
|
-
return this.websocket.onmessage =
|
297
|
-
return
|
298
|
-
}
|
310
|
+
return this.websocket.onmessage = function(event) {
|
311
|
+
return _this.addMessage($.parseJSON(event.data));
|
312
|
+
};
|
299
313
|
};
|
314
|
+
|
300
315
|
MailCatcher.prototype.subscribePoll = function() {
|
316
|
+
var _this = this;
|
301
317
|
if (this.refreshInterval == null) {
|
302
|
-
return this.refreshInterval = setInterval((
|
303
|
-
return
|
304
|
-
}
|
318
|
+
return this.refreshInterval = setInterval((function() {
|
319
|
+
return _this.refresh();
|
320
|
+
}), 1000);
|
305
321
|
}
|
306
322
|
};
|
323
|
+
|
307
324
|
return MailCatcher;
|
325
|
+
|
308
326
|
})();
|
327
|
+
|
309
328
|
$(function() {
|
310
329
|
return window.MailCatcher = new MailCatcher;
|
311
330
|
});
|
331
|
+
|
312
332
|
}).call(this);
|
@@ -16,93 +16,77 @@ time, mark, audio, video {
|
|
16
16
|
border: 0;
|
17
17
|
font-size: 100%;
|
18
18
|
font: inherit;
|
19
|
-
vertical-align: baseline;
|
20
|
-
}
|
19
|
+
vertical-align: baseline; }
|
21
20
|
|
22
21
|
body {
|
23
|
-
line-height: 1;
|
24
|
-
}
|
22
|
+
line-height: 1; }
|
25
23
|
|
26
24
|
ol, ul {
|
27
|
-
list-style: none;
|
28
|
-
}
|
25
|
+
list-style: none; }
|
29
26
|
|
30
27
|
table {
|
31
28
|
border-collapse: collapse;
|
32
|
-
border-spacing: 0;
|
33
|
-
}
|
29
|
+
border-spacing: 0; }
|
34
30
|
|
35
31
|
caption, th, td {
|
36
32
|
text-align: left;
|
37
33
|
font-weight: normal;
|
38
|
-
vertical-align: middle;
|
39
|
-
}
|
34
|
+
vertical-align: middle; }
|
40
35
|
|
41
36
|
q, blockquote {
|
42
|
-
quotes: none;
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
content: none;
|
47
|
-
}
|
37
|
+
quotes: none; }
|
38
|
+
q:before, q:after, blockquote:before, blockquote:after {
|
39
|
+
content: "";
|
40
|
+
content: none; }
|
48
41
|
|
49
42
|
a img {
|
50
|
-
border: none;
|
51
|
-
}
|
43
|
+
border: none; }
|
52
44
|
|
53
45
|
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
54
|
-
display: block;
|
55
|
-
}
|
46
|
+
display: block; }
|
56
47
|
|
57
48
|
html, body {
|
58
49
|
width: 100%;
|
59
|
-
height: 100%;
|
60
|
-
}
|
50
|
+
height: 100%; }
|
61
51
|
|
62
52
|
body {
|
63
|
-
display: -webkit-box;
|
64
53
|
display: -moz-box;
|
54
|
+
display: -webkit-box;
|
65
55
|
display: -ms-box;
|
66
56
|
display: box;
|
67
|
-
-webkit-box-orient: vertical;
|
68
57
|
-moz-box-orient: vertical;
|
58
|
+
-webkit-box-orient: vertical;
|
69
59
|
-ms-box-orient: vertical;
|
70
60
|
box-orient: vertical;
|
71
61
|
background: #eeeeee;
|
72
62
|
color: black;
|
73
63
|
font-size: 12px;
|
74
|
-
font-family: Helvetica, sans-serif;
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
}
|
80
|
-
body
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
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
|
-
}
|
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; }
|
98
81
|
|
99
82
|
.button {
|
100
83
|
padding: 0.5em 1em;
|
101
84
|
border: 1px solid #cccccc;
|
102
|
-
-webkit-border-radius: 2px;
|
103
85
|
-moz-border-radius: 2px;
|
104
|
-
-
|
86
|
+
-webkit-border-radius: 2px;
|
105
87
|
-o-border-radius: 2px;
|
88
|
+
-ms-border-radius: 2px;
|
89
|
+
-khtml-border-radius: 2px;
|
106
90
|
border-radius: 2px;
|
107
91
|
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
|
108
92
|
background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
|
@@ -112,115 +96,99 @@ body.iframe .loading {
|
|
112
96
|
background: linear-gradient(#f4f4f4, #ececec), #ececec;
|
113
97
|
color: #666666;
|
114
98
|
text-shadow: 1px 1px 0 white;
|
115
|
-
text-decoration: none;
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
text-decoration: none;
|
140
|
-
text-shadow: -1px -1px 0 #eeeeee;
|
141
|
-
}
|
99
|
+
text-decoration: none; }
|
100
|
+
.button:hover, .button:focus {
|
101
|
+
border-color: #999999;
|
102
|
+
border-bottom-color: #666666;
|
103
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
|
104
|
+
background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
105
|
+
background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
106
|
+
background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
107
|
+
background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
108
|
+
background: linear-gradient(#eeeeee, #dddddd), #dddddd;
|
109
|
+
color: #333333;
|
110
|
+
text-decoration: none; }
|
111
|
+
.button:active, .button.active {
|
112
|
+
border-color: #666666;
|
113
|
+
border-bottom-color: #999999;
|
114
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
|
115
|
+
background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
116
|
+
background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
117
|
+
background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
118
|
+
background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
119
|
+
background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
120
|
+
color: #333333;
|
121
|
+
text-decoration: none;
|
122
|
+
text-shadow: -1px -1px 0 #eeeeee; }
|
142
123
|
|
143
124
|
body > header {
|
144
125
|
overflow: hidden;
|
145
126
|
*zoom: 1;
|
146
|
-
border-bottom: 1px solid #cccccc;
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
}
|
167
|
-
body > header
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
}
|
176
|
-
body > header nav
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
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
|
-
}
|
127
|
+
border-bottom: 1px solid #cccccc; }
|
128
|
+
body > header h1 {
|
129
|
+
float: left;
|
130
|
+
margin-left: 6px;
|
131
|
+
padding: 6px;
|
132
|
+
padding-left: 30px;
|
133
|
+
background: url(/images/logo.png) left no-repeat;
|
134
|
+
font-size: 18px;
|
135
|
+
font-weight: bold; }
|
136
|
+
body > header h1 a {
|
137
|
+
color: black;
|
138
|
+
text-decoration: none;
|
139
|
+
text-shadow: 0 1px 0 white;
|
140
|
+
-moz-transition: 0.1s ease;
|
141
|
+
-webkit-transition: 0.1s ease;
|
142
|
+
-o-transition: 0.1s ease;
|
143
|
+
transition: 0.1s ease; }
|
144
|
+
body > header h1 a:hover {
|
145
|
+
color: #4183c4; }
|
146
|
+
body > header nav {
|
147
|
+
border-left: 1px solid #cccccc; }
|
148
|
+
body > header nav.project {
|
149
|
+
float: left; }
|
150
|
+
body > header nav.app {
|
151
|
+
float: right; }
|
152
|
+
body > header nav li {
|
153
|
+
display: block;
|
154
|
+
float: left;
|
155
|
+
border-left: 1px solid white;
|
156
|
+
border-right: 1px solid #cccccc; }
|
157
|
+
body > header nav li input {
|
158
|
+
margin: 6px; }
|
159
|
+
body > header nav li a {
|
160
|
+
display: block;
|
161
|
+
padding: 10px;
|
162
|
+
text-decoration: none;
|
163
|
+
text-shadow: 0 1px 0 white;
|
164
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
|
165
|
+
background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
|
166
|
+
background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
|
167
|
+
background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
|
168
|
+
background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
|
169
|
+
background: linear-gradient(#f4f4f4, #ececec), #ececec;
|
170
|
+
color: #666666;
|
171
|
+
text-shadow: 1px 1px 0 white;
|
172
|
+
text-decoration: none; }
|
173
|
+
body > header nav li a:hover, body > header nav li a:focus {
|
174
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
|
175
|
+
background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
176
|
+
background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
177
|
+
background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
178
|
+
background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
179
|
+
background: linear-gradient(#eeeeee, #dddddd), #dddddd;
|
180
|
+
color: #333333;
|
181
|
+
text-decoration: none; }
|
182
|
+
body > header nav li a:active, body > header nav li a.active {
|
183
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
|
184
|
+
background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
185
|
+
background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
186
|
+
background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
187
|
+
background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
188
|
+
background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
189
|
+
color: #333333;
|
190
|
+
text-decoration: none;
|
191
|
+
text-shadow: -1px -1px 0 #eeeeee; }
|
224
192
|
|
225
193
|
#messages {
|
226
194
|
width: 100%;
|
@@ -228,226 +196,182 @@ body > header nav li a:active, body > header nav li a.active {
|
|
228
196
|
min-height: 3em;
|
229
197
|
overflow: auto;
|
230
198
|
background: white;
|
231
|
-
border-top: 1px solid white;
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
#
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
#
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
}
|
260
|
-
#messages table tbody tr
|
261
|
-
|
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
|
-
}
|
199
|
+
border-top: 1px solid white; }
|
200
|
+
#messages table {
|
201
|
+
overflow: hidden;
|
202
|
+
*zoom: 1;
|
203
|
+
width: 100%; }
|
204
|
+
#messages table thead tr {
|
205
|
+
background: #eeeeee;
|
206
|
+
color: #333333; }
|
207
|
+
#messages table thead tr th {
|
208
|
+
padding: 0.25em;
|
209
|
+
font-weight: bold;
|
210
|
+
color: #666666;
|
211
|
+
text-shadow: 0 1px 0 white; }
|
212
|
+
#messages table tbody tr {
|
213
|
+
cursor: pointer;
|
214
|
+
-moz-transition: 0.1s ease;
|
215
|
+
-webkit-transition: 0.1s ease;
|
216
|
+
-o-transition: 0.1s ease;
|
217
|
+
transition: 0.1s ease;
|
218
|
+
color: #333333; }
|
219
|
+
#messages table tbody tr:hover {
|
220
|
+
color: black; }
|
221
|
+
#messages table tbody tr:nth-child(even) {
|
222
|
+
background: #f0f0f0; }
|
223
|
+
#messages table tbody tr.selected {
|
224
|
+
background: Highlight;
|
225
|
+
color: HighlightText; }
|
226
|
+
#messages table tbody tr td {
|
227
|
+
padding: 0.25em; }
|
228
|
+
#messages table tbody tr td.blank {
|
229
|
+
color: #666666;
|
230
|
+
font-style: italic; }
|
274
231
|
|
275
232
|
#resizer {
|
276
233
|
padding-bottom: 5px;
|
277
|
-
cursor: ns-resize;
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
border-bottom: 1px solid white;
|
282
|
-
}
|
234
|
+
cursor: ns-resize; }
|
235
|
+
#resizer .ruler {
|
236
|
+
border-top: 1px solid #cccccc;
|
237
|
+
border-bottom: 1px solid white; }
|
283
238
|
|
284
239
|
#message {
|
285
|
-
display: -webkit-box;
|
286
240
|
display: -moz-box;
|
241
|
+
display: -webkit-box;
|
287
242
|
display: -ms-box;
|
288
243
|
display: box;
|
289
|
-
-webkit-box-orient: vertical;
|
290
244
|
-moz-box-orient: vertical;
|
245
|
+
-webkit-box-orient: vertical;
|
291
246
|
-ms-box-orient: vertical;
|
292
247
|
box-orient: vertical;
|
293
|
-
-webkit-box-flex: 1;
|
294
248
|
-moz-box-flex: 1;
|
249
|
+
-webkit-box-flex: 1;
|
295
250
|
-ms-box-flex: 1;
|
296
|
-
box-flex: 1;
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
}
|
370
|
-
#message > header .views .
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
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
|
-
}
|
251
|
+
box-flex: 1; }
|
252
|
+
#message > header {
|
253
|
+
overflow: hidden;
|
254
|
+
*zoom: 1; }
|
255
|
+
#message > header .metadata {
|
256
|
+
overflow: hidden;
|
257
|
+
*zoom: 1;
|
258
|
+
padding: 0.5em;
|
259
|
+
padding-top: 0; }
|
260
|
+
#message > header .metadata dt, #message > header .metadata dd {
|
261
|
+
padding: 0.25em; }
|
262
|
+
#message > header .metadata dt {
|
263
|
+
float: left;
|
264
|
+
clear: left;
|
265
|
+
width: 8em;
|
266
|
+
margin-right: 0.5em;
|
267
|
+
text-align: right;
|
268
|
+
font-weight: bold;
|
269
|
+
color: #666666;
|
270
|
+
text-shadow: 0 1px 0 white; }
|
271
|
+
#message > header .metadata dd.subject {
|
272
|
+
font-weight: bold; }
|
273
|
+
#message > header .metadata .attachments {
|
274
|
+
display: none; }
|
275
|
+
#message > header .metadata .attachments ul {
|
276
|
+
display: inline; }
|
277
|
+
#message > header .metadata .attachments ul li {
|
278
|
+
display: -moz-inline-box;
|
279
|
+
-moz-box-orient: vertical;
|
280
|
+
display: inline-block;
|
281
|
+
vertical-align: middle;
|
282
|
+
*vertical-align: auto;
|
283
|
+
margin-right: 0.5em; }
|
284
|
+
#message > header .metadata .attachments ul li {
|
285
|
+
*display: inline; }
|
286
|
+
#message > header .views ul {
|
287
|
+
padding: 0 0.5em;
|
288
|
+
border-bottom: 1px solid #cccccc; }
|
289
|
+
#message > header .views .tab {
|
290
|
+
display: -moz-inline-box;
|
291
|
+
-moz-box-orient: vertical;
|
292
|
+
display: inline-block;
|
293
|
+
vertical-align: middle;
|
294
|
+
*vertical-align: auto; }
|
295
|
+
#message > header .views .tab {
|
296
|
+
*display: inline; }
|
297
|
+
#message > header .views .tab a {
|
298
|
+
display: -moz-inline-box;
|
299
|
+
-moz-box-orient: vertical;
|
300
|
+
display: inline-block;
|
301
|
+
vertical-align: middle;
|
302
|
+
*vertical-align: auto;
|
303
|
+
padding: 0.5em;
|
304
|
+
border: 1px solid #cccccc;
|
305
|
+
background: #dddddd;
|
306
|
+
color: #333333;
|
307
|
+
border-width: 1px 1px 0 1px;
|
308
|
+
cursor: pointer;
|
309
|
+
text-shadow: 0 1px 0 #eeeeee;
|
310
|
+
text-decoration: none; }
|
311
|
+
#message > header .views .tab a {
|
312
|
+
*display: inline; }
|
313
|
+
#message > header .views .tab:not(.selected):hover a {
|
314
|
+
background-color: #eeeeee; }
|
315
|
+
#message > header .views .tab.selected a {
|
316
|
+
background: white;
|
317
|
+
color: black;
|
318
|
+
height: 13px;
|
319
|
+
-moz-box-shadow: 1px 1px 0 #cccccc;
|
320
|
+
-webkit-box-shadow: 1px 1px 0 #cccccc;
|
321
|
+
-o-box-shadow: 1px 1px 0 #cccccc;
|
322
|
+
box-shadow: 1px 1px 0 #cccccc;
|
323
|
+
margin-bottom: -2px;
|
324
|
+
cursor: default; }
|
325
|
+
#message > header .views .action {
|
326
|
+
display: -moz-inline-box;
|
327
|
+
-moz-box-orient: vertical;
|
328
|
+
display: inline-block;
|
329
|
+
vertical-align: middle;
|
330
|
+
*vertical-align: auto;
|
331
|
+
float: right;
|
332
|
+
margin: 0 0.25em; }
|
333
|
+
#message > header .views .action {
|
334
|
+
*display: inline; }
|
398
335
|
|
399
336
|
.fractal-analysis {
|
400
|
-
margin: 12px 0;
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
}
|
405
|
-
.fractal-analysis .report-intro.
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
}
|
422
|
-
.fractal-analysis
|
423
|
-
|
424
|
-
|
425
|
-
}
|
426
|
-
.fractal-analysis
|
427
|
-
|
428
|
-
|
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
|
-
}
|
337
|
+
margin: 12px 0; }
|
338
|
+
.fractal-analysis .report-intro {
|
339
|
+
font-weight: bold; }
|
340
|
+
.fractal-analysis .report-intro.valid {
|
341
|
+
color: #009900; }
|
342
|
+
.fractal-analysis .report-intro.invalid {
|
343
|
+
color: #cc3333; }
|
344
|
+
.fractal-analysis code {
|
345
|
+
font-family: Monaco, "Courier New", Courier, monospace;
|
346
|
+
background-color: #f8f8ff;
|
347
|
+
color: #444444;
|
348
|
+
padding: 0 0.2em;
|
349
|
+
border: 1px solid #dedede; }
|
350
|
+
.fractal-analysis ul {
|
351
|
+
margin: 1em 0 1em 1em;
|
352
|
+
list-style-type: square; }
|
353
|
+
.fractal-analysis ol {
|
354
|
+
margin: 1em 0 1em 2em;
|
355
|
+
list-style-type: decimal; }
|
356
|
+
.fractal-analysis ul li, .fractal-analysis ol li {
|
357
|
+
display: list-item;
|
358
|
+
margin: 0.5em 0 0.5em 1em; }
|
359
|
+
.fractal-analysis .error-intro strong {
|
360
|
+
font-weight: bold; }
|
361
|
+
.fractal-analysis .unsupported-clients dt {
|
362
|
+
padding-left: 1em; }
|
363
|
+
.fractal-analysis .unsupported-clients dd {
|
364
|
+
padding-left: 2em; }
|
365
|
+
.fractal-analysis .unsupported-clients dd ul li {
|
366
|
+
display: list-item; }
|
442
367
|
|
443
368
|
iframe {
|
444
|
-
display: -webkit-box;
|
445
369
|
display: -moz-box;
|
370
|
+
display: -webkit-box;
|
446
371
|
display: -ms-box;
|
447
372
|
display: box;
|
448
|
-
-webkit-box-flex: 1;
|
449
373
|
-moz-box-flex: 1;
|
374
|
+
-webkit-box-flex: 1;
|
450
375
|
-ms-box-flex: 1;
|
451
376
|
box-flex: 1;
|
452
|
-
background: white;
|
453
|
-
}
|
377
|
+
background: white; }
|
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.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|