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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/core/bootstrap-email.scss +2 -0
  4. data/core/bootstrap-head.scss +89 -16
  5. data/core/scss/_selectors_for_utils.scss +24 -0
  6. data/core/scss/_utilities.scss +24 -4
  7. data/core/scss/components/_grid.scss +25 -17
  8. data/core/scss/components/_stack.scss +39 -0
  9. data/core/scss/utilities/_sizing.scss +21 -2
  10. data/core/scss/utilities/_typography.scss +4 -10
  11. data/core/scss/utilities/_valign.scss +5 -0
  12. data/core/templates/body.html +9 -0
  13. data/core/templates/{container.html.erb → container.html} +4 -4
  14. data/core/templates/div.html +3 -0
  15. data/core/templates/table-left.html +9 -0
  16. data/core/templates/table-to-tbody.html +5 -0
  17. data/core/templates/table-to-tr.html +7 -0
  18. data/core/templates/table.html +9 -0
  19. data/core/templates/td.html +3 -0
  20. data/core/templates/tr.html +5 -0
  21. data/lib/{bootstrap_email.rb → bootstrap-email.rb} +6 -3
  22. data/lib/bootstrap-email/bootstrap_email_cli.rb +6 -7
  23. data/lib/bootstrap-email/compiler.rb +50 -65
  24. data/lib/bootstrap-email/config.rb +50 -0
  25. data/lib/bootstrap-email/{components → converters}/alert.rb +1 -1
  26. data/lib/bootstrap-email/converters/align.rb +22 -0
  27. data/lib/bootstrap-email/{components → converters}/badge.rb +1 -1
  28. data/lib/bootstrap-email/converters/base.rb +63 -0
  29. data/lib/bootstrap-email/converters/block.rb +13 -0
  30. data/lib/bootstrap-email/converters/body.rb +10 -0
  31. data/lib/bootstrap-email/{components → converters}/button.rb +1 -1
  32. data/lib/bootstrap-email/{components → converters}/card.rb +3 -3
  33. data/lib/bootstrap-email/{components → converters}/color.rb +1 -1
  34. data/lib/bootstrap-email/{components → converters}/container.rb +1 -1
  35. data/lib/bootstrap-email/converters/force_encoding.rb +14 -0
  36. data/lib/bootstrap-email/converters/grid.rb +14 -0
  37. data/lib/bootstrap-email/converters/head_style.rb +33 -0
  38. data/lib/bootstrap-email/{components → converters}/hr.rb +2 -2
  39. data/lib/bootstrap-email/{components → converters}/margin.rb +3 -3
  40. data/lib/bootstrap-email/converters/padding.rb +16 -0
  41. data/lib/bootstrap-email/converters/paragraph.rb +13 -0
  42. data/lib/bootstrap-email/converters/preview_text.rb +18 -0
  43. data/lib/bootstrap-email/{components → converters}/spacer.rb +1 -1
  44. data/lib/bootstrap-email/{components → converters}/spacing.rb +5 -6
  45. data/lib/bootstrap-email/converters/stack.rb +30 -0
  46. data/lib/bootstrap-email/{components → converters}/table.rb +1 -1
  47. data/lib/bootstrap-email/converters/version_comment.rb +15 -0
  48. data/lib/bootstrap-email/erb.rb +9 -0
  49. data/lib/bootstrap-email/rails/action_mailer.rb +7 -2
  50. data/lib/bootstrap-email/sass_cache.rb +43 -26
  51. data/lib/bootstrap-email/setup.rb +27 -0
  52. metadata +44 -32
  53. data/core/templates/body.html.erb +0 -9
  54. data/core/templates/col.html.erb +0 -3
  55. data/core/templates/div.html.erb +0 -3
  56. data/core/templates/row.html.erb +0 -7
  57. data/core/templates/table-left.html.erb +0 -9
  58. data/core/templates/table.html.erb +0 -9
  59. data/lib/bootstrap-email/components/align.rb +0 -21
  60. data/lib/bootstrap-email/components/base.rb +0 -26
  61. data/lib/bootstrap-email/components/body.rb +0 -22
  62. data/lib/bootstrap-email/components/grid.rb +0 -14
  63. data/lib/bootstrap-email/components/padding.rb +0 -16
  64. data/lib/bootstrap-email/components/paragraph.rb +0 -24
  65. data/lib/bootstrap-email/initialize.rb +0 -1
@@ -1,9 +0,0 @@
1
- <table valign="top" class="<%= classes %>">
2
- <tbody>
3
- <tr>
4
- <td valign="top">
5
- <%= contents %>
6
- </td>
7
- </tr>
8
- </tbody>
9
- </table>
@@ -1,3 +0,0 @@
1
- <td class="<%= classes %>" align="left" valign="top">
2
- <%= contents %>
3
- </td>
@@ -1,3 +0,0 @@
1
- <div class="<%= classes %>">
2
- <%= contents %>
3
- </div>
@@ -1,7 +0,0 @@
1
- <table class="<%= classes %>">
2
- <tbody>
3
- <tr>
4
- <%= contents %>
5
- </tr>
6
- </tbody>
7
- </table>
@@ -1,9 +0,0 @@
1
- <table class="<%= classes %>" align="left">
2
- <tbody>
3
- <tr>
4
- <td>
5
- <%= contents %>
6
- </td>
7
- </tr>
8
- </tbody>
9
- </table>
@@ -1,9 +0,0 @@
1
- <table class="<%= classes %>">
2
- <tbody>
3
- <tr>
4
- <td>
5
- <%= contents %>
6
- </td>
7
- </tr>
8
- </tbody>
9
- </table>
@@ -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 += '&nbsp;' * [(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