bootstrap-email 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bootstrap-email.rb +23 -24
- data/lib/bootstrap-email/action_mailer.rb +5 -0
- data/lib/bootstrap-email/premailer_railtie.rb +5 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69618ffcd0a9d016bee9c0d8a820786536cd9584
|
4
|
+
data.tar.gz: 99ca47bbf429373499754c2a86aca8498ac6be20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e721a9c0d97bebbbce04b01206ac34297b4d32a2082b38a643e16d0d46cfd504b7907e6c6e3eb30ab4a987e0c5332f71920b19b317699e1db8c0e4cf4d8ba747
|
7
|
+
data.tar.gz: 5ba5af72c7c6d85b52cb4eb984ae5b1831be86e28954fa4e325219658e5d73d9481733796369770f709fa0de16beb022caceb06f681c042da4ff6bf6da8a3151
|
data/lib/bootstrap-email.rb
CHANGED
@@ -8,10 +8,10 @@ require 'rails'
|
|
8
8
|
|
9
9
|
module BootstrapEmail
|
10
10
|
class Compiler
|
11
|
-
|
12
11
|
def initialize mail
|
13
12
|
@mail = mail
|
14
|
-
|
13
|
+
@source = mail.html_part || mail
|
14
|
+
update_doc(@source.body.raw_source)
|
15
15
|
end
|
16
16
|
|
17
17
|
def update_doc source
|
@@ -42,10 +42,10 @@ module BootstrapEmail
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def inline_css!
|
45
|
-
@
|
45
|
+
@source.body = @doc.to_html
|
46
46
|
@mail = Premailer::Rails::Hook.perform(@mail)
|
47
47
|
@mail.header[:skip_premailer] = true
|
48
|
-
|
48
|
+
update_doc(@mail.html_part.body.raw_source)
|
49
49
|
end
|
50
50
|
|
51
51
|
def inject_head!
|
@@ -81,19 +81,19 @@ module BootstrapEmail
|
|
81
81
|
|
82
82
|
def button
|
83
83
|
each_node('.btn') do |node| # move all classes up and remove all classes from the element
|
84
|
-
node.replace(template('table',
|
84
|
+
node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.to_html))
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
def badge
|
89
89
|
each_node('.badge') do |node| # move all classes up and remove all classes from the element
|
90
|
-
node.replace(template('table-left',
|
90
|
+
node.replace(template('table-left', classes: node['class'], contents: node.delete('class') && node.to_html))
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
94
|
def alert
|
95
95
|
each_node('.alert') do |node| # move all classes up and remove all classes from the element
|
96
|
-
node.replace(template('table',
|
96
|
+
node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.to_html))
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -112,7 +112,7 @@ module BootstrapEmail
|
|
112
112
|
def align_helper node, klass, template
|
113
113
|
if node.name != 'table' # if it is already on a table, set the proprieties on the current table
|
114
114
|
node['class'] = node['class'].sub(klass, '')
|
115
|
-
node.replace(template("align-#{template}",
|
115
|
+
node.replace(template("align-#{template}", contents: node.to_html))
|
116
116
|
else
|
117
117
|
node['align'] = template
|
118
118
|
end
|
@@ -120,34 +120,34 @@ module BootstrapEmail
|
|
120
120
|
|
121
121
|
def card
|
122
122
|
each_node('.card') do |node| # move all classes up and remove all classes from element
|
123
|
-
node.replace(template('table',
|
123
|
+
node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.to_html))
|
124
124
|
end
|
125
125
|
each_node('.card-body') do |node| # move all classes up and remove all classes from element
|
126
|
-
node.replace(template('table',
|
126
|
+
node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.to_html))
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
130
|
def hr
|
131
131
|
each_node('hr') do |node| # drop hr in place of current
|
132
|
-
node.replace(template('hr',
|
132
|
+
node.replace(template('hr', classes: "hr #{node['class']}"))
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
136
|
def container
|
137
137
|
each_node('.container') do |node|
|
138
|
-
node.replace(template('container',
|
138
|
+
node.replace(template('container', classes: node['class'], contents: node.inner_html))
|
139
139
|
end
|
140
140
|
each_node('.container-fluid') do |node|
|
141
|
-
node.replace(template('table',
|
141
|
+
node.replace(template('table', classes: node['class'], contents: node.inner_html))
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
145
|
def grid
|
146
146
|
each_node('.row') do |node|
|
147
|
-
node.replace(template('row',
|
147
|
+
node.replace(template('row', classes: node['class'], contents: node.inner_html))
|
148
148
|
end
|
149
149
|
each_node('*[class*=col]') do |node|
|
150
|
-
node.replace(template('col',
|
150
|
+
node.replace(template('col', classes: node['class'], contents: node.inner_html))
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
@@ -157,7 +157,7 @@ module BootstrapEmail
|
|
157
157
|
padding_regex = /(p[trblxy]?-\d)/
|
158
158
|
classes = node['class'].scan(padding_regex).join(' ')
|
159
159
|
node['class'] = node['class'].gsub(padding_regex, '')
|
160
|
-
node.replace(template('table',
|
160
|
+
node.replace(template('table', classes: classes, contents: node.to_html))
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
@@ -169,11 +169,11 @@ module BootstrapEmail
|
|
169
169
|
node['class'] = node['class'].gsub(/(m[tby]{1}-(lg-)?\d)/, '')
|
170
170
|
html = ''
|
171
171
|
if top_class
|
172
|
-
html += template('div',
|
172
|
+
html += template('div', classes: "s-#{top_class.gsub(/m[ty]{1}-/, '')}", contents: nil)
|
173
173
|
end
|
174
174
|
html += node.to_html
|
175
175
|
if bottom_class
|
176
|
-
html += template('div',
|
176
|
+
html += template('div', classes: "s-#{bottom_class.gsub(/m[by]{1}-/, '')}", contents: nil)
|
177
177
|
end
|
178
178
|
node.replace(html)
|
179
179
|
end
|
@@ -189,7 +189,7 @@ module BootstrapEmail
|
|
189
189
|
'5' => (16 * 3)
|
190
190
|
}
|
191
191
|
each_node('*[class*=s-]') do |node|
|
192
|
-
temp = Nokogiri::HTML::DocumentFragment.parse(template('table',
|
192
|
+
temp = Nokogiri::HTML::DocumentFragment.parse(template('table', classes: node['class'] + ' w-100', contents: ' '))
|
193
193
|
temp.at_css('td')['height'] = spacers[node['class'].gsub(/s-/, '')].to_i
|
194
194
|
node.replace(temp)
|
195
195
|
end
|
@@ -197,7 +197,7 @@ module BootstrapEmail
|
|
197
197
|
|
198
198
|
def table
|
199
199
|
@doc.css('table').each do |node|
|
200
|
-
#border="0" cellpadding="0" cellspacing="0"
|
200
|
+
# border="0" cellpadding="0" cellspacing="0"
|
201
201
|
node['border'] = 0
|
202
202
|
node['cellpadding'] = 0
|
203
203
|
node['cellspacing'] = 0
|
@@ -206,7 +206,7 @@ module BootstrapEmail
|
|
206
206
|
|
207
207
|
def body
|
208
208
|
@doc.css('body').each do |node|
|
209
|
-
node.replace(
|
209
|
+
node.replace('<body>' + preview_text.to_s + template('body', classes: "#{node['class']} body", contents: node.inner_html.to_s) + '</body>')
|
210
210
|
end
|
211
211
|
end
|
212
212
|
|
@@ -214,13 +214,12 @@ module BootstrapEmail
|
|
214
214
|
preview_node = @doc.at_css('preview')
|
215
215
|
if preview_node.present?
|
216
216
|
# apply spacing after the text max of 100 characters so it doesn't show body text
|
217
|
-
preview_node.content +=
|
218
|
-
node = template('div',
|
217
|
+
preview_node.content += ' ' * (100 - preview_node.content.length.to_i)
|
218
|
+
node = template('div', classes: 'preview', contents: preview_node.content)
|
219
219
|
preview_node.remove
|
220
220
|
return node
|
221
221
|
end
|
222
222
|
end
|
223
|
-
|
224
223
|
end
|
225
224
|
end
|
226
225
|
|
@@ -5,4 +5,9 @@ class ActionMailer::Base
|
|
5
5
|
bootstrap = BootstrapEmail::Compiler.new(mail(*args) { |format| format.html { render layout: 'layouts/bootstrap-mailer.html.erb' } } )
|
6
6
|
bootstrap.perform_full_compile
|
7
7
|
end
|
8
|
+
|
9
|
+
def make_bootstrap_mail *args, &block
|
10
|
+
bootstrap = BootstrapEmail::Compiler.new(mail(*args, &block))
|
11
|
+
bootstrap.perform_full_compile
|
12
|
+
end
|
8
13
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootstrap-email
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Yamartino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: premailer-rails
|
@@ -87,8 +87,9 @@ files:
|
|
87
87
|
- lib/bootstrap-email.rb
|
88
88
|
- lib/bootstrap-email/action_mailer.rb
|
89
89
|
- lib/bootstrap-email/engine.rb
|
90
|
+
- lib/bootstrap-email/premailer_railtie.rb
|
90
91
|
- lib/bootstrap-email/version.rb
|
91
|
-
homepage: https://
|
92
|
+
homepage: https://bootstrapemail.com
|
92
93
|
licenses:
|
93
94
|
- MIT
|
94
95
|
metadata: {}
|