standard_view 0.1.0 → 0.1.1

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +31 -10
  3. data/Rakefile +3 -8
  4. data/app/helpers/standard_view/application_helper.rb +38 -0
  5. data/app/helpers/standard_view/badge_helper.rb +22 -0
  6. data/app/helpers/standard_view/flash_helper.rb +16 -0
  7. data/app/helpers/standard_view/formatting_helper.rb +21 -0
  8. data/app/helpers/standard_view/masthead_helper.rb +27 -0
  9. data/app/helpers/standard_view/navigation_helper.rb +51 -0
  10. data/app/views/application/_attributes_card.html.erb +32 -0
  11. data/app/views/application/_flash_messages.html.erb +7 -0
  12. data/app/views/application/_icon.html.erb +5 -0
  13. data/app/views/application/_javascripts.html.erb +25 -0
  14. data/app/views/application/_list_item.html.erb +11 -0
  15. data/app/views/application/_masthead.html.erb +21 -0
  16. data/app/views/application/_masthead_brand.html.erb +1 -0
  17. data/app/views/application/_masthead_nav.html.erb +6 -0
  18. data/app/views/application/_masthead_nav_items.html.erb +8 -0
  19. data/app/views/application/_masthead_nav_menu.html.erb +8 -0
  20. data/app/views/application/_masthead_nav_menu_icon.html.erb +1 -0
  21. data/app/views/application/_masthead_nav_menu_items.html.erb +10 -0
  22. data/app/views/application/_stylesheet_font_awesome.html.erb +6 -0
  23. data/app/views/application/_stylesheets.html.erb +12 -0
  24. data/app/views/application/index.html.erb +1 -0
  25. data/app/views/application/show.html.erb +1 -0
  26. data/app/views/layouts/standard_view/application.html.erb +8 -7
  27. data/app/views/standard_view/_breadcrumbs.html.erb +48 -0
  28. data/app/views/standard_view/_index.html.erb +83 -0
  29. data/app/views/standard_view/_list_item.html.erb +29 -0
  30. data/app/views/standard_view/_navigation_aside.html.erb +5 -0
  31. data/app/views/standard_view/_navigation_tabs.html.erb +5 -0
  32. data/app/views/standard_view/_page_content.html.erb +8 -0
  33. data/app/views/standard_view/_paginated_collection.html.erb +8 -0
  34. data/app/views/standard_view/_show.html.erb +48 -0
  35. data/config/initializers/material.rb +9 -0
  36. data/config/initializers/simple_form.rb +184 -0
  37. data/config/initializers/simple_form_bootstrap.rb +457 -0
  38. data/config/initializers/will_paginate.rb +57 -0
  39. data/config/locales/en.yml +12 -0
  40. data/lib/standard_view/engine.rb +11 -0
  41. data/lib/standard_view/version.rb +3 -1
  42. data/lib/standard_view.rb +7 -3
  43. metadata +169 -21
  44. data/app/assets/config/standard_view_manifest.js +0 -2
  45. data/app/assets/javascripts/standard_view/application.js +0 -14
  46. data/app/assets/stylesheets/standard_view/application.css +0 -15
  47. data/app/controllers/standard_view/application_controller.rb +0 -5
  48. data/app/jobs/standard_view/application_job.rb +0 -4
  49. data/app/mailers/standard_view/application_mailer.rb +0 -6
  50. data/app/models/standard_view/application_record.rb +0 -5
