-
Notifications
You must be signed in to change notification settings - Fork 20
/
application_form_builder.rb
92 lines (75 loc) · 2.31 KB
/
application_form_builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true
# This FormBuilder is the default for the application
# It'll use Bulma styling and build labelled form fields
# If you need a specific input not included here, please add it
class ApplicationFormBuilder < ActionView::Helpers::FormBuilder
delegate :tag, to: :@template
def labelled_check_box(method, *input_options, label_options: {})
tag.div(class: "field") do
check_box(method, *input_options) +
label(method, label_options)
end
end
def labelled_collection_select(method, *input_options, label_options: {})
form_controls(method, label_options) do
collection_select(method, *input_options)
end
end
def labelled_number_field(method, label_options: {}, input_options: {})
form_controls(method, label_options) do
number_field(method, input_options)
end
end
def labelled_select(method, *input_options, label_options: {})
form_controls(method, label_options) do
select(method, *input_options)
end
end
def labelled_text_area(method, label_options: {}, input_options: {})
form_controls(method, label_options) do
text_area(method, input_options)
end
end
def labelled_text_field(method, label_options: {}, input_options: {})
form_controls(method, label_options) do
text_field(method, input_options)
end
end
# Field Overrides
def email_field(method, options = {})
super(method, options.merge(class: "input"))
end
def number_field(method, options = {})
super(method, options.merge(class: "input"))
end
def password_field(method, options = {})
super(method, options.merge(class: "input"))
end
def text_area(method, options = {})
super(method, options.merge(class: "textarea"))
end
def text_field(method, options = {})
super(method, options.merge(class: "input"))
end
# FormBuilder Overrides
def collection_select(*args)
tag.div class: "select" do
super(*args)
end
end
def select(*args)
tag.div class: "select" do
super(*args)
end
end
def submit(value = nil, options = {})
super(value, options.merge(class: "button is-primary"))
end
private
def form_controls(method, label_options, &block)
tag.div(class: "field") do
label(method, label_options) +
tag.div(class: "control", &block)
end
end
end