bootstrap-email 1.0.0.alpha1.2 → 1.0.0.alpha4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/core/bootstrap-email.scss +2 -0
- data/core/bootstrap-head.scss +89 -16
- data/core/scss/_selectors_for_utils.scss +24 -0
- data/core/scss/_utilities.scss +24 -4
- data/core/scss/components/_grid.scss +25 -17
- data/core/scss/components/_stack.scss +39 -0
- data/core/scss/utilities/_sizing.scss +21 -2
- data/core/scss/utilities/_typography.scss +4 -10
- data/core/scss/utilities/_valign.scss +5 -0
- data/core/templates/body.html +9 -0
- data/core/templates/{container.html.erb → container.html} +4 -4
- data/core/templates/div.html +3 -0
- data/core/templates/table-left.html +9 -0
- data/core/templates/table-to-tbody.html +5 -0
- data/core/templates/table-to-tr.html +7 -0
- data/core/templates/table.html +9 -0
- data/core/templates/td.html +3 -0
- data/core/templates/tr.html +5 -0
- data/lib/{bootstrap_email.rb → bootstrap-email.rb} +6 -3
- data/lib/bootstrap-email/bootstrap_email_cli.rb +6 -7
- data/lib/bootstrap-email/compiler.rb +50 -65
- data/lib/bootstrap-email/config.rb +50 -0
- data/lib/bootstrap-email/{components → converters}/alert.rb +1 -1
- data/lib/bootstrap-email/converters/align.rb +22 -0
- data/lib/bootstrap-email/{components → converters}/badge.rb +1 -1
- data/lib/bootstrap-email/converters/base.rb +63 -0
- data/lib/bootstrap-email/converters/block.rb +13 -0
- data/lib/bootstrap-email/converters/body.rb +10 -0
- data/lib/bootstrap-email/{components → converters}/button.rb +1 -1
- data/lib/bootstrap-email/{components → converters}/card.rb +3 -3
- data/lib/bootstrap-email/{components → converters}/color.rb +1 -1
- data/lib/bootstrap-email/{components → converters}/container.rb +1 -1
- data/lib/bootstrap-email/converters/force_encoding.rb +14 -0
- data/lib/bootstrap-email/converters/grid.rb +14 -0
- data/lib/bootstrap-email/converters/head_style.rb +33 -0
- data/lib/bootstrap-email/{components → converters}/hr.rb +2 -2
- data/lib/bootstrap-email/{components → converters}/margin.rb +3 -3
- data/lib/bootstrap-email/converters/padding.rb +16 -0
- data/lib/bootstrap-email/converters/paragraph.rb +13 -0
- data/lib/bootstrap-email/converters/preview_text.rb +18 -0
- data/lib/bootstrap-email/{components → converters}/spacer.rb +1 -1
- data/lib/bootstrap-email/{components → converters}/spacing.rb +5 -6
- data/lib/bootstrap-email/converters/stack.rb +30 -0
- data/lib/bootstrap-email/{components → converters}/table.rb +1 -1
- data/lib/bootstrap-email/converters/version_comment.rb +15 -0
- data/lib/bootstrap-email/erb.rb +9 -0
- data/lib/bootstrap-email/rails/action_mailer.rb +7 -2
- data/lib/bootstrap-email/sass_cache.rb +43 -26
- data/lib/bootstrap-email/setup.rb +27 -0
- metadata +44 -32
- data/core/templates/body.html.erb +0 -9
- data/core/templates/col.html.erb +0 -3
- data/core/templates/div.html.erb +0 -3
- data/core/templates/row.html.erb +0 -7
- data/core/templates/table-left.html.erb +0 -9
- data/core/templates/table.html.erb +0 -9
- data/lib/bootstrap-email/components/align.rb +0 -21
- data/lib/bootstrap-email/components/base.rb +0 -26
- data/lib/bootstrap-email/components/body.rb +0 -22
- data/lib/bootstrap-email/components/grid.rb +0 -14
- data/lib/bootstrap-email/components/padding.rb +0 -16
- data/lib/bootstrap-email/components/paragraph.rb +0 -24
- data/lib/bootstrap-email/initialize.rb +0 -1
data/core/templates/col.html.erb
DELETED
data/core/templates/div.html.erb
DELETED
data/core/templates/row.html.erb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module BootstrapEmail
|
2
|
-
module Component
|
3
|
-
class Align < Base
|
4
|
-
def build
|
5
|
-
['left', 'center', 'right'].each do |type|
|
6
|
-
each_node(".align-#{type}") do |node|
|
7
|
-
align_helper(node, type)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def align_helper(node, type)
|
13
|
-
if node.name != 'table'
|
14
|
-
node['class'] = node['class'].sub("align-#{type}", '')
|
15
|
-
node = node.replace(template('table', classes: "align-#{type}", contents: node.to_html))[0]
|
16
|
-
end
|
17
|
-
node['align'] = type
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module BootstrapEmail
|
2
|
-
module Component
|
3
|
-
class Base
|
4
|
-
attr_reader :doc
|
5
|
-
def initialize(doc)
|
6
|
-
@doc = doc
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.build(doc)
|
10
|
-
new(doc).build
|
11
|
-
end
|
12
|
-
|
13
|
-
def template(file, locals_hash = {})
|
14
|
-
locals_hash[:classes] = locals_hash[:classes].split.join(' ') if locals_hash[:classes]
|
15
|
-
namespace = OpenStruct.new(locals_hash)
|
16
|
-
template_html = File.read(File.expand_path("../../../core/templates/#{file}.html.erb", __dir__))
|
17
|
-
ERB.new(template_html).result(namespace.instance_eval { binding })
|
18
|
-
end
|
19
|
-
|
20
|
-
def each_node(css_lookup, &blk)
|
21
|
-
# sort by youngest child and traverse backwards up the tree
|
22
|
-
doc.css(css_lookup).sort_by { |n| n.ancestors.size }.reverse!.each(&blk)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module BootstrapEmail
|
2
|
-
module Component
|
3
|
-
class Body < Base
|
4
|
-
def build
|
5
|
-
each_node('body') do |node|
|
6
|
-
node.replace('<body>' + preview_text.to_s + template('body', classes: "#{node['class']} body", contents: node.inner_html) + '</body>')
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def preview_text
|
11
|
-
preview_node = doc.at_css('preview')
|
12
|
-
return if preview_node.nil?
|
13
|
-
|
14
|
-
# apply spacing after the text max of 100 characters so it doesn't show body text
|
15
|
-
preview_node.content += ' ' * [(100 - preview_node.content.length.to_i), 0].max
|
16
|
-
node = template('div', classes: 'preview', contents: preview_node.content)
|
17
|
-
preview_node.remove
|
18
|
-
node
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module BootstrapEmail
|
2
|
-
module Component
|
3
|
-
class Grid < Base
|
4
|
-
def build
|
5
|
-
each_node('.row') do |node|
|
6
|
-
node.replace(template('row', classes: node['class'], contents: node.inner_html))
|
7
|
-
end
|
8
|
-
each_node('*[class*=col]') do |node|
|
9
|
-
node.replace(template('col', classes: node['class'], contents: node.inner_html))
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module BootstrapEmail
|
2
|
-
module Component
|
3
|
-
class Padding < Base
|
4
|
-
def build
|
5
|
-
each_node('*[class*=p-], *[class*=pt-], *[class*=pr-], *[class*=pb-], *[class*=pl-], *[class*=px-], *[class*=py-]') do |node|
|
6
|
-
next if ['table', 'td', 'a'].include?(node.name)
|
7
|
-
|
8
|
-
padding_regex = /(p[trblxy]?-\d+)/
|
9
|
-
classes = node['class'].scan(padding_regex).join(' ')
|
10
|
-
node['class'] = node['class'].gsub(padding_regex, '')
|
11
|
-
node.replace(template('table', classes: classes, contents: node.to_html))
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module BootstrapEmail
|
2
|
-
module Component
|
3
|
-
class Paragraph < Base
|
4
|
-
def build
|
5
|
-
each_node('p') do |node|
|
6
|
-
next if margin?(node) || space_y?(node)
|
7
|
-
|
8
|
-
node['class'] ||= ''
|
9
|
-
node['class'] += 'mb-4'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def margin?(node)
|
16
|
-
node['class'].to_s.match?(/m[tby]{1}-(lg-)?\d+/)
|
17
|
-
end
|
18
|
-
|
19
|
-
def space_y?(node)
|
20
|
-
node.parent['class'].to_s.match?(/space-y-(lg-)?\d+/)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
Premailer::Adapter.use = :nokogiri_fast
|