rails_email_preview 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +47 -20
- data/app/assets/stylesheets/rails_email_preview/application.css.sass +12 -10
- data/app/controllers/rails_email_preview/emails_controller.rb +22 -18
- data/app/views/integrations/cms/_customize_cms_for_rails_email_preview.html.slim +17 -0
- data/app/views/rails_email_preview/emails/_email_iframe.html.slim +16 -0
- data/app/views/rails_email_preview/emails/_headers.html.slim +4 -0
- data/app/views/rails_email_preview/emails/_options.html.slim +9 -0
- data/app/views/rails_email_preview/emails/index.html.slim +1 -1
- data/app/views/rails_email_preview/emails/show.html.slim +8 -41
- data/lib/rails_email_preview.rb +16 -1
- data/lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb +86 -0
- data/lib/rails_email_preview/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37f26bca79a358d23b5558ccdf69ec9d14806c8c
|
4
|
+
data.tar.gz: 212af63e4f7389f0c7b10170ccd09c382fa1a0b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b52eef72bf07ada652564f93e1a068ae7ad5046c2fa927a6f47cebc96e8b567da4726ff124d6857c6c097b95970b710a1a8d68601b17e07ea18a07a5aaf1b0c
|
7
|
+
data.tar.gz: 8b9a369c78e56782055e007cdc1b732230207318b98d1e0b50e10536062b3f04611d64eac600028c3a8725faf4bdd42b7c201b22da8693f88b903971886a00ab
|
data/README.md
CHANGED
@@ -3,8 +3,9 @@ Rails Email Preview
|
|
3
3
|
|
4
4
|
A Rails Engine to preview plain text and html email in your browser. Compatible with Rails 3 and 4.
|
5
5
|
|
6
|
-
![screenshot](http://screencloud.net//img/screenshots/
|
7
|
-
|
6
|
+
![screenshot](http://screencloud.net//img/screenshots/8861336ed60923429d3747e1fd379619.png)
|
7
|
+
![screenshot](http://screencloud.net//img/screenshots/22aa58b651815068f4b0676754275c6a.png)
|
8
|
+
*Rendered within an application layout*
|
8
9
|
|
9
10
|
How to
|
10
11
|
-----
|
@@ -57,19 +58,12 @@ Configuration
|
|
57
58
|
config.preview_classes = [ UserMailerPreview ]
|
58
59
|
end
|
59
60
|
|
60
|
-
# To render previews within layout other than the default one. NB: that layout must reference application urls via `main_app`, e.g. `main_app.login_url` (due to how isolated engines are in rails):
|
61
|
-
|
62
|
-
Rails.application.config.to_prepare do
|
63
|
-
RailsEmailPreview::ApplicationController.layout 'admin'
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
61
|
Premailer integration
|
68
62
|
---------------------
|
69
63
|
|
70
64
|
[Premailer](https://github.com/alexdunae/premailer) automatically translates standard CSS rules into old-school inline styles. Integration can be done by using the <code>before_render</code> hook.
|
71
65
|
|
72
|
-
To integrate Premailer with
|
66
|
+
To integrate Premailer with your Rails app you can use either [actionmailer_inline_css](https://github.com/ndbroadbent/actionmailer_inline_css) or [premailer-rails](https://github.com/fphilipe/premailer-rails).
|
73
67
|
|
74
68
|
For [actionmailer_inline_css](https://github.com/ndbroadbent/actionmailer_inline_css), add to `RailsEmailPreview.setup`:
|
75
69
|
|
@@ -83,24 +77,57 @@ Email editing
|
|
83
77
|
-------------
|
84
78
|
|
85
79
|
You can use [comfortable_mexican_sofa](https://github.com/comfy/comfortable-mexican-sofa) for storing and editing emails.
|
86
|
-
|
87
|
-
|
88
|
-
This is what it looks like:
|
80
|
+
REP comes with a CMS integration, see [ComfortableMexicanSofa integration guide](https://github.com/glebm/rails_email_preview/wiki/Edit-Emails-with-Comfortable-Mexican-Sofa).
|
89
81
|
|
90
|
-
![CMS integration screenshot](http://screencloud.net//img/screenshots/
|
82
|
+
![CMS integration screenshot](http://screencloud.net//img/screenshots/b000595dbd13ae061373fd1473f113ba.png)
|
91
83
|
|
92
84
|
I18n
|
93
85
|
-------------
|
94
86
|
|
95
|
-
Rails Email Preview
|
96
|
-
|
97
|
-
|
87
|
+
Rails Email Preview expect emails to be rendered using `I18n.locale`:
|
88
|
+
|
89
|
+
# current locale
|
90
|
+
AccountMailer.some_notification.deliver
|
91
|
+
# different locale
|
92
|
+
I18n.with_locale('es') { InviteMailer.send_invites.deliver }
|
93
|
+
|
94
|
+
|
95
|
+
If you are using `Resque::Mailer` or `Devise::Async`, you can automatically add I18n.locale information when the mail job is scheduled
|
96
|
+
[with this initializer](https://gist.github.com/glebm/5725347).
|
98
97
|
|
99
98
|
|
100
|
-
|
99
|
+
Views
|
101
100
|
---------------------
|
102
101
|
|
103
|
-
You can
|
104
|
-
|
102
|
+
You can render all REP views inside your own layout:
|
103
|
+
|
104
|
+
Rails.application.config.to_prepare do
|
105
|
+
RailsEmailPreview::ApplicationController.layout 'admin'
|
106
|
+
end
|
107
|
+
|
108
|
+
When using a layout other than the default, that layout has to access all route helpers via `main_app`, e.g. `main_app.login_url`.
|
109
|
+
This is due to how [isolated engines](http://edgeapi.rubyonrails.org/classes/Rails/Engine.html#label-Isolated+Engine) work in Rails.
|
110
|
+
|
111
|
+
You can also override any individual view by placing a file with the same path in your project's `app/views`, e.g. `app/views/rails_email_preview/emails/index.html.slim`.
|
112
|
+
|
113
|
+
*Pull requests adding view hooks are welcome!*
|
114
|
+
|
115
|
+
|
116
|
+
Authentication & authorization
|
117
|
+
------------------------------
|
118
|
+
|
119
|
+
To only allow certain users view emails add a before filter to `RailsEmailPreview::ApplicationController`, e.g.:
|
120
|
+
|
121
|
+
Rails.application.config.to_prepare do
|
122
|
+
RailsEmailPreview::ApplicationController.module_eval do
|
123
|
+
before_filter :check_permissions
|
124
|
+
|
125
|
+
private
|
126
|
+
def check_permissions
|
127
|
+
render status: 403 unless current_user.try(:admin?)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
105
132
|
|
106
133
|
This project rocks and uses MIT-LICENSE.
|
@@ -1,30 +1,32 @@
|
|
1
|
-
#
|
1
|
+
#email-show
|
2
2
|
padding: 10px 0 0 0
|
3
3
|
margin: 0
|
4
|
-
background:
|
4
|
+
background: rgb(242, 236, 245)
|
5
5
|
font-size: 12px
|
6
|
-
font-family: "Lucida Grande"
|
7
|
-
border-bottom: 1px solid
|
6
|
+
font-family: "Monaco", "Lucida Grande", sans-serif
|
7
|
+
border-bottom: 1px solid rgb(142, 137, 148)
|
8
8
|
overflow: hidden
|
9
9
|
|
10
|
+
.pull-right
|
11
|
+
float: right
|
12
|
+
|
13
|
+
.btn-group
|
14
|
+
a
|
15
|
+
display: inline-block
|
16
|
+
|
10
17
|
dl
|
11
18
|
margin: 0
|
12
19
|
padding: 0
|
13
20
|
|
14
|
-
|
15
21
|
dt
|
16
22
|
width: 60px
|
17
23
|
padding: 1px
|
18
24
|
float: left
|
19
25
|
text-align: right
|
20
26
|
font-weight: bold
|
21
|
-
color:
|
22
|
-
|
27
|
+
color: rgb(142, 137, 148)
|
23
28
|
|
24
29
|
dd
|
25
30
|
margin-left: 70px
|
26
31
|
padding: 1px
|
27
32
|
|
28
|
-
|
29
|
-
p.alternate
|
30
|
-
float: right
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class RailsEmailPreview::EmailsController < RailsEmailPreview::ApplicationController
|
2
2
|
include ERB::Util
|
3
3
|
before_filter :load_preview_class, except: :index
|
4
|
-
|
4
|
+
before_filter :set_email_preview_locale
|
5
5
|
|
6
6
|
# list screen
|
7
7
|
def index
|
@@ -10,35 +10,39 @@ class RailsEmailPreview::EmailsController < RailsEmailPreview::ApplicationContro
|
|
10
10
|
|
11
11
|
# preview screen
|
12
12
|
def show
|
13
|
-
@
|
14
|
-
|
13
|
+
I18n.with_locale @email_locale do
|
14
|
+
@part_type = params[:part_type] || 'text/html'
|
15
|
+
@mail = @preview_class.new.send(params[:mail_action])
|
16
|
+
end
|
17
|
+
render
|
15
18
|
end
|
16
19
|
|
17
20
|
# render actual email content
|
18
21
|
def show_raw
|
19
|
-
@
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
if @mail.multipart?
|
25
|
-
body_part = (@part_type =~ /html/ ? @mail.html_part : @mail.text_part)
|
22
|
+
I18n.with_locale @email_locale do
|
23
|
+
@mail = @preview_class.new.send(params[:mail_action])
|
24
|
+
RailsEmailPreview.run_before_render(@mail)
|
25
|
+
if @part_type == 'raw'
|
26
|
+
body = "<pre id='raw_message'>#{html_escape(@mail.to_s)}</pre>"
|
26
27
|
else
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
if @mail.multipart?
|
29
|
+
body_part = (@part_type =~ /html/ ? @mail.html_part : @mail.text_part)
|
30
|
+
else
|
31
|
+
body_part = @mail
|
32
|
+
end
|
33
|
+
body = body_part.body
|
34
|
+
if body_part.content_type =~ /plain/
|
35
|
+
body = "<pre id='message_body'>#{body}</body>"
|
36
|
+
end
|
32
37
|
end
|
38
|
+
render text: body, layout: false
|
33
39
|
end
|
34
|
-
render text: body, layout: false
|
35
40
|
end
|
36
41
|
|
37
42
|
protected
|
38
43
|
|
39
|
-
def
|
44
|
+
def set_email_preview_locale
|
40
45
|
@email_locale = (params[:email_locale] || I18n.locale).to_s
|
41
|
-
I18n.with_locale @email_locale, &block
|
42
46
|
end
|
43
47
|
|
44
48
|
private
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-# Hide nav when rendering inside rails_email_preview
|
2
|
+
javascript:
|
3
|
+
jQuery(function($) {
|
4
|
+
if (window.parent && /email/.test(parent.location.href)) {
|
5
|
+
$('.left-column,.right-column').hide();
|
6
|
+
$('.center-column').css('margin', 0);
|
7
|
+
}
|
8
|
+
// Snippet form:
|
9
|
+
// * Label -> Subject
|
10
|
+
$('[name="snippet[label]"]').closest('.control-group').find('.control-label').text("Subject");
|
11
|
+
// * Content -> Body
|
12
|
+
$('[name="snippet[content]"]').closest('.control-group').find('.control-label').text("Body");
|
13
|
+
// * Hide identifier
|
14
|
+
$('[name="snippet[identifier]"]').closest('.control-group').hide();
|
15
|
+
// * Hide categories
|
16
|
+
$('label[for="snippet_"]').closest('.control-group').hide();
|
17
|
+
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
javascript:
|
2
|
+
function iFrameLoad(id){
|
3
|
+
var resize = function(id) {
|
4
|
+
var el = document.getElementById(id),
|
5
|
+
w = jQuery(el.parentNode).innerWidth(),
|
6
|
+
h = el.contentWindow.document.body.scrollHeight;
|
7
|
+
el.height = (h) + "px";
|
8
|
+
el.width = (w) + "px";
|
9
|
+
};
|
10
|
+
document.getElementById('loading-el').style.display = 'none';
|
11
|
+
setTimeout(function() { resize(id) });
|
12
|
+
}
|
13
|
+
|
14
|
+
pre#loading-el.lead #{icon 'spinner', 'spin'} Loading...
|
15
|
+
iframe#src-iframe[src=rails_email_preview.raw_email_url(params.slice(:mail_class, :mail_action, :part_type).merge(email_locale: @email_locale))
|
16
|
+
width="100%" height=1 onLoad="iFrameLoad('src-iframe')" style="border:none;padding:0;margin:0"]
|
@@ -0,0 +1,9 @@
|
|
1
|
+
p.btn-group
|
2
|
+
- { 'text/html' => 'HTML', 'text/plain' => 'Text', 'raw' => 'Raw'}.each do |mime, label|
|
3
|
+
a.btn.btn-link href=rails_email_preview.email_url(params.merge(part_type: mime)) class=('active' if @part_type == mime)
|
4
|
+
= label
|
5
|
+
br
|
6
|
+
p.btn-group
|
7
|
+
- I18n.available_locales.each do |locale|
|
8
|
+
a.btn.btn-link href=rails_email_preview.email_url(params.merge(part_type: @part_type, email_locale: locale)) class=('active' if @email_locale == locale.to_s)
|
9
|
+
= locale
|
@@ -6,5 +6,5 @@ ul.list-unstyled
|
|
6
6
|
ul.list-group
|
7
7
|
- m.constantize.instance_methods(false).map(&:to_s).each do |method|
|
8
8
|
li.list-group-item
|
9
|
-
a href=rails_email_preview.email_url(mail_class: m.to_s.underscore, mail_action: method.to_s)
|
9
|
+
a href=rails_email_preview.email_url(mail_class: m.to_s.underscore, mail_action: method.to_s, email_locale: @email_locale)
|
10
10
|
= method.to_s.humanize
|
@@ -1,44 +1,11 @@
|
|
1
|
-
a.btn.btn-link href=rails_email_preview.root_url « Back to list
|
1
|
+
a.btn.btn-link href=rails_email_preview.root_url(email_locale: @email_locale) « Back to list
|
2
2
|
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
- { 'text/html' => 'HTML', 'text/plain' => 'Text', 'raw' => 'Raw'}.each do |mime, label|
|
7
|
-
a.btn.btn-link href=rails_email_preview.email_url(params.merge(part_type: mime)) class=('active' if @part_type == mime) = label
|
8
|
-
br
|
9
|
-
p.btn-group
|
10
|
-
- I18n.available_locales.each do |locale|
|
11
|
-
a.btn.btn-link href=rails_email_preview.email_url(params.merge(part_type: @part_type, email_locale: locale)) class=('active' if @email_locale == locale.to_s) = locale
|
12
|
-
dl
|
13
|
-
dt From:
|
14
|
-
dd= @mail.from * ', '
|
3
|
+
#email-show
|
4
|
+
-# email format and language
|
5
|
+
.pull-right = render 'rails_email_preview/emails/options'
|
15
6
|
|
16
|
-
|
17
|
-
|
7
|
+
-# from, to, subject
|
8
|
+
= render 'rails_email_preview/emails/headers'
|
18
9
|
|
19
|
-
|
20
|
-
|
21
|
-
strong= @mail.subject
|
22
|
-
|
23
|
-
javascript:
|
24
|
-
function iFrameAutoResize(id){
|
25
|
-
document.getElementById('loading-el').style.display = 'none';
|
26
|
-
setTimeout(function(){
|
27
|
-
var newheight;
|
28
|
-
var newwidth;
|
29
|
-
|
30
|
-
if(document.getElementById){
|
31
|
-
newheight = document.getElementById(id).contentWindow.document.body.scrollHeight;
|
32
|
-
|
33
|
-
newwidth = $(document.getElementById(id).parentNode).innerWidth();
|
34
|
-
}
|
35
|
-
|
36
|
-
var el = document.getElementById(id);
|
37
|
-
el.height = (newheight) + "px";
|
38
|
-
el.width = (newwidth) + "px";
|
39
|
-
});
|
40
|
-
}
|
41
|
-
|
42
|
-
pre#loading-el.lead #{icon 'spinner', 'spin'} Loading...
|
43
|
-
iframe#src-iframe[src=rails_email_preview.raw_email_url(params.slice(:mail_class, :mail_action, :part_type).merge(email_locale: @email_locale))
|
44
|
-
width="100%" height=1 onLoad="iFrameAutoResize('src-iframe')" style="border:none;padding:0;margin:0"]
|
10
|
+
-# actual email content, rendered in an iframe to prevent browser styles from interfering
|
11
|
+
= render 'rails_email_preview/emails/email_iframe'
|
data/lib/rails_email_preview.rb
CHANGED
@@ -18,4 +18,19 @@ module RailsEmailPreview
|
|
18
18
|
yield self
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
|
+
# = Editing settings
|
23
|
+
# edit link is rendered inside an iframe, so these options are provided for simple styling
|
24
|
+
mattr_accessor :edit_link_text
|
25
|
+
self.edit_link_text = '✎ Edit Text'
|
26
|
+
mattr_accessor :edit_link_style
|
27
|
+
self.edit_link_style = <<-CSS.strip.gsub(/\n+/m, ' ')
|
28
|
+
display: block;
|
29
|
+
font-family: "Monaco", "Helvetica", sans-serif;
|
30
|
+
color: #7a4b8a;
|
31
|
+
border: 2px dashed #7a4b8a;
|
32
|
+
font-size: 20px;
|
33
|
+
padding: 8px 12px;
|
34
|
+
margin-top: 1em;
|
35
|
+
CSS
|
36
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# simply require this file to enable Comfortable Mexican Sofa integration
|
2
|
+
# read more https://github.com/glebm/rails_email_preview/wiki/Edit-Emails-with-Comfortable-Mexican-Sofa
|
3
|
+
|
4
|
+
module RailsEmailPreview
|
5
|
+
module Integrations
|
6
|
+
module ComfortableMexicanSofa
|
7
|
+
# returns CMS identifier for the current email
|
8
|
+
# ModerationMailer#approve -> "moderation_mailer-approve"
|
9
|
+
def cms_email_id
|
10
|
+
mailer = respond_to?(:controller) ? controller : self
|
11
|
+
"#{mailer.class.name.underscore}-#{action_name}"
|
12
|
+
end
|
13
|
+
|
14
|
+
# Will return snippet title interpolated with passed variables
|
15
|
+
# E.g, for snippet with title "Welcome, %{name}!"
|
16
|
+
# cms_email_subject(name: "Alice") #=> "Welcome, Alice!"
|
17
|
+
def cms_email_subject(interpolation = {})
|
18
|
+
snippet_id = "email-#{cms_email_id}"
|
19
|
+
[I18n.locale, I18n.default_locale].compact.each do |locale|
|
20
|
+
site = Cms::Site.find_by_locale(I18n.locale)
|
21
|
+
snippet = site.snippets.find_by_identifier(snippet_id)
|
22
|
+
|
23
|
+
# interpolate even if keys/values are missing
|
24
|
+
title = snippet.label.to_s
|
25
|
+
interpolation = interpolation.stringify_keys
|
26
|
+
# set all missing values to ''
|
27
|
+
title.scan(/%{([^}]+)}/) { |key| interpolation[key] ||= ''}
|
28
|
+
# remove all missing keys
|
29
|
+
subject = title % interpolation.delete_if { |k, v| title !~ /%{#{k}}/ }
|
30
|
+
|
31
|
+
return subject if subject.present?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Will return snippet content, passing through Kramdown
|
36
|
+
# Will also render an "✎ Edit text" link if used from
|
37
|
+
def cms_email_snippet(snippet_id = self.cms_email_id)
|
38
|
+
snippet_id = "email-#{snippet_id}"
|
39
|
+
site = Cms::Site.find_by_locale(I18n.locale)
|
40
|
+
|
41
|
+
# Fallback default locale: (# prefill)
|
42
|
+
unless (content = cms_snippet_content(snippet_id, site).presence)
|
43
|
+
default_site = Cms::Site.find_by_locale(I18n.default_locale)
|
44
|
+
fallback_content = cms_snippet_content(snippet_id, default_site).presence
|
45
|
+
end
|
46
|
+
result = content || fallback_content
|
47
|
+
|
48
|
+
# If rendering in preview from admin, add edit/create lnk
|
49
|
+
if caller.grep(/emails_controller/).present?
|
50
|
+
snippet = site.snippets.find_by_identifier(snippet_id)
|
51
|
+
|
52
|
+
|
53
|
+
cms_path = if snippet
|
54
|
+
unless content
|
55
|
+
fallback_snippet = default_site.snippets.find_by_identifier(snippet_id)
|
56
|
+
prefill_from_default = {label: fallback_snippet.label, content: fallback_snippet.content}
|
57
|
+
end
|
58
|
+
edit_cms_admin_site_snippet_path(site_id: site.id, id: snippet.id,
|
59
|
+
snippet: prefill_from_default || nil)
|
60
|
+
else
|
61
|
+
new_cms_admin_site_snippet_path(site_id: site.id, snippet: {
|
62
|
+
label: "#{snippet_id.sub('-', ' / ').humanize}",
|
63
|
+
identifier: snippet_id,
|
64
|
+
category_ids: [site.categories.find_by_label('email').try(:id)]
|
65
|
+
})
|
66
|
+
end
|
67
|
+
|
68
|
+
result += cms_edit_email_snippet_link(cms_path)
|
69
|
+
end
|
70
|
+
result
|
71
|
+
end
|
72
|
+
|
73
|
+
def cms_edit_email_snippet_link(path)
|
74
|
+
link_to(RailsEmailPreview.edit_link_text, path, style: RailsEmailPreview.edit_link_style, 'onClick' => '')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
ActionMailer::Base.module_eval do
|
81
|
+
include ::RailsEmailPreview::Integrations::ComfortableMexicanSofa
|
82
|
+
helper ::RailsEmailPreview::Integrations::ComfortableMexicanSofa
|
83
|
+
end
|
84
|
+
|
85
|
+
require 'comfortable_mexican_sofa'
|
86
|
+
ComfortableMexicanSofa::ViewHooks.add :header, 'integrations/cms/customize_cms_for_rails_email_preview'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_email_preview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Mazovetskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -68,8 +68,7 @@ dependencies:
|
|
68
68
|
version: '0'
|
69
69
|
description: |-
|
70
70
|
Implemented as a rails engine with a simple UI for previewing your app emails,
|
71
|
-
I18n support, easy premailer integration and editing via comfortable_mexican_sofa
|
72
|
-
(https://github.com/comfy/comfortable-mexican-sofa).
|
71
|
+
I18n support, easy premailer integration and editing integration via comfortable_mexican_sofa CMS.
|
73
72
|
email: glex.spb@gmail.com
|
74
73
|
executables: []
|
75
74
|
extensions: []
|
@@ -78,10 +77,15 @@ files:
|
|
78
77
|
- app/assets/stylesheets/rails_email_preview/application.css.sass
|
79
78
|
- app/controllers/rails_email_preview/application_controller.rb
|
80
79
|
- app/controllers/rails_email_preview/emails_controller.rb
|
80
|
+
- app/views/integrations/cms/_customize_cms_for_rails_email_preview.html.slim
|
81
81
|
- app/views/layouts/rails_email_preview/application.html.slim
|
82
|
+
- app/views/rails_email_preview/emails/_email_iframe.html.slim
|
83
|
+
- app/views/rails_email_preview/emails/_headers.html.slim
|
84
|
+
- app/views/rails_email_preview/emails/_options.html.slim
|
82
85
|
- app/views/rails_email_preview/emails/index.html.slim
|
83
86
|
- app/views/rails_email_preview/emails/show.html.slim
|
84
87
|
- lib/rails_email_preview/engine.rb
|
88
|
+
- lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb
|
85
89
|
- lib/rails_email_preview/version.rb
|
86
90
|
- lib/rails_email_preview.rb
|
87
91
|
- config/routes.rb
|