@@ -0,0 +1,5 @@
1
+ <nav id="navigation-tabs" class="mb-3">
2
+ <ul class="nav nav-tabs">
3
+ <%= content_for(:navigation_tabs) %>
4
+ </ul>
5
+ </nav>
@@ -0,0 +1,8 @@
1
+ <% if content_for?(:navigation_aside) %>
2
+ <div class="row">
3
+ <aside class="col-lg-3 mb-3"><%= render "standard_view/navigation_aside" %></aside>
4
+ <div class="col-lg-9"><%= content_for(:page_content) %></div>
5
+ </div>
6
+ <% else %>
7
+ <%= content_for(:page_content) %>
8
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <% if list.any? %>
2
+ <nav class="list-group mb-3"><%= render list, cache: true %></nav>
3
+ <%= will_paginate list, renderer: WillPaginate::ActionView::Bootstrap4LinkRenderer %>
4
+ <% elsif local_assigns[:is_filtered] %>
5
+ <div class="alert alert-danger"><%= t(".filtered_out") %></div>
6
+ <% else %>
7
+ <div class="alert alert-warning"><%= t(".empty") %></div>
8
+ <% end %>
@@ -0,0 +1,48 @@
1
+ <%# For the good-spirited and impossibly lazy developer, we attempt to jump-start with no code, assuming conventions. %>
2
+ <% if local_assigns[:material].nil? %>
3
+ <% record = "#{controller_name.singularize.camelize}".constantize.find(params[:id]) if local_assigns[:record].nil? %>
4
+ <% material = Material::Base.for(record) %>
5
+ <% end %>
6
+
7
+ <%# Title must remain outside the cache block or it will not be assigned properly (since it affects the page layout) %>
8
+ <% content_for(:title) { material.title } %>
9
+
10
+ <% cache material do %>
11
+ <% if lookup_context.template_exists?("navigation_tabs", controller_name, true) %>
12
+ <% content_for(:navigation_tabs) { render "navigation_tabs", material: material } %>
13
+ <% elsif lookup_context.template_exists?("navigation_aside", controller_name, true) %>
14
+ <% content_for(:navigation_aside) { render "navigation_aside", material: material } %>
15
+ <% end %>
16
+
17
+ <%= content_tag :main, id: "#{material.parameterized_title}-show", class: "container" do %>
18
+ <header>
19
+ <%= render "standard_view/breadcrumbs", material: material %>
20
+
21
+ <h5 class="text-muted"><%= heading_for_model material %></h5>
22
+
23
+ <% content_for(:header_title) { material.header_title } unless content_for?(:header_title) %>
24
+ <h1 class="mb-3"><%= content_for(:header_title) %></h1>
25
+
26
+ <%= content_for(:header_content) if content_for?(:header_content) %>
27
+
28
+ <%= render "standard_view/navigation_tabs" if content_for?(:navigation_tabs) %>
29
+ </header>
30
+
31
+ <%= content_tag(:hr) unless content_for?(:navigation_tabs) %>
32
+
33
+ <% unless content_for?(:page_content) %>
34
+ <% content_for(:page_content) do %>
35
+ <div class="row">
36
+ <% if lookup_context.template_exists?("content", controller_name, true) %>
37
+ <div class="col-xl-7 mb-3"><%= render "content", material: material %></div>
38
+ <div class="col-xl-5"><%= render "attributes_card", material: material %></div>
39
+ <% else %>
40
+ <div class="col-12"><%= render "attributes_card", material: material %></div>
41
+ <% end %>
42
+ </div>
43
+ <% end %>
44
+ <% end %>
45
+
46
+ <%= render "standard_view/page_content" %>
47
+ <% end %>
48
+ <% end %>
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Material
4
+ class Base
5
+ def to_partial_path
6
+ "application/list_item"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,184 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "simple_form"
4
+
5
+ # Uncomment this and change the path if necessary to include your own
6
+ # components.
7
+ # See https://github.com/plataformatec/simple_form#custom-components to know
8
+ # more about custom components.
9
+ # Dir[Rails.root.join('lib/components/**/*.rb')].each { |f| require f }
10
+ #
11
+ # Use this setup block to configure all options available in SimpleForm.
12
+ SimpleForm.setup do |config|
13
+ # Wrappers are used by the form builder to generate a
14
+ # complete input. You can remove any component from the
15
+ # wrapper, change the order or even add your own to the
16
+ # stack. The options given below are used to wrap the
17
+ # whole input.
18
+ config.wrappers :default, class: :input,
19
+ hint_class: :field_with_hint, error_class: :field_with_errors, valid_class: :field_without_errors do |b|
20
+ ## Extensions enabled by default
21
+ # Any of these extensions can be disabled for a
22
+ # given input by passing: `f.input EXTENSION_NAME => false`.
23
+ # You can make any of these extensions optional by
24
+ # renaming `b.use` to `b.optional`.
25
+
26
+ # Determines whether to use HTML5 (:email, :url, ...)
27
+ # and required attributes
28
+ b.use :html5
29
+
30
+ # Calculates placeholders automatically from I18n
31
+ # You can also pass a string as f.input placeholder: "Placeholder"
32
+ b.use :placeholder
33
+
34
+ ## Optional extensions
35
+ # They are disabled unless you pass `f.input EXTENSION_NAME => true`
36
+ # to the input. If so, they will retrieve the values from the model
37
+ # if any exists. If you want to enable any of those
38
+ # extensions by default, you can change `b.optional` to `b.use`.
39
+
40
+ # Calculates maxlength from length validations for string inputs
41
+ # and/or database column lengths
42
+ b.optional :maxlength
43
+
44
+ # Calculate minlength from length validations for string inputs
45
+ b.optional :minlength
46
+
47
+ # Calculates pattern from format validations for string inputs
48
+ b.optional :pattern
49
+
50
+ # Calculates min and max from length validations for numeric inputs
51
+ b.optional :min_max
52
+
53
+ # Calculates readonly automatically from readonly attributes
54
+ b.optional :readonly
55
+
56
+ ## Inputs
57
+ # b.use :input, class: 'input', error_class: 'is-invalid', valid_class: 'is-valid'
58
+ b.use :label_input
59
+ b.use :hint, wrap_with: { tag: :span, class: :hint }
60
+ b.use :error, wrap_with: { tag: :span, class: :error }
61
+
62
+ ## full_messages_for
63
+ # If you want to display the full error message for the attribute, you can
64
+ # use the component :full_error, like:
65
+ #
66
+ # b.use :full_error, wrap_with: { tag: :span, class: :error }
67
+ end
68
+
69
+ # The default wrapper to be used by the FormBuilder.
70
+ config.default_wrapper = :default
71
+
72
+ # Define the way to render check boxes / radio buttons with labels.
73
+ # Defaults to :nested for bootstrap config.
74
+ # inline: input + label
75
+ # nested: label > input
76
+ config.boolean_style = :nested
77
+
78
+ # Default class for buttons
79
+ config.button_class = 'btn'
80
+
81
+ # Method used to tidy up errors. Specify any Rails Array method.
82
+ # :first lists the first message for each field.
83
+ # Use :to_sentence to list all errors for each field.
84
+ # config.error_method = :first
85
+
86
+ # Default tag used for error notification helper.
87
+ config.error_notification_tag = :div
88
+
89
+ # CSS class to add for error notification helper.
90
+ config.error_notification_class = 'error_notification'
91
+
92
+ # ID to add for error notification helper.
93
+ # config.error_notification_id = nil
94
+
95
+ # Series of attempts to detect a default label method for collection.
96
+ # config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
97
+
98
+ # Series of attempts to detect a default value method for collection.
99
+ # config.collection_value_methods = [ :id, :to_s ]
100
+
101
+ # You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
102
+ # config.collection_wrapper_tag = nil
103
+
104
+ # You can define the class to use on all collection wrappers. Defaulting to none.
105
+ # config.collection_wrapper_class = nil
106
+
107
+ # You can wrap each item in a collection of radio/check boxes with a tag,
108
+ # defaulting to :span.
109
+ # config.item_wrapper_tag = :span
110
+
111
+ # You can define a class to use in all item wrappers. Defaulting to none.
112
+ # config.item_wrapper_class = nil
113
+
114
+ # How the label text should be generated altogether with the required text.
115
+ # config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }
116
+
117
+ # You can define the class to use on all labels. Default is nil.
118
+ # config.label_class = nil
119
+
120
+ # You can define the default class to be used on forms. Can be overriden
121
+ # with `html: { :class }`. Defaulting to none.
122
+ # config.default_form_class = nil
123
+
124
+ # You can define which elements should obtain additional classes
125
+ # config.generate_additional_classes_for = [:wrapper, :label, :input]
126
+
127
+ # Whether attributes are required by default (or not). Default is true.
128
+ # config.required_by_default = true
129
+
130
+ # Tell browsers whether to use the native HTML5 validations (novalidate form option).
131
+ # These validations are enabled in SimpleForm's internal config but disabled by default
132
+ # in this configuration, which is recommended due to some quirks from different browsers.
133
+ # To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations,
134
+ # change this configuration to true.
135
+ config.browser_validations = false
136
+
137
+ # Collection of methods to detect if a file type was given.
138
+ # config.file_methods = [ :mounted_as, :file?, :public_filename, :attached? ]
139
+
140
+ # Custom mappings for input types. This should be a hash containing a regexp
141
+ # to match as key, and the input type that will be used when the field name
142
+ # matches the regexp as value.
143
+ # config.input_mappings = { /count/ => :integer }
144
+
145
+ # Custom wrappers for input types. This should be a hash containing an input
146
+ # type as key and the wrapper that will be used for all inputs with specified type.
147
+ # config.wrapper_mappings = { string: :prepend }
148
+
149
+ # Namespaces where SimpleForm should look for custom input classes that
150
+ # override default inputs.
151
+ # config.custom_inputs_namespaces << "CustomInputs"
152
+
153
+ # Default priority for time_zone inputs.
154
+ # config.time_zone_priority = nil
155
+
156
+ # Default priority for country inputs.
157
+ # config.country_priority = nil
158
+
159
+ # When false, do not use translations for labels.
160
+ # config.translate_labels = true
161
+
162
+ # Automatically discover new inputs in Rails' autoload path.
163
+ # config.inputs_discovery = true
164
+
165
+ # Cache SimpleForm inputs discovery
166
+ # config.cache_discovery = !Rails.env.development?
167
+
168
+ # Default class for inputs
169
+ # config.input_class = nil
170
+
171
+ # Define the default class of the input wrapper of the boolean input.
172
+ config.boolean_label_class = 'checkbox'
173
+
174
+ # Defines if the default input wrapper class should be included in radio
175
+ # collection wrappers.
176
+ # config.include_default_input_wrapper_class = true
177
+
178
+ # Defines which i18n scope will be used in Simple Form.
179
+ # config.i18n_scope = 'simple_form'
180
+
181
+ # Defines validation classes to the input_field. By default it's nil.
182
+ # config.input_field_valid_class = 'is-valid'
183
+ # config.input_field_error_class = 'is-invalid'
184
+ end