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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +203 -24
  3. data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
  4. data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
  5. data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
  6. data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
  7. data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
  8. data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
  9. data/app/assets/javascripts/drg_cms/drg_cms.js +229 -95
  10. data/app/assets/stylesheets/drg_cms/drg_cms.css +608 -542
  11. data/app/assets/stylesheets/drg_cms_application.css +1 -1
  12. data/app/assets/stylesheets/drg_cms_cms.css +1 -4
  13. data/app/controllers/cmsedit_controller.rb +54 -127
  14. data/app/controllers/dc_application_controller.rb +17 -2
  15. data/app/controllers/dc_common_controller.rb +13 -7
  16. data/app/controls/browse_models_control.rb +15 -26
  17. data/app/controls/cmsedit_control.rb +125 -0
  18. data/app/controls/dc_help_control.rb +13 -1
  19. data/app/controls/dc_page_control.rb +0 -1
  20. data/app/controls/dc_poll_result_control.rb +1 -1
  21. data/app/controls/dc_report.rb +1 -1
  22. data/app/controls/design_element_settings_control.rb +1 -1
  23. data/app/forms/all_options.yml +23 -7
  24. data/app/forms/cms_menu.yml +24 -24
  25. data/app/forms/dc_big_table.yml +0 -2
  26. data/app/forms/dc_big_table_value.yml +0 -2
  27. data/app/forms/dc_browse_fields.yml +13 -9
  28. data/app/forms/dc_design.yml +1 -2
  29. data/app/forms/dc_folder_permission.yml +0 -2
  30. data/app/forms/dc_help_1.yml +2 -1
  31. data/app/forms/dc_json_ld.yml +0 -3
  32. data/app/forms/dc_menu.yml +6 -12
  33. data/app/forms/dc_menu_item.yml +1 -3
  34. data/app/forms/dc_page.yml +1 -2
  35. data/app/forms/dc_policy.yml +2 -5
  36. data/app/forms/dc_poll.yml +10 -16
  37. data/app/forms/dc_poll_result_export.yml +1 -1
  38. data/app/forms/dc_seo.yml +1 -2
  39. data/app/forms/dc_simple_menu.yml +1 -2
  40. data/app/forms/dc_site.yml +5 -7
  41. data/app/helpers/cms_common_helper.rb +8 -6
  42. data/app/helpers/cms_edit_helper.rb +61 -53
  43. data/app/helpers/cms_helper.rb +78 -42
  44. data/app/helpers/cms_index_helper.rb +198 -137
  45. data/app/helpers/dc_application_helper.rb +65 -43
  46. data/app/models/concerns/dc_page_concern.rb +1 -1
  47. data/app/models/concerns/dc_site_concern.rb +9 -3
  48. data/app/models/dc_big_table.rb +2 -2
  49. data/app/models/dc_filter.rb +45 -37
  50. data/app/models/dc_json_ld.rb +1 -1
  51. data/app/models/dc_part.rb +19 -9
  52. data/app/models/dc_site.rb +0 -1
  53. data/app/models/dc_temp.rb +7 -0
  54. data/app/models/drgcms_form_fields/comment.rb +11 -2
  55. data/app/models/drgcms_form_fields/drgcms_field.rb +10 -4
  56. data/app/models/drgcms_form_fields/link_to.rb +1 -1
  57. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +5 -5
  58. data/app/models/drgcms_form_fields/readonly.rb +3 -0
  59. data/app/models/drgcms_form_fields/select.rb +14 -14
  60. data/app/models/drgcms_form_fields/text_autocomplete.rb +19 -11
  61. data/app/renderers/dc_part_renderer.rb +1 -1
  62. data/app/renderers/dc_poll_renderer.rb +1 -1
  63. data/app/views/cmsedit/_edit_stuff.html.erb +12 -12
  64. data/app/views/cmsedit/_form.html.erb +3 -2
  65. data/app/views/cmsedit/_result.html.erb +21 -18
  66. data/app/views/cmsedit/login.html.erb +1 -1
  67. data/app/views/dc_common/paste_clipboard.html.erb +1 -1
  68. data/app/views/layouts/cms.html.erb +3 -5
  69. data/config/locales/drgcms_en.yml +5 -3
  70. data/config/locales/drgcms_sl.yml +5 -3
  71. data/config/locales/kaminari.yml +1 -1
  72. data/config/locales/models_sl.yml +1 -0
  73. data/drg_cms.gemspec +1 -1
  74. data/lib/drg_cms/version.rb +1 -1
  75. data/lib/drg_cms.rb +6 -12
  76. metadata +10 -5
  77. data/app/views/cmsedit/__remove_edit_stuff.js.erb +0 -6
  78. data/app/views/cmsedit/__show.html.erb +0 -21
