bootstrap-email 1.0.0.alpha1.2 → 1.0.0.alpha4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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