b4um_generators 0.1.0

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 (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +28 -0
  4. data/CHANGELOG.md +5 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.de.md +821 -0
  7. data/README.md +815 -0
  8. data/Rakefile +12 -0
  9. data/b4um_generators.gemspec +30 -0
  10. data/bin/console +11 -0
  11. data/bin/setup +8 -0
  12. data/lib/b4um_generators/version.rb +5 -0
  13. data/lib/b4um_generators.rb +8 -0
  14. data/lib/generators/b4um/bento/bento_generator.rb +81 -0
  15. data/lib/generators/b4um/bento/templates/_alternating.html.erb.tt +15 -0
  16. data/lib/generators/b4um/bento/templates/_bento.html.erb.tt +26 -0
  17. data/lib/generators/b4um/bento/templates/_grid.html.erb.tt +13 -0
  18. data/lib/generators/b4um/bento/templates/_list.html.erb.tt +15 -0
  19. data/lib/generators/b4um/comments/comments_generator.rb +259 -0
  20. data/lib/generators/b4um/comments/templates/_comments.html.erb.tt +63 -0
  21. data/lib/generators/b4um/comments/templates/comment.rb.tt +5 -0
  22. data/lib/generators/b4um/comments/templates/comments_controller.rb.tt +45 -0
  23. data/lib/generators/b4um/comments/templates/create_comments.rb.tt +14 -0
  24. data/lib/generators/b4um/controller/controller_generator.rb +397 -0
  25. data/lib/generators/b4um/help/help_generator.rb +755 -0
  26. data/lib/generators/b4um/infinite_scroll/infinite_scroll_generator.rb +199 -0
  27. data/lib/generators/b4um/infinite_scroll/templates/infinite_scroll_controller.js +61 -0
  28. data/lib/generators/b4um/install/install_generator.rb +492 -0
  29. data/lib/generators/b4um/install/templates/_cookie_consent.html.erb +27 -0
  30. data/lib/generators/b4um/install/templates/_footer.html.erb +17 -0
  31. data/lib/generators/b4um/install/templates/_hero.html.erb +33 -0
  32. data/lib/generators/b4um/install/templates/_navigation.html.erb +31 -0
  33. data/lib/generators/b4um/install/templates/_sitemap.html.erb +48 -0
  34. data/lib/generators/b4um/install/templates/_theme_switcher.html.erb +57 -0
  35. data/lib/generators/b4um/install/templates/b4um/badges.css +43 -0
  36. data/lib/generators/b4um/install/templates/b4um/base.css +42 -0
  37. data/lib/generators/b4um/install/templates/b4um/callouts.css +58 -0
  38. data/lib/generators/b4um/install/templates/b4um/cards.css +401 -0
  39. data/lib/generators/b4um/install/templates/b4um/comments.css +52 -0
  40. data/lib/generators/b4um/install/templates/b4um/cookie-consent.css +83 -0
  41. data/lib/generators/b4um/install/templates/b4um/empty-state.css +26 -0
  42. data/lib/generators/b4um/install/templates/b4um/flash.css +86 -0
  43. data/lib/generators/b4um/install/templates/b4um/footer.css +338 -0
  44. data/lib/generators/b4um/install/templates/b4um/forms.css +924 -0
  45. data/lib/generators/b4um/install/templates/b4um/hero.css +149 -0
  46. data/lib/generators/b4um/install/templates/b4um/layout.css +166 -0
  47. data/lib/generators/b4um/install/templates/b4um/lightbox.css +268 -0
  48. data/lib/generators/b4um/install/templates/b4um/navigation.css +257 -0
  49. data/lib/generators/b4um/install/templates/b4um/pagination.css +85 -0
  50. data/lib/generators/b4um/install/templates/b4um/resources.css +121 -0
  51. data/lib/generators/b4um/install/templates/b4um/search.css +41 -0
  52. data/lib/generators/b4um/install/templates/b4um/tables.css +67 -0
  53. data/lib/generators/b4um/install/templates/b4um/theme-switcher.css +178 -0
  54. data/lib/generators/b4um/install/templates/b4um/theme.css +132 -0
  55. data/lib/generators/b4um/install/templates/b4um.css +20 -0
  56. data/lib/generators/b4um/install/templates/b4um.yml +12 -0
  57. data/lib/generators/b4um/install/templates/b4um_helper.rb +27 -0
  58. data/lib/generators/b4um/install/templates/cookie_consent_controller.js +76 -0
  59. data/lib/generators/b4um/install/templates/dismissible_controller.js +7 -0
  60. data/lib/generators/b4um/install/templates/image_lightbox_controller.js +414 -0
  61. data/lib/generators/b4um/install/templates/image_preview_controller.js +85 -0
  62. data/lib/generators/b4um/install/templates/navigation_controller.js +25 -0
  63. data/lib/generators/b4um/install/templates/navigation_helper.rb +26 -0
  64. data/lib/generators/b4um/install/templates/sitemap_controller.js +35 -0
  65. data/lib/generators/b4um/install/templates/theme_controller.js +122 -0
  66. data/lib/generators/b4um/pagination/pagination_generator.rb +179 -0
  67. data/lib/generators/b4um/pagination/templates/_pagination.html.erb.tt +48 -0
  68. data/lib/generators/b4um/pagination/templates/pagination.rb +36 -0
  69. data/lib/generators/b4um/scaffold/scaffold_generator.rb +333 -0
  70. data/lib/generators/b4um/scaffold/templates/_bento.html.erb.tt +26 -0
  71. data/lib/generators/b4um/scaffold/templates/_form.html.erb.tt +218 -0
  72. data/lib/generators/b4um/scaffold/templates/_resource.html.erb.tt +144 -0
  73. data/lib/generators/b4um/scaffold/templates/_table.html.erb.tt +40 -0
  74. data/lib/generators/b4um/scaffold/templates/edit.html.erb.tt +21 -0
  75. data/lib/generators/b4um/scaffold/templates/index.html.erb.tt +24 -0
  76. data/lib/generators/b4um/scaffold/templates/new.html.erb.tt +17 -0
  77. data/lib/generators/b4um/scaffold/templates/show.html.erb.tt +31 -0
  78. data/lib/generators/b4um/search/search_generator.rb +165 -0
  79. data/lib/generators/b4um/search/templates/search.rb +34 -0
  80. data/lib/generators/b4um/search/templates/search_form.html.erb.tt +15 -0
  81. data/lib/generators/b4um/table/table_generator.rb +63 -0
  82. data/lib/generators/b4um/table/templates/_table.html.erb.tt +40 -0
  83. data/lib/generators/b4um/trix/templates/b4um_rich_text_helper.rb +58 -0
  84. data/lib/generators/b4um/trix/templates/b4um_trix.js +551 -0
  85. data/lib/generators/b4um/trix/trix_generator.rb +383 -0
  86. data/sig/b4um_generators.rbs +4 -0
  87. metadata +148 -0
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module B4umSearch
4
+ private
5
+
6
+ def b4um_search(scope, query)
7
+ return scope if query.blank?
8
+
9
+ searchable_columns = scope.klass.columns.select do |column|
10
+ %i[string text].include?(column.type)
11
+ end
12
+
13
+ return scope if searchable_columns.empty?
14
+
15
+ table_name = scope.klass.connection.quote_table_name(
16
+ scope.klass.table_name
17
+ )
18
+
19
+ conditions = searchable_columns.map do |column|
20
+ column_name = scope.klass.connection.quote_column_name(
21
+ column.name
22
+ )
23
+
24
+ "LOWER(#{table_name}.#{column_name}) LIKE :b4um_query"
25
+ end
26
+
27
+ pattern = "%#{ActiveRecord::Base.sanitize_sql_like(query.to_s.strip.downcase)}%"
28
+
29
+ scope.where(
30
+ conditions.join(" OR "),
31
+ b4um_query: pattern
32
+ )
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ <div class="b4um-search">
2
+ <%%= form_with url: request.path,
3
+ method: :get,
4
+ class: "b4um-search__form" do |form| %>
5
+ <div class="form-field">
6
+ <%%= form.search_field :q,
7
+ value: params[:q],
8
+ class: "form-input",
9
+ placeholder: " " %>
10
+ <%%= form.label :q, "Search", class: "form-label" %>
11
+ </div>
12
+
13
+ <%%= form.submit "Search", class: "button button--primary" %>
14
+ <%% end %>
15
+ </div>
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/generators"
4
+ require "rails/generators/named_base"
5
+
6
+ module B4um
7
+ module Generators
8
+ class TableGenerator < Rails::Generators::NamedBase
9
+ TableAttribute = Data.define(:name, :type)
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ argument :fields,
13
+ type: :array,
14
+ default: [],
15
+ banner: "field:type field:type"
16
+
17
+ class << self
18
+ def desc(_description = nil)
19
+ "Generates a B4UM table partial for an existing model."
20
+ end
21
+ end
22
+
23
+ def validate_model
24
+ return if File.exist?(model_path)
25
+
26
+ raise Thor::Error,
27
+ "Model not found: app/models/#{file_name}.rb"
28
+ end
29
+
30
+ def create_table_partial
31
+ template(
32
+ "_table.html.erb.tt",
33
+ File.join(
34
+ "app/views",
35
+ plural_table_name,
36
+ "_table.html.erb"
37
+ )
38
+ )
39
+ end
40
+
41
+ private
42
+
43
+ def table_attributes
44
+ fields.map do |field|
45
+ name, type = field.split(":", 2)
46
+
47
+ TableAttribute.new(
48
+ name,
49
+ (type || "string").to_sym
50
+ )
51
+ end
52
+ end
53
+
54
+ def model_path
55
+ File.join(
56
+ destination_root,
57
+ "app/models",
58
+ "#{file_name}.rb"
59
+ )
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,40 @@
1
+ <div class="b4um-table-wrapper">
2
+ <table class="b4um-table">
3
+ <thead>
4
+ <tr>
5
+ <% table_attributes.each do |attribute| -%>
6
+ <th><%= attribute.name.humanize %></th>
7
+ <% end -%>
8
+ <th>Actions</th>
9
+ </tr>
10
+ </thead>
11
+
12
+ <tbody id="<%= plural_table_name %>">
13
+ <%% <%= plural_table_name %>.each do |<%= file_name %>| %>
14
+ <tr>
15
+ <% table_attributes.each do |attribute| -%>
16
+ <td>
17
+ <% if attribute.name == "status" -%>
18
+ <span class="b4um-badge">
19
+ <%%= <%= file_name %>.<%= attribute.name %> %>
20
+ </span>
21
+ <% elsif attribute.type == :text -%>
22
+ <%%= truncate(<%= file_name %>.<%= attribute.name %>, length: 100) %>
23
+ <% else -%>
24
+ <%%= <%= file_name %>.<%= attribute.name %> %>
25
+ <% end -%>
26
+ </td>
27
+ <% end -%>
28
+
29
+ <td>
30
+ <div class="b4um-table__actions">
31
+ <%%= link_to "Show",
32
+ <%= file_name %>,
33
+ class: "button button--secondary" %>
34
+ </div>
35
+ </td>
36
+ </tr>
37
+ <%% end %>
38
+ </tbody>
39
+ </table>
40
+ </div>
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module B4umRichTextHelper
4
+ B4UM_RICH_TEXT_CONTAINERS = %w[div section article].freeze
5
+
6
+ def b4um_rich_text_preview(rich_text, length: 160)
7
+ return if rich_text.blank?
8
+
9
+ document = rich_text.body.fragment.source
10
+ first_element = document.element_children.first
11
+ heading = b4um_preview_heading(first_element)
12
+
13
+ plain_text = rich_text.to_plain_text.strip
14
+
15
+ if heading
16
+ heading_text = heading.text.strip
17
+ body_text = plain_text.delete_prefix(heading_text).strip
18
+
19
+ preview_parts = [
20
+ content_tag(
21
+ :strong,
22
+ heading_text,
23
+ class: "b4um-rich-text-preview__heading"
24
+ )
25
+ ]
26
+
27
+ if body_text.present?
28
+ preview_parts << content_tag(
29
+ :span,
30
+ truncate(body_text, length: length),
31
+ class: "b4um-rich-text-preview__text"
32
+ )
33
+ end
34
+
35
+ content_tag(
36
+ :span,
37
+ safe_join(preview_parts),
38
+ class: "b4um-rich-text-preview"
39
+ )
40
+ else
41
+ truncate(plain_text, length: length)
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def b4um_preview_heading(element)
48
+ return unless element
49
+
50
+ return element if element.name.match?(/\Ah[1-6]\z/)
51
+
52
+ return unless B4UM_RICH_TEXT_CONTAINERS.include?(element.name)
53
+
54
+ first_child = element.element_children.first
55
+
56
+ b4um_preview_heading(first_child)
57
+ end
58
+ end