mailcatcher 0.5.7.2 → 0.5.8

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.7.2
1
+ 0.5.8
@@ -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
- var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
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);; $('#messages tr').live('click', __bind(function(e) {
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 this.loadMessage($(e.currentTarget).attr('data-message-id'));
17
- }, this));
18
- $('input[name=search]').keyup(__bind(function(e) {
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 this.searchMessages(query);
27
+ return _this.searchMessages(query);
23
28
  } else {
24
- return this.clearSearch();
29
+ return _this.clearSearch();
25
30
  }
26
- }, this));
27
- $('#message .views .format.tab a').live('click', __bind(function(e) {
31
+ });
32
+ $('#message .views .format.tab a').live('click', function(e) {
28
33
  e.preventDefault();
29
- return this.loadMessageBody(this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format'));
30
- }, this));
31
- $('#message .views .analysis.tab a').live('click', __bind(function(e) {
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 this.loadMessageAnalysis(this.selectedMessage());
34
- }, this));
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', __bind(function(e) {
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
- }, this));
70
- $('nav.app .quit a').live('click', __bind(function(e) {
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
- }, this));
84
- key('up', __bind(function() {
88
+ });
89
+ key('up', function() {
85
90
  var id;
86
- id = this.selectedMessage() || 1;
87
- if (id > 1) {
88
- id -= 1;
89
- }
90
- return this.loadMessage(id);
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 = this.selectedMessage() || this.messagesCount();
95
- if (id < this.messagesCount()) {
96
- id += 1;
97
- }
98
- return this.loadMessage(id);
99
- }, this));
100
- key('⌘+up, ctrl+up', __bind(function() {
101
- return this.loadMessage(1);
102
- }, this));
103
- key('⌘+down, ctrl+down', __bind(function() {
104
- return this.loadMessage(this.messagesCount());
105
- }, this));
106
- key('left', __bind(function() {
107
- return this.openTab(this.previousTab());
108
- }, this));
109
- key('right', __bind(function() {
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
- if ((id != null ? id.id : void 0) != null) {
207
- id = id.id;
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', __bind(function(message) {
222
+ return $.getJSON('/messages/' + id + '.json', function(message) {
214
223
  var $ul;
215
- $('#message .metadata dd.created_at').text(this.formatDate(message.created_at));
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 this.loadMessageAnalysis();
254
+ return _this.loadMessageAnalysis();
246
255
  } else {
247
- return this.loadMessageBody();
256
+ return _this.loadMessageBody();
248
257
  }
249
- }, this));
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
- return $.getJSON('/messages', __bind(function(messages) {
278
- return $.each(messages, __bind(function(i, message) {
279
- if (!this.haveMessage(message)) {
280
- return this.addMessage(message);
281
- }
282
- }, this));
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 != "undefined" && WebSocket !== null) {
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 = __bind(function(event) {
297
- return this.addMessage($.parseJSON(event.data));
298
- }, this);
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((__bind(function() {
303
- return this.refresh();
304
- }, this)), 1000);
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
- q:before, q:after, blockquote:before, blockquote:after {
45
- content: "";
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
- 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
- }
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
- -ms-border-radius: 2px;
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
- .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
- }
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
- 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
- }
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
- #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
- }
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
- #resizer .ruler {
280
- border-top: 1px solid #cccccc;
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
- #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
- }
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
- .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
- }
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.7.2
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-10 00:00:00.000000000 Z
12
+ date: 2012-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport