dynamic_table_helper.rb
3.56 KB
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
class DynamicTableHelper
extend(
ActionView::Helpers::TagHelper,
ActionView::Helpers::FormTagHelper,
ActionView::Helpers::FormOptionsHelper,
ActionView::Helpers::UrlHelper,
ApplicationHelper
)
COLLUMN_NAME = {
name: "name",
version: "version",
license: "license"
}
LABEL_TEXT = {
:name => _("Name"),
:version => _("Version"),
:license => _("License")
}
DATA = {
name: {
label: LABEL_TEXT[:name],
name: COLLUMN_NAME[:name]
},
version: {
label: LABEL_TEXT[:version],
name: COLLUMN_NAME[:version]
} ,
license: {
label: LABEL_TEXT[:license],
name: COLLUMN_NAME[:license],
delete: true
}
}
@@disabled = false
def self.table_html_structure data={}, disabled=false
@@disabled = disabled
Proc::new do
content_tag :table , generate_table_lines(data), :class => "dynamic-table"
end
end
def self.generate_table_lines data={}
@@model = data[:model_name]
@@field_name = data[:field_name]
@@hidden_label = data[:name][:value]
@@hidden_id = data[:name][:id]
row_data = prepare_row_data data
table_line_data = [
self.table_line(row_data[:name]),
self.table_line(row_data[:version])
]
if row_data[:license].has_key?(:value)
table_line_data << self.table_line(row_data[:license])
end
table_line_data.join()
end
def self.table_line row_data={}
unless row_data.blank?
content_tag :tr, [
self.label_collumn(row_data[:label]),
self.value_collumn(
row_data[:value],
row_data[:name],
row_data[:autocomplete],
row_data[:select_field],
row_data[:options]
),
self.hidden_collumn(row_data[:delete], row_data[:hidden])
].join()
end
end
def self.label_collumn label=""
content_tag :td, label_tag(label)
end
def self.value_collumn value="", name="", autocomplete=false, select_field=false, options=[]
html_options =
if autocomplete
{
:class => "#{@@model}_autocomplete",
:placeholder => _("Autocomplete field, type something")
}
else
{}
end
html_options[:disabled] = @@disabled
content = if select_field
select_tag("#{@@model}[][#{@@field_name}]", options, html_options)
elsif autocomplete
text_field_tag("#{@@model}_autocomplete", value, html_options)
else
text_field_tag("#{@@model}[][#{name}]", value, html_options)
end
content_tag :td, content
end
def self.hidden_collumn delete=false, hidden_data=false
value =
if @@disabled
nil
elsif delete
button_without_text(
:delete, _('Delete'), "#" , :class=>"delete-dynamic-table"
)
elsif hidden_data
hidden_field_tag(
"#{@@model}[][#{@@field_name}]",
@@hidden_id,
:class => "#{@@field_name}",
:data => {:label => @@hidden_label } #check how to get the name of an object of the current model
)
else
nil
end
content_tag(:td, value, :align => 'right')
end
def self.prepare_row_data data
row_data = {
name: DATA[:name],
version: DATA[:version],
license: DATA[:license]
}
row_data[:name].merge! data[:name]
row_data[:version].merge! data[:version]
row_data[:license].merge! data[:license] if data.has_key? :license
row_data
end
def self.models_as_tables models, callback, disabled=false
lambdas_list = []
models.map do |model|
send(callback, model, disabled)
end
end
end