Skip to content

Commit 7dae7c1

Browse files
committed
add gem simple_form & vews associed
1 parent a97b6ff commit 7dae7c1

File tree

5 files changed

+374
-0
lines changed

5 files changed

+374
-0
lines changed

app/views/pins/_form.html.haml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
= simple_form_for @pin, html: { multipart: true } do |f|
2+
- if @pin.errors.any?
3+
#errors
4+
%h2
5+
= pluralize(@pin.errors.count, "error")
6+
prevented this Pin from saving
7+
%ul
8+
- @pin.errors.full_messages.each do |msg|
9+
%li= msg
10+
.form-group
11+
= f.input :title, input_html: { class: 'form-control' }
12+
13+
.form-group
14+
= f.input :description, input_html: { class: 'form-control' }
15+
16+
= f.button :submit, class: "btn btn-primary"

config/initializers/simple_form.rb

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# Use this setup block to configure all options available in SimpleForm.
2+
SimpleForm.setup do |config|
3+
# Wrappers are used by the form builder to generate a
4+
# complete input. You can remove any component from the
5+
# wrapper, change the order or even add your own to the
6+
# stack. The options given below are used to wrap the
7+
# whole input.
8+
config.wrappers :default, class: :input,
9+
hint_class: :field_with_hint, error_class: :field_with_errors do |b|
10+
## Extensions enabled by default
11+
# Any of these extensions can be disabled for a
12+
# given input by passing: `f.input EXTENSION_NAME => false`.
13+
# You can make any of these extensions optional by
14+
# renaming `b.use` to `b.optional`.
15+
16+
# Determines whether to use HTML5 (:email, :url, ...)
17+
# and required attributes
18+
b.use :html5
19+
20+
# Calculates placeholders automatically from I18n
21+
# You can also pass a string as f.input placeholder: "Placeholder"
22+
b.use :placeholder
23+
24+
## Optional extensions
25+
# They are disabled unless you pass `f.input EXTENSION_NAME => true`
26+
# to the input. If so, they will retrieve the values from the model
27+
# if any exists. If you want to enable any of those
28+
# extensions by default, you can change `b.optional` to `b.use`.
29+
30+
# Calculates maxlength from length validations for string inputs
31+
b.optional :maxlength
32+
33+
# Calculates pattern from format validations for string inputs
34+
b.optional :pattern
35+
36+
# Calculates min and max from length validations for numeric inputs
37+
b.optional :min_max
38+
39+
# Calculates readonly automatically from readonly attributes
40+
b.optional :readonly
41+
42+
## Inputs
43+
b.use :label_input
44+
b.use :hint, wrap_with: { tag: :span, class: :hint }
45+
b.use :error, wrap_with: { tag: :span, class: :error }
46+
47+
## full_messages_for
48+
# If you want to display the full error message for the attribute, you can
49+
# use the component :full_error, like:
50+
#
51+
# b.use :full_error, wrap_with: { tag: :span, class: :error }
52+
end
53+
54+
# The default wrapper to be used by the FormBuilder.
55+
config.default_wrapper = :default
56+
57+
# Define the way to render check boxes / radio buttons with labels.
58+
# Defaults to :nested for bootstrap config.
59+
# inline: input + label
60+
# nested: label > input
61+
config.boolean_style = :nested
62+
63+
# Default class for buttons
64+
config.button_class = 'btn'
65+
66+
# Method used to tidy up errors. Specify any Rails Array method.
67+
# :first lists the first message for each field.
68+
# Use :to_sentence to list all errors for each field.
69+
# config.error_method = :first
70+
71+
# Default tag used for error notification helper.
72+
config.error_notification_tag = :div
73+
74+
# CSS class to add for error notification helper.
75+
config.error_notification_class = 'error_notification'
76+
77+
# ID to add for error notification helper.
78+
# config.error_notification_id = nil
79+
80+
# Series of attempts to detect a default label method for collection.
81+
# config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
82+
83+
# Series of attempts to detect a default value method for collection.
84+
# config.collection_value_methods = [ :id, :to_s ]
85+
86+
# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
87+
# config.collection_wrapper_tag = nil
88+
89+
# You can define the class to use on all collection wrappers. Defaulting to none.
90+
# config.collection_wrapper_class = nil
91+
92+
# You can wrap each item in a collection of radio/check boxes with a tag,
93+
# defaulting to :span.
94+
# config.item_wrapper_tag = :span
95+
96+
# You can define a class to use in all item wrappers. Defaulting to none.
97+
# config.item_wrapper_class = nil
98+
99+
# How the label text should be generated altogether with the required text.
100+
# config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }
101+
102+
# You can define the class to use on all labels. Default is nil.
103+
# config.label_class = nil
104+
105+
# You can define the default class to be used on forms. Can be overriden
106+
# with `html: { :class }`. Defaulting to none.
107+
# config.default_form_class = nil
108+
109+
# You can define which elements should obtain additional classes
110+
# config.generate_additional_classes_for = [:wrapper, :label, :input]
111+
112+
# Whether attributes are required by default (or not). Default is true.
113+
# config.required_by_default = true
114+
115+
# Tell browsers whether to use the native HTML5 validations (novalidate form option).
116+
# These validations are enabled in SimpleForm's internal config but disabled by default
117+
# in this configuration, which is recommended due to some quirks from different browsers.
118+
# To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations,
119+
# change this configuration to true.
120+
config.browser_validations = false
121+
122+
# Collection of methods to detect if a file type was given.
123+
# config.file_methods = [ :mounted_as, :file?, :public_filename ]
124+
125+
# Custom mappings for input types. This should be a hash containing a regexp
126+
# to match as key, and the input type that will be used when the field name
127+
# matches the regexp as value.
128+
# config.input_mappings = { /count/ => :integer }
129+
130+
# Custom wrappers for input types. This should be a hash containing an input
131+
# type as key and the wrapper that will be used for all inputs with specified type.
132+
# config.wrapper_mappings = { string: :prepend }
133+
134+
# Namespaces where SimpleForm should look for custom input classes that
135+
# override default inputs.
136+
# config.custom_inputs_namespaces << "CustomInputs"
137+
138+
# Default priority for time_zone inputs.
139+
# config.time_zone_priority = nil
140+
141+
# Default priority for country inputs.
142+
# config.country_priority = nil
143+
144+
# When false, do not use translations for labels.
145+
# config.translate_labels = true
146+
147+
# Automatically discover new inputs in Rails' autoload path.
148+
# config.inputs_discovery = true
149+
150+
# Cache SimpleForm inputs discovery
151+
# config.cache_discovery = !Rails.env.development?
152+
153+
# Default class for inputs
154+
# config.input_class = nil
155+
156+
# Define the default class of the input wrapper of the boolean input.
157+
config.boolean_label_class = 'checkbox'
158+
159+
# Defines if the default input wrapper class should be included in radio
160+
# collection wrappers.
161+
# config.include_default_input_wrapper_class = true
162+
163+
# Defines which i18n scope will be used in Simple Form.
164+
# config.i18n_scope = 'simple_form'
165+
end
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# Use this setup block to configure all options available in SimpleForm.
2+
SimpleForm.setup do |config|
3+
config.error_notification_class = 'alert alert-danger'
4+
config.button_class = 'btn btn-default'
5+
config.boolean_label_class = nil
6+
7+
config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
8+
b.use :html5
9+
b.use :placeholder
10+
b.optional :maxlength
11+
b.optional :pattern
12+
b.optional :min_max
13+
b.optional :readonly
14+
b.use :label, class: 'control-label'
15+
16+
b.use :input, class: 'form-control'
17+
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
18+
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
19+
end
20+
21+
config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
22+
b.use :html5
23+
b.use :placeholder
24+
b.optional :maxlength
25+
b.optional :readonly
26+
b.use :label, class: 'control-label'
27+
28+
b.use :input
29+
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
30+
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
31+
end
32+
33+
config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
34+
b.use :html5
35+
b.optional :readonly
36+
37+
b.wrapper tag: 'div', class: 'checkbox' do |ba|
38+
ba.use :label_input
39+
end
40+
41+
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
42+
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
43+
end
44+
45+
config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
46+
b.use :html5
47+
b.optional :readonly
48+
b.use :label, class: 'control-label'
49+
b.use :input
50+
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
51+
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
52+
end
53+
54+
config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
55+
b.use :html5
56+
b.use :placeholder
57+
b.optional :maxlength
58+
b.optional :pattern
59+
b.optional :min_max
60+
b.optional :readonly
61+
b.use :label, class: 'col-sm-3 control-label'
62+
63+
b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
64+
ba.use :input, class: 'form-control'
65+
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
66+
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
67+
end
68+
end
69+
70+
config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
71+
b.use :html5
72+
b.use :placeholder
73+
b.optional :maxlength
74+
b.optional :readonly
75+
b.use :label, class: 'col-sm-3 control-label'
76+
77+
b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
78+
ba.use :input
79+
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
80+
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
81+
end
82+
end
83+
84+
config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
85+
b.use :html5
86+
b.optional :readonly
87+
88+
b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
89+
wr.wrapper tag: 'div', class: 'checkbox' do |ba|
90+
ba.use :label_input
91+
end
92+
93+
wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
94+
wr.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
95+
end
96+
end
97+
98+
config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
99+
b.use :html5
100+
b.optional :readonly
101+
102+
b.use :label, class: 'col-sm-3 control-label'
103+
104+
b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
105+
ba.use :input
106+
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
107+
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
108+
end
109+
end
110+
111+
config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
112+
b.use :html5
113+
b.use :placeholder
114+
b.optional :maxlength
115+
b.optional :pattern
116+
b.optional :min_max
117+
b.optional :readonly
118+
b.use :label, class: 'sr-only'
119+
120+
b.use :input, class: 'form-control'
121+
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
122+
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
123+
end
124+
125+
config.wrappers :multi_select, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
126+
b.use :html5
127+
b.optional :readonly
128+
b.use :label, class: 'control-label'
129+
b.wrapper tag: 'div', class: 'form-inline' do |ba|
130+
ba.use :input, class: 'form-control'
131+
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
132+
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
133+
end
134+
end
135+
# Wrappers for forms and inputs using the Bootstrap toolkit.
136+
# Check the Bootstrap docs (http://getbootstrap.com)
137+
# to learn about the different styles for forms and inputs,
138+
# buttons and other elements.
139+
config.default_wrapper = :vertical_form
140+
config.wrapper_mappings = {
141+
check_boxes: :vertical_radio_and_checkboxes,
142+
radio_buttons: :vertical_radio_and_checkboxes,
143+
file: :vertical_file_input,
144+
boolean: :vertical_boolean,
145+
datetime: :multi_select,
146+
date: :multi_select,
147+
time: :multi_select
148+
}
149+
end

