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 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