@@ -63,8 +63,7 @@ form:
63
63
  type: embedded
64
64
  caption: false
65
65
  form_name: dc_simple_menu_item
66
- html:
67
- height: 800
66
+ load: delay
68
67
 
69
68
  tab3:
70
69
  20:
@@ -84,12 +84,8 @@ form:
84
84
  name: document_extension
85
85
  type: text_field
86
86
  size: 10
87
- 25:
88
- name: site_layout
89
- type: text_field
90
- size: 20
91
87
  30:
92
- name: page_table
88
+ name: site_layout
93
89
  type: text_field
94
90
  size: 20
95
91
  40:
@@ -132,8 +128,7 @@ form:
132
128
  type: text_area
133
129
  size: 130x40
134
130
 
135
- 5permissions:
136
-
131
+ 5permissions:
137
132
  10:
138
133
  name: inherit_policy
139
134
  type: select
@@ -145,9 +140,12 @@ form:
145
140
  type: embedded
146
141
  caption: false
147
142
  form_name: dc_policy
143
+ load: delay
144
+
148
145
  6parts:
149
146
  10:
150
147
  name: dc_parts
151
148
  caption: false
152
149
  type: embedded
153
150
  form_name: dc_part
151
+ load: delay
@@ -213,13 +213,14 @@ end
213
213
 
214
214
  ############################################################################
215
215
  # Return html code for icon presenting boolean value. Icon is a picture of checked or unchecked box.
216
+ # If second parameter (fiel_name) is ommited value is supplied as first parameter.
216
217
  #
217
218
  # Parameters:
218
219
  # [value] Boolean.
219
220
  #
220
221
  # Example:
221
222
  # # usage from program
222
- # dc_icon4_boolean(some_value)
223
+ # dc_icon4_boolean(document, field_name)
223
224
  #
224
225
  # # usage from form description
225
226
  # columns:
@@ -227,16 +228,17 @@ end
227
228
  # name: active
228
229
  # eval: dc_icon4_boolean
229
230
  ############################################################################
230
- def dc_icon_for_boolean(value=false)
231
- dc_dont?(value, true) ? fa_icon('square-o lg') : fa_icon('check-square-o lg')
231
+ def dc_icon_for_boolean(document = false, field_name = nil)
232
+ value = field_name.nil? ? document : document[field_name]
233
+ dc_dont?(value, true) ? fa_icon('check_box_outline_blank md-18') : fa_icon('check_box-o md-18')
232
234
  end
233
235
 
234
236
  ############################################################################
235
237
  #
236
238
  ############################################################################
237
- def dc_icon4_boolean(value=false) #nodoc
239
+ def dc_icon4_boolean(document = false, field_name = false) #nodoc
238
240
  #dc_deprecate('dc_icon4_boolean will be deprecated. Use dc_icon_for_boolean instead.')
239
- dc_icon_for_boolean(value)
241
+ dc_icon_for_boolean(document, field_name)
240
242
  end
241
243
 
242
244
  ############################################################################
@@ -345,7 +347,7 @@ def dc_help_for_tab(tab)
345
347
  label, help = dc_label_help(field.last)
346
348
  next if help.blank?
347
349
 