config/locales/simple_form.en.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
en:
2+
simple_form:
3+
"yes": 'Yes'
4+
"no": 'No'
5+
required:
6+
text: 'required'
7+
mark: '*'
8+
# You can uncomment the line below if you need to overwrite the whole required html.
9+
# When using html, text and mark won't be used.
10+
# html: '<abbr title="required">*</abbr>'
11+
error_notification:
12+
default_message: "Please review the problems below:"
13+
# Examples
14+
# labels:
15+
# defaults:
16+
# password: 'Password'
17+
# user:
18+
# new:
19+
# email: 'E-mail to sign in.'
20+
# edit:
21+
# email: 'E-mail.'
22+
# hints:
23+
# defaults:
24+
# username: 'User name to sign in.'
25+
# password: 'No special characters, please.'
26+
# include_blanks:
27+
# defaults:
28+
# age: 'Rather not say'
29+
# prompts:
30+
# defaults:
31+
# age: 'Select your age'
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<%%= simple_form_for(@<%= singular_table_name %>) do |f| %>
2+
<%%= f.error_notification %>
3+
4+
<div class="form-inputs">
5+
<%- attributes.each do |attribute| -%>
6+
<%%= f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %> %>
7+
<%- end -%>
8+
</div>
9+
10+
<div class="form-actions">
11+
<%%= f.button :submit %>
12+
</div>
13+
<%% end %>

0 commit comments

Comments
 (0)