drg_cms 0.6.1.4 → 0.6.1.9
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.
- checksums.yaml +4 -4
- data/README.md +203 -24
- data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
- data/app/assets/javascripts/drg_cms/drg_cms.js +229 -95
- data/app/assets/stylesheets/drg_cms/drg_cms.css +608 -542
- data/app/assets/stylesheets/drg_cms_application.css +1 -1
- data/app/assets/stylesheets/drg_cms_cms.css +1 -4
- data/app/controllers/cmsedit_controller.rb +54 -127
- data/app/controllers/dc_application_controller.rb +17 -2
- data/app/controllers/dc_common_controller.rb +13 -7
- data/app/controls/browse_models_control.rb +15 -26
- data/app/controls/cmsedit_control.rb +125 -0
- data/app/controls/dc_help_control.rb +13 -1
- data/app/controls/dc_page_control.rb +0 -1
- data/app/controls/dc_poll_result_control.rb +1 -1
- data/app/controls/dc_report.rb +1 -1
- data/app/controls/design_element_settings_control.rb +1 -1
- data/app/forms/all_options.yml +23 -7
- data/app/forms/cms_menu.yml +24 -24
- data/app/forms/dc_big_table.yml +0 -2
- data/app/forms/dc_big_table_value.yml +0 -2
- data/app/forms/dc_browse_fields.yml +13 -9
- data/app/forms/dc_design.yml +1 -2
- data/app/forms/dc_folder_permission.yml +0 -2
- data/app/forms/dc_help_1.yml +2 -1
- data/app/forms/dc_json_ld.yml +0 -3
- data/app/forms/dc_menu.yml +6 -12
- data/app/forms/dc_menu_item.yml +1 -3
- data/app/forms/dc_page.yml +1 -2
- data/app/forms/dc_policy.yml +2 -5
- data/app/forms/dc_poll.yml +10 -16
- data/app/forms/dc_poll_result_export.yml +1 -1
- data/app/forms/dc_seo.yml +1 -2
- data/app/forms/dc_simple_menu.yml +1 -2
- data/app/forms/dc_site.yml +5 -7
- data/app/helpers/cms_common_helper.rb +8 -6
- data/app/helpers/cms_edit_helper.rb +61 -53
- data/app/helpers/cms_helper.rb +78 -42
- data/app/helpers/cms_index_helper.rb +198 -137
- data/app/helpers/dc_application_helper.rb +65 -43
- data/app/models/concerns/dc_page_concern.rb +1 -1
- data/app/models/concerns/dc_site_concern.rb +9 -3
- data/app/models/dc_big_table.rb +2 -2
- data/app/models/dc_filter.rb +45 -37
- data/app/models/dc_json_ld.rb +1 -1
- data/app/models/dc_part.rb +19 -9
- data/app/models/dc_site.rb +0 -1
- data/app/models/dc_temp.rb +7 -0
- data/app/models/drgcms_form_fields/comment.rb +11 -2
- data/app/models/drgcms_form_fields/drgcms_field.rb +10 -4
- data/app/models/drgcms_form_fields/link_to.rb +1 -1
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +5 -5
- data/app/models/drgcms_form_fields/readonly.rb +3 -0
- data/app/models/drgcms_form_fields/select.rb +14 -14
- data/app/models/drgcms_form_fields/text_autocomplete.rb +19 -11
- data/app/renderers/dc_part_renderer.rb +1 -1
- data/app/renderers/dc_poll_renderer.rb +1 -1
- data/app/views/cmsedit/_edit_stuff.html.erb +12 -12
- data/app/views/cmsedit/_form.html.erb +3 -2
- data/app/views/cmsedit/_result.html.erb +21 -18
- data/app/views/cmsedit/login.html.erb +1 -1
- data/app/views/dc_common/paste_clipboard.html.erb +1 -1
- data/app/views/layouts/cms.html.erb +3 -5
- data/config/locales/drgcms_en.yml +5 -3
- data/config/locales/drgcms_sl.yml +5 -3
- data/config/locales/kaminari.yml +1 -1
- data/config/locales/models_sl.yml +1 -0
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +6 -12
- metadata +10 -5
- data/app/views/cmsedit/__remove_edit_stuff.js.erb +0 -6
- data/app/views/cmsedit/__show.html.erb +0 -21
@@ -50,12 +50,7 @@ def dc_actions_for_index
|
|
50
50
|
actions['standard'] = nil
|
51
51
|
end
|
52
52
|
|
53
|
-
|
54
|
-
html = %(
|
55
|
-
<form id="dc-action-menu">
|
56
|
-
<span class="dc-spinner">#{fa_icon('spinner lg spin')}</span>
|
57
|
-
<ul class="dc-action-menu">)
|
58
|
-
|
53
|
+
html_left, html_right = '', ''
|
59
54
|
# Remove actions settings and sort
|
60
55
|
only_actions = []
|
61
56
|
actions.each { |key, value| only_actions << [key, value] if key.class == Integer }
|
@@ -72,7 +67,7 @@ def dc_actions_for_index
|
|
72
67
|
action = 'link'
|
73
68
|
end
|
74
69
|
# if return_to is present link directly to URL
|
75
|
-
if action == 'link'
|
70
|
+
if action == 'link' && yaml['url']
|
76
71
|
url = yaml['url']
|
77
72
|
else
|
78
73
|
url['controller'] = yaml['controller'] if yaml['controller']
|
@@ -82,49 +77,57 @@ def dc_actions_for_index
|
|
82
77
|
url['control'] = yaml['control'] if yaml['control']
|
83
78
|
end
|
84
79
|
# html link options
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
code = case
|
80
|
+
html_options = yaml['html'] || {}
|
81
|
+
html_options['title'] = yaml['title'] if yaml['title']
|
82
|
+
case
|
89
83
|
# sort
|
90
|
-
when action == 'sort'
|
91
|
-
choices = [[
|
84
|
+
when action == 'sort'
|
85
|
+
choices = [%w[id id]]
|
92
86
|
if @form['index']['sort']
|
93
|
-
@form['index']['sort'].split(',').each do |
|
94
|
-
|
95
|
-
choices << [ t("helpers.label.#{@form['table']}.#{
|
87
|
+
@form['index']['sort'].split(',').each do |e|
|
88
|
+
e.strip!
|
89
|
+
choices << [ t("helpers.label.#{@form['table']}.#{e}"), e ]
|
96
90
|
end
|
97
91
|
end
|
98
|
-
|
99
|
-
|
100
|
-
|
92
|
+
data = t('drgcms.sort') + select('sort', 'sort', choices, { include_blank: true }, { class: 'dc-sort-select',
|
93
|
+
'data-table' => @form['table'], 'data-form' => CmsHelper.form_param(params)} )
|
94
|
+
html_right << %(<li><div class="dc-sort">#{data}</li>)
|
101
95
|
|
102
96
|
# filter
|
103
|
-
when action == 'filter'
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
97
|
+
when action == 'filter'
|
98
|
+
table = session[@form['table']]
|
99
|
+
url = table&.dig(:filter) ?
|
100
|
+
url_for(controller: 'cmsedit', action: 'run', control: 'cmsedit.filter_off', t: @form['table'], f: CmsHelper.form_param(params)) :
|
101
|
+
''
|
102
|
+
html_right << %(
|
103
|
+
<li>
|
104
|
+
<div class="dc-filter" title="#{DcFilter.title4_filter_off(table)}" data-url="#{url.html_safe}">
|
105
|
+
#{mi_icon(url.blank? ? 'search' : 'search_off') }#{DcFilter.menu_filter(self).html_safe}
|
106
|
+
</div>
|
107
|
+
</li>#{DcFilter.get_filter_field(self)}).html_safe
|
114
108
|
|
115
109
|
# new
|
116
|
-
when action == 'new'
|
110
|
+
when action == 'new'
|
117
111
|
caption = yaml['caption'] || 'drgcms.new'
|
118
|
-
|
112
|
+
html_options['class'] = 'dc-link'
|
113
|
+
html_left << "<li>#{dc_link_to(caption, 'add', url, html_options)}</li>"
|
114
|
+
|
115
|
+
when action == 'close'
|
116
|
+
html_left << %(<li><div class="dc-link" onclick="window.close();"'>#{fa_icon('close')} #{t('drgcms.close')}</div></li>)
|
117
|
+
|
118
|
+
when action == 'back'
|
119
|
+
html_left << %(<li><div class="dc-link" onclick="history.back();"'>#{fa_icon('arrow_back')} #{t('drgcms.back')}</div></li>)
|
119
120
|
|
120
121
|
# menu
|
121
|
-
when action == 'menu'
|
122
|
-
if options['caption']
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
122
|
+
when action == 'menu'
|
123
|
+
code = if options['caption']
|
124
|
+
caption = t(options['caption'], options['caption']) + ' ' + fa_icon('caret-down')
|
125
|
+
caption + eval(options['eval'])
|
126
|
+
else # when caption is false, provide own actions
|
127
|
+
eval(options['eval'])
|
128
|
+
end
|
129
|
+
html_left << %(<li><div class="dc-link">#{code}</div></li>)
|
130
|
+
|
128
131
|
=begin
|
129
132
|
# reorder
|
130
133
|
when action == 'reorder' then
|
@@ -136,27 +139,34 @@ def dc_actions_for_index
|
|
136
139
|
dc_link_to( caption, 'reorder', parms, method: :delete )
|
137
140
|
=end
|
138
141
|
when action == 'script'
|
139
|
-
|
140
|
-
next
|
142
|
+
html_left << dc_script_action(options)
|
141
143
|
|
142
144
|
when action == 'field'
|
143
|
-
|
144
|
-
next
|
145
|
+
html_right << dc_field_action(yaml)
|
145
146
|
|
146
|
-
when %w(ajax link window submit).include?(action)
|
147
|
-
|
148
|
-
next
|
147
|
+
when %w(ajax link window popup submit).include?(action)
|
148
|
+
html_left << dc_link_ajax_window_submit_action(options, nil)
|
149
149
|
|
150
150
|
else
|
151
|
-
caption = yaml
|
152
|
-
icon = yaml['icon']
|
153
|
-
|
151
|
+
caption = dc_get_caption(yaml) || t("drgcms.#{action}")
|
152
|
+
icon = yaml['icon'] || action
|
153
|
+
html_options['class'] = 'dc-link'
|
154
|
+
code = dc_link_to(caption, icon, url, html_options)
|
155
|
+
html_left << %(<li>#{code}</li>)
|
154
156
|
end
|
155
|
-
html << "<li class=\"dc-link dc-animate\">#{code}</li>"
|
156
|
-
html << DcFilter.get_filter_field(self) if action == 'filter'
|
157
157
|
end
|
158
|
-
|
159
|
-
|
158
|
+
|
159
|
+
%(
|
160
|
+
<form id="dc-action-menu">
|
161
|
+
<span class="dc-spinner">#{fa_icon('settings-o spin')}</span>
|
162
|
+
|
163
|
+
<div class="dc-action-menu">
|
164
|
+
<ul class="dc-left">#{html_left}</ul>
|
165
|
+
<ul class="dc-right">#{html_right}</ul>
|
166
|
+
</div>
|
167
|
+
<div style="clear: both;"></div>
|
168
|
+
</form>
|
169
|
+
).html_safe
|
160
170
|
end
|
161
171
|
|
162
172
|
############################################################################
|
@@ -164,53 +174,53 @@ end
|
|
164
174
|
############################################################################
|
165
175
|
def dc_div_filter
|
166
176
|
choices = []
|
167
|
-
filter =
|
177
|
+
filter = @form['index'] && @form['index']['filter'] ? @form['index']['filter'] + ',' : ''
|
168
178
|
filter << 'id as text_field' # filter id is added by default
|
169
179
|
filter.split(',').each do |f|
|
170
180
|
f.strip!
|
171
181
|
name = f.match(' as ') ? f.split(' ').first : f
|
172
182
|
# like another field on the form
|
173
|
-
if f.match(' like ')
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
choices << [ t("helpers.label.#{@form['table']}.#{name}", name), f ]
|
183
|
+
name, like, f = f.split(' ') if f.match(' like ')
|
184
|
+
choices << [ t("helpers.label.#{@form['table']}.#{name}", name), f ]
|
185
|
+
end
|
186
|
+
choices4_operators = t('drgcms.choices4_filter_operators').chomp.split(',').inject([]) do |r, v|
|
187
|
+
r << (v.match(':') ? v.split(':') : v )
|
179
188
|
end
|
180
|
-
choices4_operators = t('drgcms.choices4_filter_operators').chomp.split(',').inject([]) {|r,v| r << (v.match(':') ? v.split(':') : v )}
|
181
189
|
# currently selected options
|
182
|
-
if session[@form['table']]
|
190
|
+
if session[@form['table']] && session[@form['table']][:filter]
|
183
191
|
field_name, operators_value, dummy = session[@form['table']][:filter].split("\t")
|
184
192
|
else
|
185
193
|
field_name, operators_value = nil, nil
|
186
194
|
end
|
187
|
-
|
188
|
-
|
189
|
-
|
195
|
+
url_on = url_for(controller: 'cmsedit', action: :run, control: 'cmsedit.filter_on' ,
|
196
|
+
t: CmsHelper.table_param(params), f: CmsHelper.form_param(params), filter_input: 1)
|
197
|
+
url_off = url_for(controller: 'cmsedit', action: :run, control: 'cmsedit.filter_off',
|
198
|
+
t: CmsHelper.table_param(params), f: CmsHelper.form_param(params))
|
199
|
+
%(
|
190
200
|
<div id="drgcms_filter" class="div-hidden">
|
191
201
|
<h1>#{t('drgcms.filter_set')}</h1>
|
192
202
|
|
193
203
|
#{ select(nil, 'filter_field1', options_for_select(choices, field_name), { include_blank: true }) }
|
194
204
|
#{ select(nil, 'filter_oper', options_for_select(choices4_operators, operators_value)) }
|
195
205
|
<div class="dc-menu">
|
196
|
-
<div class="dc-link dc-
|
197
|
-
<div class="dc-link
|
206
|
+
<div class="dc-link dc-filter-set" data-url="#{url_on}">#{fa_icon('done')} #{t('drgcms.filter_on')}</div>
|
207
|
+
<div class="dc-link-ajax" data-url="#{url_off}">
|
208
|
+
#{mi_icon('close')}#{t('drgcms.filter_off')}
|
209
|
+
</div>
|
198
210
|
</div>
|
199
|
-
</div>
|
200
|
-
EOT
|
201
|
-
html.html_safe
|
211
|
+
</div>).html_safe
|
202
212
|
end
|
203
213
|
|
204
214
|
############################################################################
|
205
215
|
# Creates popup div for setting filter on result set header.
|
206
216
|
############################################################################
|
207
217
|
def dc_filter_popup
|
208
|
-
html = %
|
209
|
-
|
210
|
-
|
211
|
-
|
218
|
+
html = %(<div class="filter-popup" style="display: none;"><div>#{t('drgcms.filter_set')}</div><ul>)
|
219
|
+
url = url_for(controller: 'cmsedit', action: 'run', control: 'cmsedit.filter_on',
|
220
|
+
t: @form['table'], f: params['form_name'], filter_input: 1)
|
221
|
+
|
212
222
|
t('drgcms.choices4_filter_operators').chomp.split(',').each do |operator_choice|
|
213
|
-
caption,choice = operator_choice.split(':')
|
223
|
+
caption, choice = operator_choice.split(':')
|
214
224
|
html << %Q[<li data-operator="#{choice}" data-url="#{url}">#{caption}</li>]
|
215
225
|
end
|
216
226
|
html << "</ul></div>"
|
@@ -241,18 +251,20 @@ end
|
|
241
251
|
############################################################################
|
242
252
|
def dc_actions_column
|
243
253
|
actions = @form['result_set']['actions']
|
244
|
-
return [{}, 0] if actions.nil? || dc_dont?(actions)
|
254
|
+
return [{}, 0, false] if actions.nil? || dc_dont?(actions)
|
245
255
|
|
246
256
|
# standard actions
|
247
|
-
actions = {'standard' => true} if actions.class == String && actions == 'standard'
|
257
|
+
actions = { 'standard' => true } if actions.class == String && actions == 'standard'
|
248
258
|
std_actions = { 2 => 'edit', 5 => 'delete' }
|
249
259
|
if actions['standard']
|
250
260
|
actions.merge!(std_actions)
|
251
261
|
actions.delete('standard')
|
252
262
|
end
|
253
|
-
|
254
|
-
|
255
|
-
|
263
|
+
# check must be first action
|
264
|
+
has_check = actions.first[1] == 'check'
|
265
|
+
width = actions.size == 1 ? 22 : 44
|
266
|
+
width = 22 if actions.size > 2 and !has_check
|
267
|
+
[actions, width, has_check]
|
256
268
|
end
|
257
269
|
|
258
270
|
############################################################################
|
@@ -261,8 +273,8 @@ end
|
|
261
273
|
def dc_actions_column_for_footer
|
262
274
|
return '' unless @form['result_set']['actions']
|
263
275
|
|
264
|
-
ignore, width = dc_actions_column
|
265
|
-
%
|
276
|
+
ignore, width, ignore2 = dc_actions_column
|
277
|
+
%(<div class="dc-result-actions" style="width: #{width}px;"></div>).html_safe
|
266
278
|
end
|
267
279
|
|
268
280
|
############################################################################
|
@@ -272,57 +284,75 @@ def dc_actions_for_result(document)
|
|
272
284
|
actions = @form['result_set']['actions']
|
273
285
|
return '' if actions.nil? || @form['readonly']
|
274
286
|
|
275
|
-
actions, width = dc_actions_column()
|
276
|
-
|
277
|
-
|
278
|
-
|
287
|
+
actions, width, has_check = dc_actions_column()
|
288
|
+
has_sub_menu = actions.size > 2 || (has_check && actions.size > 1)
|
289
|
+
|
290
|
+
main_menu, sub_menu = '', ''
|
291
|
+
actions.sort_by(&:first).each do |num, action|
|
292
|
+
session[:form_processing] = "result_set:actions: #{num}=#{action}"
|
279
293
|
parms = @parms.clone
|
280
294
|
# if single definition simulate type parameter
|
281
|
-
yaml =
|
282
|
-
|
283
|
-
if %w(ajax link window submit).include?(yaml['type'])
|
295
|
+
yaml = action.class == String ? { 'type' => action } : action
|
296
|
+
|
297
|
+
if %w(ajax link window popup submit).include?(yaml['type'])
|
284
298
|
@record = document # otherwise document fields can't be used as parameters
|
285
|
-
html
|
299
|
+
html = dc_link_ajax_window_submit_action(yaml, document)
|
286
300
|
else
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
when
|
301
|
+
caption = dc_get_caption(yaml) || "drgcms.#{yaml['type']}"
|
302
|
+
title = t(yaml['help'] || caption, '')
|
303
|
+
caption = has_sub_menu ? t(caption, '') : nil
|
304
|
+
html = '<li>'
|
305
|
+
html << case yaml['type']
|
306
|
+
when 'check' then
|
307
|
+
main_menu << '<li>' + check_box_tag("check-#{document.id}", false, false, { class: 'dc-check' }) + '</li>'
|
308
|
+
next
|
309
|
+
|
310
|
+
when 'edit' then
|
293
311
|
parms['action'] = 'edit'
|
294
|
-
parms['id']
|
295
|
-
dc_link_to(
|
312
|
+
parms['id'] = document.id
|
313
|
+
dc_link_to( caption, 'edit-o', parms, title: title )
|
314
|
+
|
315
|
+
when 'show' then
|
316
|
+
parms['action'] = 'show'
|
317
|
+
parms['id'] = document.id
|
318
|
+
parms['readonly'] = true
|
319
|
+
dc_link_to( caption, 'eye', parms, title: title )
|
296
320
|
|
297
|
-
when
|
298
|
-
parms['id']
|
321
|
+
when 'duplicate' then
|
322
|
+
parms['id'] = document.id
|
299
323
|
# duplicate string will be added to these fields.
|
300
324
|
parms['dup_fields'] = yaml['dup_fields']
|
301
325
|
parms['action'] = 'create'
|
302
|
-
dc_link_to(
|
326
|
+
dc_link_to( caption, 'content_copy-o', parms, data: { confirm: t('drgcms.confirm_dup') }, method: :post, title: title )
|
303
327
|
|
304
|
-
when
|
328
|
+
when 'delete' then
|
305
329
|
parms['action'] = 'destroy'
|
306
|
-
parms['id']
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
# undocumented so far
|
311
|
-
when yaml['type'] == 'edit_embedded'
|
312
|
-
parms['controller'] = 'cmsedit'
|
313
|
-
parms['table'] += ";#{yaml['table']}"
|
314
|
-
parms['ids'] ||= ''
|
315
|
-
parms['ids'] += "#{document.id};"
|
316
|
-
dc_link_to( nil, 'table lg', parms, method: :get )
|
317
|
-
|
330
|
+
parms['id'] = document.id
|
331
|
+
dc_link_to( caption, 'delete-o', parms, data: { confirm: t('drgcms.confirm_delete') }, method: :delete, title: title )
|
332
|
+
|
318
333
|
else # error.
|
319
334
|
yaml['type'].to_s
|
320
335
|
end
|
321
336
|
html << '</li>'
|
322
337
|
end
|
338
|
+
|
339
|
+
if has_sub_menu
|
340
|
+
sub_menu << html
|
341
|
+
else
|
342
|
+
main_menu << html
|
343
|
+
end
|
323
344
|
end
|
324
|
-
|
325
|
-
|
345
|
+
|
346
|
+
if has_sub_menu
|
347
|
+
%(
|
348
|
+
<ul class="dc-result-actions" style="width: #{width}px;">#{main_menu}
|
349
|
+
<li><div class="dc-result-submenu">#{fa_icon('more_vert')}
|
350
|
+
<ul id="menu-#{document.id}">#{sub_menu}</ul>
|
351
|
+
</div></li>
|
352
|
+
</ul>)
|
353
|
+
else
|
354
|
+
%(<ul class="dc-result-actions" style="width: #{width}px;">#{main_menu}</ul>)
|
355
|
+
end.html_safe
|
326
356
|
end
|
327
357
|
|
328
358
|
############################################################################
|
@@ -330,12 +360,10 @@ end
|
|
330
360
|
############################################################################
|
331
361
|
def dc_header_for_result
|
332
362
|
html = '<div class="dc-result-header">'
|
333
|
-
if @form['result_set']['actions']
|
334
|
-
ignore, width = dc_actions_column()
|
335
|
-
|
336
|
-
|
337
|
-
end
|
338
|
-
html << %Q[<div class="actions" style="width:#{width}px;">#{check_all}</div>]
|
363
|
+
if @form['result_set']['actions'] && !@form['readonly']
|
364
|
+
ignore, width, has_check = dc_actions_column()
|
365
|
+
check_all = fa_icon('check-square-o', class: 'dc-check-all') if has_check
|
366
|
+
html << %(<div class="dc-result-actions" style="width:#{width}px;">#{check_all}</div>)
|
339
367
|
end
|
340
368
|
# preparation for sort icon
|
341
369
|
sort_field, sort_direction = nil, nil
|
@@ -348,25 +376,32 @@ def dc_header_for_result
|
|
348
376
|
session[:form_processing] = "result_set:columns: #{k}=#{v}"
|
349
377
|
next if v['width'].to_s.match(/hidden|none/i)
|
350
378
|
|
351
|
-
th = %
|
379
|
+
th = %(<div class="th" style="width:#{v['width'] || '15%'};text-align:#{v['align'] || 'left'};" data-name="#{v['name']}")
|
352
380
|
label = v['caption'] || v['label']
|
353
381
|
label = (v['name'] ? "helpers.label.#{@form['table']}.#{v['name']}" : '') if label.nil?
|
354
382
|
label = t(label) if label.match(/\./)
|
355
|
-
# no sorting when embedded documents or custom filter is active
|
356
|
-
|
357
|
-
sort_ok = true
|
383
|
+
# no sorting when embedded documents or custom filter is active
|
384
|
+
sort_ok = !dc_dont?(@form['result_set']['sort'], false)
|
358
385
|
sort_ok = sort_ok || (@form['index'] && @form['index']['sort'])
|
359
386
|
sort_ok = sort_ok && !dc_dont?(v['sort'], false)
|
360
|
-
if @tables.size == 1
|
361
|
-
icon = '
|
387
|
+
if @tables.size == 1 && sort_ok
|
388
|
+
icon = 'sort_unset md-18'
|
389
|
+
filter_class = form_has_input_field?(v['name']) ? nil : 'no-filter'
|
362
390
|
if v['name'] == sort_field
|
363
|
-
icon = sort_direction == '1' ? '
|
364
|
-
|
365
|
-
|
391
|
+
icon = sort_direction == '1' ? 'sort_down md-18' : 'sort_up md-18'
|
392
|
+
else
|
393
|
+
# no icon if filter can not be set
|
394
|
+
icon = nil if filter_class
|
395
|
+
end
|
396
|
+
# sort and filter icon
|
397
|
+
icon = mi_icon(icon, class: filter_class) if icon
|
398
|
+
url = url_for(controller: 'cmsedit', action: 'run', control: 'cmsedit.sort', sort: v['name'],
|
399
|
+
t: CmsHelper.table_param(params), f: CmsHelper.form_param(params))
|
400
|
+
th << %(><span data-url="#{url}">#{label}</span>#{icon}</div>)
|
366
401
|
else
|
367
402
|
th << ">#{label}</div>"
|
368
403
|
end
|
369
|
-
html <<
|
404
|
+
html << %(<div class="spacer"></div>) + th
|
370
405
|
end
|
371
406
|
end
|
372
407
|
(html << '</div>').html_safe
|
@@ -382,8 +417,8 @@ def dc_clicks_for_result(document)
|
|
382
417
|
opts = {}
|
383
418
|
opts[:controller] = yaml['controller'] || 'cmsedit'
|
384
419
|
opts[:action] = yaml['action']
|
385
|
-
opts[:table] = yaml['table']
|
386
|
-
opts[:form_name] = yaml['form_name']
|
420
|
+
opts[:table] = yaml['table'] || CmsHelper.table_param(params)
|
421
|
+
opts[:form_name] = yaml['form_name'] || CmsHelper.form_param(params) || opts[:table]
|
387
422
|
opts[:method] = yaml['method'] || 'get'
|
388
423
|
opts[:id] = document['id']
|
389
424
|
opts[:readonly] = yaml['readonly'] if yaml['readonly']
|
@@ -392,8 +427,8 @@ def dc_clicks_for_result(document)
|
|
392
427
|
else
|
393
428
|
html << (' data-dblclick=' +
|
394
429
|
url_for(action: 'show', controller: 'cmsedit', id: document.id, ids: params[:ids],
|
395
|
-
readonly: (params[:readonly] ? 2 : 1),
|
396
|
-
|
430
|
+
readonly: (params[:readonly] ? 2 : 1), t: CmsHelper.table_param(params),
|
431
|
+
f: CmsHelper.form_param(params)) ) if @form['form']
|
397
432
|
end
|
398
433
|
html
|
399
434
|
end
|
@@ -528,7 +563,7 @@ def dc_process_column_eval(yaml, document)
|
|
528
563
|
|
529
564
|
# defined in helpers. For example dc_icon_for_boolean
|
530
565
|
elsif respond_to?(yaml['eval'])
|
531
|
-
send(yaml['eval'], document
|
566
|
+
send(yaml['eval'], document, yaml['name'])
|
532
567
|
|
533
568
|
# defined in model
|
534
569
|
elsif document.respond_to?(yaml['eval'])
|
@@ -598,4 +633,30 @@ def dc_define_standard_actions(actions_params, standard)
|
|
598
633
|
actions
|
599
634
|
end
|
600
635
|
|
636
|
+
############################################################################
|
637
|
+
# When result set is to be drawn by Rails helper method.
|
638
|
+
############################################################################
|
639
|
+
def dc_process_result_set_method
|
640
|
+
if @form['result_set']['view']
|
641
|
+
render partial: @form['result_set']['view']
|
642
|
+
else
|
643
|
+
method = @form['result_set']['eval'] || 'result_set_eval_misssing'
|
644
|
+
if respond_to?(method)
|
645
|
+
send method
|
646
|
+
else
|
647
|
+
I18n.t('drgcms.no_method', method: method)
|
648
|
+
end
|
649
|
+
end
|
650
|
+
end
|
651
|
+
|
652
|
+
############################################################################
|
653
|
+
# Check if form has defined input field for field_name and that is not readonly field.
|
654
|
+
############################################################################
|
655
|
+
def form_has_input_field?(field_name)
|
656
|
+
field = dc_get_field_form_definition(field_name)
|
657
|
+
return if field.nil?
|
658
|
+
|
659
|
+
!(field['type'] == 'readonly' || field['readonly'])
|
660
|
+
end
|
661
|
+
|
601
662
|
end
|