348
- html << %(<div class="help-field"><div class="help-label">#{label}</div><div class="help-text">#{help}</div></div>)
350
+ html << %(<div class="help-field"><div class="help-label">#{label}</div><div class="help-text">#{help.gsub("\n",'<br>')}</div></div>)
349
351
  end
350
352
  html
351
353
  end
@@ -52,7 +52,7 @@ end
52
52
  ############################################################################
53
53
  def dc_is_action_active?(options)
54
54
  if options['when_new']
55
- dc_deprecate("when_option will be deprecated and replaced by active: not_new_record! Form #{params[:form_name]}")
55
+ dc_deprecate("when_option will be deprecated and replaced by active: not_new_record! Form #{CmsHelper.form_param(params)}")
56
56
  return !(dc_dont?(options['when_new']) && @record.new_record?)
57
57
  end
58
58
  return true unless options['active']
@@ -137,56 +137,57 @@ def dc_actions_for_form(position)
137
137
  actions.delete('standard')
138
138
  actions = actions.to_a.sort { |x, y| x[0] <=> y[0] }
139
139
  # Add spinner to the beginning
140
- html = %Q[<span class="dc-spinner">#{fa_icon('spinner lg spin')}</span><ul class="dc-menu #{position}">]
141
-
140
+ html = %Q[<span class="dc-spinner">#{fa_icon('settings-o spin')}</span><ul class="dc-menu #{position}">]
141
+
142
142
  actions.each do |key, options|
143
143
  session[:form_processing] = "form:actions: #{key} #{options}"
144
- next if options.nil? # yes it happends
144
+ next if options.nil? # yes it happens
145
+
145
146
  parms = @parms.clone
146
147
  if options.class == String
147
148
  next if @form['readonly'] and !options.match(/back|close/)
148
-
149
- html << '<li class="dc-link dc-animate">'
150
- html << case
151
- when (options == 'back' or options == 'cancle') then
149
+
150
+ html << '<li>'
151
+ html << case
152
+ when (options == 'back' || options == 'cancle')
152
153
  # If return_to is present link directly to URL
153
154
  if parms['xreturn_to'] # disabled for now
154
- dc_link_to( 'drgcms.back','arrow-left', parms['return_to'] )
155
+ dc_link_to( 'drgcms.back', 'arrow_back', parms['return_to'], class: 'dc-link' )
155
156
  else
156
157
  parms['action'] = 'index'
157
158
  parms['readonly'] = parms['readonly'].to_s.to_i < 2 ? nil : 1
158
- dc_link_to( 'drgcms.back','arrow-left', parms )
159
+ dc_link_to( 'drgcms.back', 'arrow_back', parms, class: 'dc-link' )
159
160
  end
160
161
 
161
- when options == 'delete' then
162
+ when options == 'delete'
162
163
  parms['operation'] = options
163
164
  parms['id'] = @record.id
164
- dc_link_to( 'drgcms.delete','remove', parms, data: { confirm: t('drgcms.confirm_delete') }, method: :delete )
165
+ dc_link_to( 'drgcms.delete','remove', parms, data: { confirm: t('drgcms.confirm_delete') }, method: :delete, class: 'dc-link' )
165
166
 
166
- when options == 'new' then
167
+ when options == 'new'
167
168
  parms['action'] = options
168
- dc_link_to( 'drgcms.new', 'plus', parms)
169
+ dc_link_to( 'drgcms.new', 'add', parms, class: 'dc-link')
169
170
 
170
- when (options == 'enable' or options == 'disable') then
171
+ when (options == 'enable' || options == 'disable')
171
172
  parms['operation'] = options
172
173
  parms['id'] = @record.id
173
- icon = (options == 'enable' ? 'thumbs-o-up' : 'thumbs-o-down')
174
- dc_link_to( "drgcms.#{options}",icon, parms, method: :delete )
174
+ icon = (options == 'enable' ? 'check_box-o' : 'check_box_outline_blank')
175
+ dc_link_to( "drgcms.#{options}",icon, parms, method: :delete, class: 'dc-link' )
175
176
 
176
- when options == 'edit' then
177
+ when options == 'edit'
177
178
  parms['operation'] = options
178
179
  parms['id'] = @record.id
179
- dc_link_to( "drgcms.#{options}",options, parms )
180
+ dc_link_to( "drgcms.#{options}", options, parms, class: 'dc-link' )
180
181
 
181
- when options == 'refresh' then
182
- "<div onclick='window.location.href=window.location.href;'>#{fa_icon('refresh')} #{t('drgcms.refresh')}</div></li>"
182
+ when options == 'refresh'
183
+ %(<div class="dc-link" onclick='window.location.href=window.location.href;'>#{fa_icon('refresh')} #{t('drgcms.refresh')}</div></li>)
183
184
 
184
- when options == 'close' then
185
+ when options == 'close'
185
186
  close = params[:window_close].to_i
186
187
  if close < 2
187
- "<div onclick='window.close();'>#{fa_icon('close')} #{t('drgcms.close')}</div></li>"
188
+ %(<div class="dc-link" onclick='window.close();'>#{fa_icon('close')} #{t('drgcms.close')}</div></li>)
188
189
  else
189
- "<div onclick='history.back();'>#{fa_icon('close')} #{t('drgcms.close')}</div></li>"
190
+ %(<div class="dc-link" onclick='history.back();'>#{fa_icon('close')} #{t('drgcms.close')}</div></li>)
190
191
  end
191
192
  else
192
193
  "err1 #{key}=>#{options}"
@@ -203,14 +204,14 @@ def dc_actions_for_form(position)
203
204
  when options['type'] == 'submit'
204
205
  caption = options['caption'] || 'drgcms.save'
205
206
  icon = options['icon'] || 'save'
206
- prms = {}
207
- options['params'].each { |k,v| prms[k] = dc_value_for_parameter(v) } if options['params']
207
+ parameters = {}
208
+ options['params'].each { |k, v| parameters[k] = dc_value_for_parameter(v) } if options['params']
208
209
  if dc_is_action_active?(options)
209
- '<li class="dc-link-submit dc-animate">' +
210
- dc_submit_tag(caption, icon, {:data => prms, :title => options['title'] }) +
210
+ '<li>' +
211
+ dc_submit_tag(caption, icon, { data: parameters, title: options['title'] }) +
211
212
  '</li>'
212
213
  else
213
- "<li class=\"dc-link-no\">#{fa_icon(icon)} #{caption}</li>"
214
+ %(<li><div class="dc-link-no">#{fa_icon(icon)} #{caption}</div></li>)
214
215
  end
215
216
 
216
217
  # delete with some sugar added
@@ -219,21 +220,22 @@ def dc_actions_for_form(position)
219
220
  parms.merge!(options['params'])
220
221
  caption = options['caption'] || 'drgcms.delete'
221
222
  icon = options['icon'] || 'remove'
222
- '<li class="dc-link dc-animate">' +
223
- dc_link_to( caption, icon, parms, data: t('drgcms.confirm_delete'), method: :delete ) +
223
+ '<li class="">' +
224
+ dc_link_to( caption, icon, parms, data: t('drgcms.confirm_delete'), method: :delete, class: 'dc-link' ) +
224
225
  '</li>'
225
-
226
+
226
227
  # ajax or link button
227
- when %w(ajax link window).include?(options['type'])
228
+ when %w(ajax link window popup).include?(options['type'])
228
229
  dc_link_ajax_window_submit_action(options, @record)
229
-
230
- # Javascript action
230
+
231
+ # Javascript action
231
232
  when options['type'] == 'script'
232
233
  dc_script_action(options)
233
234
  else
234
235
  '<li>err2</li>'
235
236
  end
236
237
  end
238
+
237
239
  end
238
240
  (html << '</ul>').html_safe
239
241
  end
@@ -307,13 +309,13 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
307
309
  group_count = options['group'] || 1
308
310
  group_option = options['group'] || 1
309
311
  end
310
- #
312
+
311
313
  html << if labels_pos == 'top'
312
- %Q[
314
+ %(
313
315
  <div class="dc-form-label-top dc-color-#{odd_even} dc-align-left" title="#{help}">
314
316
  <label for="record_#{options['name']}">#{label} </label>
315
317
  <div id="td_record_#{options['name']}">#{field_html}</div>
316
- </div> ]
318
+ </div> )
317
319
  else
318
320
  # no label
319
321
  if dc_dont?(options['caption'])
@@ -326,13 +328,14 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
326
328
  else
327
329
  label_width = 14
328
330
  data_width = 85
329
- end
330
- %Q[
331
+ end
332
+ help.gsub!('<br>',"\n") if help.present?
333
+ %(
331
334
  <div class="dc-form-label dc-color-#{odd_even} dc-align-#{labels_pos} dc-width-#{label_width}" title="#{help}">
332
335
  <label for="record_#{options['name']}">#{label} </label>
333
336
  </div>
334
337
  <div id="td_record_#{options['name']}" class="dc-form-field dc-color-#{odd_even} dc-width-#{data_width}">#{field_html}</div>
335
- ]
338
+ )
336
339
  end
337
340
  # check if group end
338
341
  if (group_count -= 1) == 0
@@ -408,6 +411,7 @@ def dc_head_for_form
408
411
  @css ||= ''
409
412
  head = @form['form']['head']
410
413
  return '' if head.nil?
414
+
411
415
  html = %(<div class="dc-head #{head['class']}">\n<div class="dc-row">)
412
416
  split = head['split'] || 4
413
417
  percent = 100/split
@@ -469,29 +473,33 @@ end
469
473
  # + lots of more. At the moment also adds icon for dumping current document as json text.
470
474
  ############################################################################
471
475
  def dc_document_statistics
472
- return '' if @record.new_record? or dc_dont?(@form['form']['info'])
473
- html = %Q[<div id="dc-document-info">#{fa_icon('info-circle lg')}</div> <div id="dc-document-info-popup" class="div-hidden"> ]
474
- #
476
+ return '' if @record.id.nil? || dc_dont?(@form['form']['info'])
477
+
478
+ html = %(<div id="dc-document-info">#{fa_icon('info md-18')}</div> <div id="dc-document-info-popup" class="div-hidden">)
475
479
  u = dc_document_user_for('created_by')
476
- html << %Q[<div><span>#{t('drgcms.created_by', 'Created by')}: </span><span>#{u}</span></div>] if u
480
+ html << %(<div><span>#{t('drgcms.created_by', 'Created by')}: </span><span>#{u}</span></div>) if u
477
481
  u = dc_document_user_for('updated_by')
478
- html << %Q[<div><span>#{t('drgcms.updated_by', 'Updated by')}: </span><span>#{u}</span></div>] if u
479
- html << %Q[<div><span>#{t('drgcms.created_at', 'Created at')}: </span><span>#{dc_format_value(@record.created_at)}</span></div>] if @record['created_at']
480
- html << %Q[<div><span>#{t('drgcms.updated_at', 'Updated at')}: </span><span>#{dc_format_value(@record.updated_at)}</span></div>] if @record['updated_at']
481
- # copy to clipboard icon
482
+ html << %(<div><span>#{t('drgcms.updated_by', 'Updated by')}: </span><span>#{u}</span></div>) if u
483
+
484
+ html << %(<div><span>#{t('drgcms.created_at', 'Created at')}: </span><span>#{dc_format_value(@record.created_at)}</span></div>) if @record['created_at']
485
+ html << %(<div><span>#{t('drgcms.updated_at', 'Updated at')}: </span><span>#{dc_format_value(@record.updated_at)}</span></div>) if @record['updated_at']
486
+ # copy to clipboard icon
482
487
  parms = params.clone
483
488
  parms[:controller] = 'dc_common'
484
489
  parms[:action] = 'copy_clipboard'
485
490
  url = url_for(parms.permit!)
486
- html << fa_icon('copy lg', class: 'dc-link-img dc-link-ajax dc-animate',
491
+ html << fa_icon('content_copy-o md-18', class: 'dc-link-img dc-link-ajax',
487
492
  'data-url' => url, 'data-request' => 'get', title: t('drgcms.doc_copy_clipboard') )
488
493
 
489
- url = url_for(controller: :cmsedit, action: :index, table: 'dc_journal', filter: 'on',
494
+ url = url_for(controller: 'cmsedit', action: :index, table: 'dc_journal', filter: 'on',
490
495
  filter_oper: 'eq', filter_field: 'doc_id', filter_value: @record.id)
491
- html << fa_icon('history lg', class: 'dc-link-img dc-animate dc-window-open',
496
+ html << fa_icon('history md-18', class: 'dc-link-img dc-window-open',
492
497
  'data-url' => url, title: t('helpers.label.dc_journal.tabletitle') )
498
+ html << %(<span>ID: </span><span id="record-id" class="hover" onclick="dc_copy_to_clipboard('record-id');" title="Copy document ID to clipboard">#{@record.id}</span>)
499
+
500
+ #dc_copy_to_clipboard
493
501
 
494
- (html << '</div></div>').html_safe
502
+ (html << '</div>').html_safe
495
503
  end
496
504
 
497
505
  private
@@ -34,11 +34,9 @@ module CmsHelper
34
34
  # Creates code for script action type.
35
35
  ############################################################################
36
36
  def dc_script_action(yaml)
37
- # data = {'request' => 'script', 'script' => yaml['js'] || yaml['script'] }
38
- # %Q[<li class="dc-link-ajax with-link dc-animate">#{ dc_link_to(yaml['caption'], yaml['icon'], '#', data: data ) }</li>]
39
37
  icon = dc_icon_for_link yaml['icon']
40
- data = %Q[data-request="script" data-script="#{yaml['js'] || yaml['script']}"]
41
- %Q[<li class="dc-link-ajax dc-animate" #{data}>#{icon} #{ t(yaml['caption'],yaml['caption']) }</li>]
38
+ data = %(data-request="script" data-script="#{yaml['js'] || yaml['script']}" data-url="script")
39
+ %(<li><div class="dc-link-ajax" #{data}>#{icon} #{ t(yaml['caption'],yaml['caption']) }</div></li>)
42
40
  end
43
41
 
44
42
  ############################################################################
@@ -49,11 +47,11 @@ def dc_get_field_form_definition(name) #:nodoc:
49
47
  return if @form['form'].nil?
50
48
 
51
49
  @form['form']['tabs'].each do |tab|
52
- # Array with 2 elements. First is tabname, second is data
50
+ # Array with 2 elements. First is tab name, second is data
53
51
  my_fields = tab.last
54
- my_fields.each {|k,v| return v if (k.class == Integer and v['name'] == name) }
52
+ my_fields.each { |k, v| return v if (k.class == Integer && v['name'] == name) }
55
53
  end if @form['form']['tabs'] # I know. But nice.
56
- #
54
+
57
55
  @form['form']['fields'].each do |field|
58
56
  next unless field.first.class == Integer # options
59
57
  return field.last if field.last['name'] == name
@@ -160,7 +158,7 @@ def dc_field_action(yaml)
160
158
  end
161
159
  # input field will have label as placeholder
162
160
  field = field.sub('input',"input placeholder=\"#{label}\"")
163
- %Q[<li class="no-background">#{field}</li>]
161
+ %(<li class="no-background">#{field}</li>)
164
162
  end
165
163
 
166
164
  ############################################################################
@@ -168,9 +166,17 @@ end
168
166
  ############################################################################
169
167
  def dc_html_data(yaml)
170
168
  return '' if yaml.blank?
171
- yaml.inject(' ') {|result, e| result = e.last.nil? ? result : result << "#{e.first}=\"#{e.last}\" "}
169
+
170
+ yaml.inject(' ') { |result, e| result = e.last.nil? ? result : result << "#{e.first}=\"#{e.last}\" " }
172
171
  end
173
172
 
173
+ ############################################################################
174
+ # There are several options for defining caption (caption,label, text). This method
175
+ # will ensure that caption is returned anyhow provided.
176
+ ############################################################################
177
+ def dc_get_caption(yaml)
178
+ yaml['caption'] || yaml['text'] || yaml['label']
179
+ end
174
180
  ############################################################################
175
181
  # Creates code for link, ajax or windows action for index or form actions.
176
182
  #
@@ -182,14 +188,14 @@ end
182
188
  # Returns:
183
189
  # String : HTML code for action
184
190
  ############################################################################
185
- def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
191
+ def dc_link_ajax_window_submit_action(yaml, record = nil, action_active = true)
186
192
  parms = {}
187
- caption = yaml['caption'] || yaml['text']
193
+ caption = dc_get_caption(yaml)
188
194
  caption = caption ? t("#{caption.downcase}", caption) : nil
189
195
  icon = yaml['icon'] ? "#{fa_icon(yaml['icon'])}" : ''
190
196
  # action is not active
191
197
  unless dc_is_action_active?(yaml)
192
- return "<li class=\"dc-link-no\">#{icon} #{caption}</li>"
198
+ return %(<li><div class="dc-link-no">#{icon} #{caption}</div></li>)
193
199
  end
194
200
  # set data-confirm when confirm
195
201
  yaml['html'] ||= {}
@@ -218,41 +224,57 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
218
224
 
219
225
  parms['table'] = parms['table'].underscore if parms['table'] # might be CamelCase
220
226
  # error if controller parameter is missing
221
- if parms['controller'].nil? && parms['url'].nil?
222
- "<li>#{'Controller not defined'}</li>"
223
- else
224
- #yaml['caption'] ||= yaml['text']
225
- html_data = dc_html_data(yaml['html'])
226
- url = url_for(parms) rescue 'URL error'
227
- url = nil if parms['url'] == '#'
227
+ return "<li>#{'Controller not defined'}</li>" if parms['controller'].nil? && parms['url'].nil?
228
228
 
229
- request = yaml['request'] || yaml['method'] || 'get'
230
- if yaml['type'] == 'ajax' # ajax button
231
- clas = "dc-link-ajax dc-animate"
232
- %Q[<li class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}
233
- data-request="#{request}" title="#{yaml['title']}">#{icon}#{caption}</li>]
229
+ html_data = dc_html_data(yaml['html'])
230
+ url = url_for(parms) rescue 'URL error'
231
+ url = nil if parms['url'] == '#'
232
+ request = yaml['request'] || yaml['method'] || 'get'
234
233
 
235
- elsif yaml['type'] == 'submit' # submit button
236
- # It's dirty hack, but will prevent not authorized message and render index action correctly
237
- parms[:filter] = 'on'
238
- url = url_for(parms) rescue 'URL error'
239
- clas = "dc-action-submit"
240
- %Q[<li class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}
241
- data-request="#{request}" title="#{yaml['title']}">#{icon}#{caption}</li>]
234
+ code = case yaml['type']
235
+ when 'ajax' # ajax button
236
+ clas = 'dc-link-ajax'
237
+ %(<div class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}
238
+ data-request="#{request}" title="#{yaml['title']}">#{icon}#{caption}</div>)
242
239
 
243
- elsif yaml['type'] == 'link' # link button
244
- clas = "dc-link dc-animate"
245
- link = dc_link_to(caption, yaml['icon'], parms, yaml['html'] )
246
- %Q[<li class="#{clas}">#{action_active ? link : caption}</li>]
240
+ when 'submit' # submit button
241
+ # It's dirty hack, but will prevent not authorized message and render index action correctly
242
+ parms[:filter] = 'on'
243
+ url = url_for(parms) rescue 'URL error'
244
+ clas = 'dc-action-submit'
245
+ %(<div class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}
246
+ data-request="#{request}" title="#{yaml['title']}">#{icon}#{caption}</div>)
247
247
 
248
- elsif yaml['type'] == 'window'
249
- clas = "dc-link dc-animate dc-window-open"
250
- %Q[<li class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}>#{icon}#{caption}</li>]
248
+ when 'link' # link button
249
+ yaml['html'] = dc_yaml_add_option(yaml['html'], class: 'dc-link')
250
+ link = dc_link_to(caption, yaml['icon'], parms, yaml['html'] )
251
+ %(#{action_active ? link : caption})
251
252
 
252
- else
253
- '<li>Action Type error</li>'
254
- end
253
+ when 'window' # open window
254
+ clas = 'dc-link dc-window-open'
255
+ %(<div class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}>#{icon}#{caption}</div>)
256
+
257
+ when 'popup' # popup dialog
258
+ clas = 'dc-link dc-popup-open'
259
+ %(<div class="#{clas}" data-url="#{action_active ? url : ''}" #{html_data}>#{icon}#{caption}</div>)
260
+
261
+ else
262
+ 'Type error!'
255
263
  end
264
+ "<li>#{code}</li>"
265
+ end
266
+
267
+ ############################################################################
268
+ # Add new option to yaml. Subroutine of dc_link_ajax_window_submit_action.
269
+ ############################################################################
270
+ def dc_yaml_add_option(source, options) #nodoc
271
+ options.each do |k, v|
272
+ key = k.to_s
273
+ source[key] ||= ''
274
+ # only if not already present
275
+ source[key] << " #{v}" unless source[key].match(v.to_s)
276
+ end
277
+ source
256
278
  end
257
279
 
258
280
  ############################################################################
@@ -264,5 +286,19 @@ def dc_log_exception(exception, where = '')
264
286
 
265
287
  logger.error log
266
288
  end
267
-
289
+
290
+ ############################################################################
291
+ # Will return form_name from parameter regardless if set as form_name or just f.
292
+ ############################################################################
293
+ def self.form_param(params)
294
+ params[:form_name] || params[:f]
295
+ end
296
+
297
+ ############################################################################
298
+ # Will return table name from parameter regardless if set as table or just t.
299
+ ############################################################################
300
+ def self.table_param(params)
301
+ params[:table] || params[:t]
302
+ end
303
+
268
304
  end