mailcatcher 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/public/javascripts/modernizr.js +3 -0
- data/public/stylesheets/application.css +93 -40
- data/views/index.haml +3 -2
- metadata +3 -3
- data/views/index.html +0 -71
data/README.md
CHANGED
@@ -4,7 +4,7 @@ Catches mail and serves it through a dream.
|
|
4
4
|
|
5
5
|
MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface. Run mailcatcher, set your favourite app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server, then check out http://127.0.0.1:1080 to see the mail that's arrived so far.
|
6
6
|
|
7
|
-
![MailCatcher screenshot](http://
|
7
|
+
![MailCatcher screenshot](http://cl.ly/1400252J3k313s2b0v1Z/Screen_shot_2011-06-23_at_11.39.03_PM.png)
|
8
8
|
|
9
9
|
## Features
|
10
10
|
|
@@ -0,0 +1,3 @@
|
|
1
|
+
/** Modernizr 2.0.4 (Custom Build) | MIT & BSD */
|
2
|
+
window.Modernizr=function(a,b,c){function x(a,b){return!!~(""+a).indexOf(b)}function w(a,b){return typeof a===b}function v(a,b){return u(prefixes.join(a+";")+(b||""))}function u(a){k.cssText=a}var d="2.0.4",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n={},o={},p={},q=[],r,s={}.hasOwnProperty,t;!w(s,c)&&!w(s.call,c)?t=function(a,b){return s.call(a,b)}:t=function(a,b){return b in a&&w(a.constructor.prototype[b],c)};for(var y in n)t(n,y)&&(r=y.toLowerCase(),e[r]=n[y](),q.push((e[r]?"":"no-")+r));u(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+q.join(" "):"");return e}(this,this.document);
|
3
|
+
|
@@ -67,13 +67,55 @@ body {
|
|
67
67
|
body html > body {
|
68
68
|
font-size: 12px; }
|
69
69
|
|
70
|
+
.button {
|
71
|
+
padding: 0.5em 1em;
|
72
|
+
border: 1px solid #cccccc;
|
73
|
+
-moz-border-radius: 2px;
|
74
|
+
-webkit-border-radius: 2px;
|
75
|
+
-o-border-radius: 2px;
|
76
|
+
-ms-border-radius: 2px;
|
77
|
+
-khtml-border-radius: 2px;
|
78
|
+
border-radius: 2px;
|
79
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
|
80
|
+
background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
|
81
|
+
background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
|
82
|
+
background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
|
83
|
+
background: linear-gradient(#f4f4f4, #ececec), #ececec;
|
84
|
+
color: #666666;
|
85
|
+
text-shadow: 1px 1px 0 white;
|
86
|
+
text-decoration: none; }
|
87
|
+
.button:hover, .button:focus {
|
88
|
+
border-color: #999999;
|
89
|
+
border-bottom-color: #666666;
|
90
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
|
91
|
+
background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
92
|
+
background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
93
|
+
background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
94
|
+
background: linear-gradient(#eeeeee, #dddddd), #dddddd;
|
95
|
+
color: #333333;
|
96
|
+
text-decoration: none; }
|
97
|
+
.button:active, .button.active {
|
98
|
+
border-color: #666666;
|
99
|
+
border-bottom-color: #999999;
|
100
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
|
101
|
+
background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
102
|
+
background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
103
|
+
background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
104
|
+
background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
105
|
+
color: #333333;
|
106
|
+
text-decoration: none;
|
107
|
+
text-shadow: -1px -1px 0 #eeeeee; }
|
108
|
+
|
70
109
|
body > header {
|
71
110
|
overflow: hidden;
|
72
111
|
*zoom: 1;
|
73
112
|
border-bottom: 1px solid #cccccc; }
|
74
113
|
body > header h1 {
|
75
114
|
float: left;
|
115
|
+
margin-left: 6px;
|
76
116
|
padding: 6px;
|
117
|
+
padding-left: 30px;
|
118
|
+
background: url(/images/logo.png) left no-repeat;
|
77
119
|
font-size: 18px;
|
78
120
|
font-weight: bold; }
|
79
121
|
body > header h1 a {
|
@@ -91,8 +133,7 @@ body > header {
|
|
91
133
|
body > header h1 a:hover {
|
92
134
|
color: #4183c4; }
|
93
135
|
body > header nav {
|
94
|
-
border-left: 1px solid #cccccc;
|
95
|
-
border-right: 1px solid white; }
|
136
|
+
border-left: 1px solid #cccccc; }
|
96
137
|
body > header nav.project {
|
97
138
|
float: left; }
|
98
139
|
body > header nav.app {
|
@@ -100,24 +141,44 @@ body > header {
|
|
100
141
|
body > header nav li {
|
101
142
|
display: inline; }
|
102
143
|
body > header nav li a {
|
144
|
+
display: -moz-inline-box;
|
145
|
+
-moz-box-orient: vertical;
|
103
146
|
display: inline-block;
|
147
|
+
vertical-align: middle;
|
148
|
+
*vertical-align: auto;
|
104
149
|
float: left;
|
105
150
|
padding: 9px;
|
106
151
|
border-left: 1px solid white;
|
107
152
|
border-right: 1px solid #cccccc;
|
108
|
-
background: #eeeeee;
|
109
|
-
color: #666666;
|
110
|
-
font-weight: bold;
|
111
153
|
text-decoration: none;
|
112
|
-
text-shadow: 0 1px 0 white;
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
154
|
+
text-shadow: 0 1px 0 white;
|
155
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #ececec)), #ececec;
|
156
|
+
background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
|
157
|
+
background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
|
158
|
+
background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
|
159
|
+
background: linear-gradient(#f4f4f4, #ececec), #ececec;
|
160
|
+
color: #666666;
|
161
|
+
text-shadow: 1px 1px 0 white;
|
162
|
+
text-decoration: none; }
|
163
|
+
body > header nav li a {
|
164
|
+
*display: inline; }
|
165
|
+
body > header nav li a:hover, body > header nav li a:focus {
|
166
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)), #dddddd;
|
167
|
+
background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
168
|
+
background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
169
|
+
background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
170
|
+
background: linear-gradient(#eeeeee, #dddddd), #dddddd;
|
171
|
+
color: #333333;
|
172
|
+
text-decoration: none; }
|
173
|
+
body > header nav li a:active, body > header nav li a.active {
|
174
|
+
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)), #eeeeee;
|
175
|
+
background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
176
|
+
background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
177
|
+
background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
178
|
+
background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
179
|
+
color: #333333;
|
180
|
+
text-decoration: none;
|
181
|
+
text-shadow: -1px -1px 0 #eeeeee; }
|
121
182
|
|
122
183
|
#messages {
|
123
184
|
width: 100%;
|
@@ -203,18 +264,24 @@ body > header {
|
|
203
264
|
*display: inline; }
|
204
265
|
#message > header .views ul {
|
205
266
|
padding: 0 0.5em;
|
206
|
-
border-bottom: 1px solid #
|
267
|
+
border-bottom: 1px solid #cccccc; }
|
207
268
|
#message > header .views .tab {
|
269
|
+
display: -moz-inline-box;
|
270
|
+
-moz-box-orient: vertical;
|
208
271
|
display: inline-block;
|
272
|
+
vertical-align: middle;
|
273
|
+
*vertical-align: auto;
|
209
274
|
padding: 0.5em;
|
210
|
-
border: 1px solid #
|
275
|
+
border: 1px solid #cccccc;
|
211
276
|
background: #dddddd;
|
212
277
|
color: #333333;
|
213
278
|
border-width: 1px 1px 0 1px;
|
214
279
|
cursor: pointer;
|
215
280
|
text-shadow: 0 1px 0 #eeeeee; }
|
281
|
+
#message > header .views .tab {
|
282
|
+
*display: inline; }
|
216
283
|
#message > header .views .tab:not(.selected):hover {
|
217
|
-
background-color: #
|
284
|
+
background-color: #eeeeee; }
|
218
285
|
#message > header .views .tab.selected {
|
219
286
|
background: white;
|
220
287
|
color: black;
|
@@ -223,32 +290,18 @@ body > header {
|
|
223
290
|
-webkit-box-shadow: 1px 1px 0 #cccccc;
|
224
291
|
-o-box-shadow: 1px 1px 0 #cccccc;
|
225
292
|
box-shadow: 1px 1px 0 #cccccc;
|
226
|
-
margin-bottom: -2px;
|
227
|
-
|
293
|
+
margin-bottom: -2px;
|
294
|
+
cursor: default; }
|
295
|
+
#message > header .views .action {
|
296
|
+
display: -moz-inline-box;
|
297
|
+
-moz-box-orient: vertical;
|
228
298
|
display: inline-block;
|
299
|
+
vertical-align: middle;
|
300
|
+
*vertical-align: auto;
|
229
301
|
float: right;
|
230
302
|
margin: 0 0.25em; }
|
231
|
-
#message > header .views .
|
232
|
-
display: inline
|
233
|
-
padding: 0.25em 0.5em;
|
234
|
-
border: 1px solid #999999;
|
235
|
-
background: #dddddd;
|
236
|
-
color: #333333;
|
237
|
-
text-decoration: none;
|
238
|
-
text-shadow: 1px 1px 0 #eeeeee;
|
239
|
-
-moz-box-shadow: 1px 1px 0 #cccccc;
|
240
|
-
-webkit-box-shadow: 1px 1px 0 #cccccc;
|
241
|
-
-o-box-shadow: 1px 1px 0 #cccccc;
|
242
|
-
box-shadow: 1px 1px 0 #cccccc; }
|
243
|
-
#message > header .views .button a:hover {
|
244
|
-
background: white;
|
245
|
-
text-shadow: none; }
|
246
|
-
#message > header .views .button a:active {
|
247
|
-
margin: 1px -1px -1px 1px;
|
248
|
-
-moz-box-shadow: none;
|
249
|
-
-webkit-box-shadow: none;
|
250
|
-
-o-box-shadow: none;
|
251
|
-
box-shadow: none; }
|
303
|
+
#message > header .views .action {
|
304
|
+
*display: inline; }
|
252
305
|
#message .body {
|
253
306
|
display: -moz-box;
|
254
307
|
display: -webkit-box;
|
data/views/index.haml
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
%head
|
4
4
|
%title MailCatcher
|
5
5
|
%link{:rel => "stylesheet", :href => "/stylesheets/application.css"}
|
6
|
+
%script{:src => "/javascripts/modernizr.js"}
|
6
7
|
%script{:src => "/javascripts/jquery.js"}
|
7
8
|
%script{:src => "/javascripts/date.js"}
|
8
9
|
%script{:src => "/javascripts/application.js"}
|
@@ -44,7 +45,7 @@
|
|
44
45
|
%li.format.tab.html.selected{'data-message-format' => 'html'} HTML
|
45
46
|
%li.format.tab.plain{'data-message-format' => 'plain'} Plain Text
|
46
47
|
%li.format.tab.source{'data-message-format' => 'source'} Source
|
47
|
-
%li.
|
48
|
-
%a{:href => '#'}
|
48
|
+
%li.action.download
|
49
|
+
%a.button{:href => '#'}
|
49
50
|
%span Download
|
50
51
|
%iframe.body
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mailcatcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Samuel Cochran
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-23 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -157,9 +157,9 @@ files:
|
|
157
157
|
- public/javascripts/application.js
|
158
158
|
- public/javascripts/date.js
|
159
159
|
- public/javascripts/jquery.js
|
160
|
+
- public/javascripts/modernizr.js
|
160
161
|
- public/stylesheets/application.css
|
161
162
|
- views/index.haml
|
162
|
-
- views/index.html
|
163
163
|
homepage: http://github.com/sj26/mailcatcher
|
164
164
|
licenses: []
|
165
165
|
|
data/views/index.html
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>MailCatcher</title>
|
5
|
-
<link href='/stylesheets/application.css' rel='stylesheet' />
|
6
|
-
<script src='/javascripts/jquery.js'></script>
|
7
|
-
<script src='/javascripts/date.js'></script>
|
8
|
-
<script src='/javascripts/application.js'></script>
|
9
|
-
</head>
|
10
|
-
<body>
|
11
|
-
<header>
|
12
|
-
<h1>
|
13
|
-
<a href='http://mailcatcher.me' target='_blank'>MailCatcher</a>
|
14
|
-
</h1>
|
15
|
-
<nav class='app'>
|
16
|
-
<ul>
|
17
|
-
<li class='clear'>
|
18
|
-
<a href='#' title='Clear all messages'>Clear</a>
|
19
|
-
</li>
|
20
|
-
<li class='quit'>
|
21
|
-
<a href='#' title='Quit MailCatcher'>Quit</a>
|
22
|
-
</li>
|
23
|
-
</ul>
|
24
|
-
</nav>
|
25
|
-
</header>
|
26
|
-
<nav id='messages'>
|
27
|
-
<table>
|
28
|
-
<thead>
|
29
|
-
<tr>
|
30
|
-
<th>From</th>
|
31
|
-
<th>To</th>
|
32
|
-
<th>Subject</th>
|
33
|
-
<th>Received</th>
|
34
|
-
</tr>
|
35
|
-
</thead>
|
36
|
-
<tbody></tbody>
|
37
|
-
</table>
|
38
|
-
</nav>
|
39
|
-
<article id='message'>
|
40
|
-
<header>
|
41
|
-
<dl class='metadata'>
|
42
|
-
<dt class='created_at'>Received</dt>
|
43
|
-
<dd class='created_at'></dd>
|
44
|
-
<dt class='from'>From</dt>
|
45
|
-
<dd class='from'></dd>
|
46
|
-
<dt class='to'>To</dt>
|
47
|
-
<dd class='to'></dd>
|
48
|
-
<dt class='subject'>Subject</dt>
|
49
|
-
<dd class='subject'></dd>
|
50
|
-
<dt class='attachments'>Attachments</dt>
|
51
|
-
<dd class='attachments'>
|
52
|
-
<ul></ul>
|
53
|
-
</dd>
|
54
|
-
</dl>
|
55
|
-
<nav class='views'>
|
56
|
-
<ul>
|
57
|
-
<li class='format tab html selected' data-message-format='html'>HTML</li>
|
58
|
-
<li class='format tab plain' data-message-format='plain'>Plain Text</li>
|
59
|
-
<li class='format tab source' data-message-format='source'>Source</li>
|
60
|
-
<li class='button download'>
|
61
|
-
<a href='#'>
|
62
|
-
<span>Download</span>
|
63
|
-
</a>
|
64
|
-
</li>
|
65
|
-
</ul>
|
66
|
-
</nav>
|
67
|
-
</header>
|
68
|
-
<iframe class='body'></iframe>
|
69
|
-
</article>
|
70
|
-
</body>
|
71
|
-
</html>
|