drg_cms 0.6.1.4 → 0.6.1.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|