drg_cms 0.6.0.8 → 0.6.1.0

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +100 -58
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +177 -43
  4. data/app/controllers/cmsedit_controller.rb +149 -145
  5. data/app/controllers/dc_application_controller.rb +235 -113
  6. data/app/controllers/dc_common_controller.rb +32 -3
  7. data/app/controls/dc_help_control.rb +126 -0
  8. data/app/controls/dc_report.rb +5 -7
  9. data/app/forms/all_options.yml +10 -4
  10. data/app/forms/cms_menu.yml +7 -1
  11. data/app/forms/dc_category.yml +2 -1
  12. data/app/forms/dc_design.yml +1 -0
  13. data/app/forms/dc_help_1.yml +109 -0
  14. data/app/forms/dc_journal.yml +3 -1
  15. data/app/forms/dc_link.yml +1 -1
  16. data/app/forms/dc_menu.yml +2 -0
  17. data/app/forms/dc_menu_item.yml +1 -0
  18. data/app/forms/dc_page.yml +2 -0
  19. data/app/forms/dc_part.yml +1 -0
  20. data/app/forms/dc_piece.yml +1 -0
  21. data/app/forms/dc_poll.yml +3 -0
  22. data/app/forms/dc_simple_menu.yml +2 -0
  23. data/app/forms/dc_site.yml +2 -6
  24. data/app/forms/dc_user.yml +27 -11
  25. data/app/forms/dc_user_role.yml +3 -0
  26. data/app/helpers/cms_common_helper.rb +69 -4
  27. data/app/helpers/cms_edit_helper.rb +32 -24
  28. data/app/helpers/cms_helper.rb +64 -26
  29. data/app/helpers/cms_index_helper.rb +84 -72
  30. data/app/helpers/dc_application_helper.rb +33 -24
  31. data/app/models/concerns/dc_page_concern.rb +11 -2
  32. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  33. data/app/models/concerns/dc_site_concern.rb +56 -44
  34. data/app/models/concerns/dc_user_concern.rb +57 -18
  35. data/app/models/dc_design.rb +29 -19
  36. data/app/models/dc_key_value_store.rb +1 -0
  37. data/app/models/dc_permission.rb +19 -9
  38. data/app/models/dc_policy.rb +25 -14
  39. data/app/models/dc_policy_role.rb +22 -11
  40. data/app/models/dc_temp.rb +1 -1
  41. data/app/models/dc_user_role.rb +2 -2
  42. data/app/models/drgcms_form_fields/embedded.rb +5 -8
  43. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  44. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  45. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  46. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  47. data/app/models/drgcms_form_fields/method.rb +5 -4
  48. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  49. data/app/models/drgcms_form_fields/select.rb +10 -9
  50. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  51. data/app/views/cmsedit/edit.html.erb +2 -0
  52. data/app/views/cmsedit/index.html.erb +2 -1
  53. data/app/views/cmsedit/new.html.erb +2 -0
  54. data/app/views/dc_common/_help.html.erb +8 -0
  55. data/app/views/layouts/models.html.erb +2 -1
  56. data/config/locales/drgcms_en.yml +12 -0
  57. data/config/locales/drgcms_sl.yml +15 -0
  58. data/config/locales/models_en.yml +5 -5
  59. data/config/locales/models_sl.yml +7 -6
  60. data/lib/drg_cms.rb +58 -0
  61. data/lib/drg_cms/version.rb +1 -1
  62. metadata +5 -3
  63. data/app/models/__dc_dummy.rb +0 -102
@@ -46,7 +46,7 @@ end
46
46
  # Field definition will be used for input field on the form.
47
47
  ############################################################################
48
48
  def dc_get_field_form_definition(name) #:nodoc:
49
- return nil if @form['form'].nil?
49
+ return if @form['form'].nil?
50
50
 
51
51
  @form['form']['tabs'].each do |tab|
52
52
  # Array with 2 elements. First is tabname, second is data
@@ -67,26 +67,14 @@ end
67
67
  # Parameters:
68
68
  # options : Hash : Field definition
69
69
  #
70
- # Returns:
70
+ # Returns: Array[3]
71
71
  # field_html : String : HTML code for field definition
72
72
  # label : String : Label text
73
73
  # help : String : Help text
74
74
  ############################################################################
75
75
  def dc_field_label_help(options)
76
- # no label or help in comments
77
- unless %w(comment action).include?(options['type'])
78
- label = options['caption'] || options['text'] || options['label']
79
- label = if label.blank?
80
- t_name(options['name'], options['name'].capitalize.gsub('_',' ') )
81
- elsif options['name']
82
- t(label, label)
83
- end
84
- # help text can be defined in form or in translations starting with helpers. or as helpers.help.collection.field
85
- help = options['help']
86
- help ||= "helpers.help.#{@form['table']}.#{options['name']}" if options['name']
87
- help = t(help, ' ') if help.to_s.match(/helpers\./)
88
- end
89
- # create field object from type option and call its render method
76
+ label, help = dc_label_help(options)
77
+ # create field object from type and call its render method
90
78
  if options['type'].present?
91
79
  klass_string = options['type'].camelize
92
80
  field_html = if DrgcmsFormFields.const_defined?(klass_string) # when field type defined
@@ -101,10 +89,57 @@ def dc_field_label_help(options)
101
89
  else
102
90
  "Error: Field type missing!"
103
91
  end
104
-
105
92
  [field_html, label, help]
106
93
  end
107
94
 
95
+ ############################################################################
96
+ # Return label and help text for a field defined on Form.
97
+ #
98
+ # Parameters:
99
+ # options : Hash : Field definition
100
+ #
101
+ # Returns:
102
+ # label : String : Label text
103
+ # help : String : Help text
104
+ ############################################################################
105
+ def dc_label_help(options)
106
+ # no label or help in comments
107
+ return [nil, nil] if %w(comment action).include?(options['type'])
108
+
109
+ label = options['caption'] || options['text'] || options['label']
110
+ label = if label.blank?
111
+ t_name(options['name'], options['name'].capitalize.gsub('_',' ') )
112
+ elsif options['name']
113
+ t(label, label)
114
+ end
115
+ # help text can be defined in form or in translations starting with helpers. or as helpers.help.collection.field
116
+ help = options['help']
117
+ help ||= "helpers.help.#{@form['table']}.#{options['name']}" if options['name']
118
+ help = t(help, ' ') if help.to_s.match(/helpers\./)
119
+ [label, help]
120
+ end
121
+
122
+ ############################################################################
123
+ # Return label and help for tab on Form.
124
+ #
125
+ # Parameters:
126
+ # options : String : Tab name on form
127
+ #
128
+ # Returns:
129
+ # label : String : Label text
130
+ # help : String : Help text
131
+ ############################################################################
132
+ def dc_tab_label_help(tab_name)
133
+ label = @form['form']['tabs'][tab_name]['caption'] || tab_name
134
+ label = t(label, t_name(label, label))
135
+
136
+ help = @form['form']['tabs'][tab_name]['help'] || "helpers.help.#{@form['table']}.#{tab_name}"
137
+ help = t(help, t_name(help, help))
138
+ help = nil if help.match('helpers.') # help not found in translation
139
+
140
+ [label, help]
141
+ end
142
+
108
143
  ############################################################################
109
144
  # Creates code for including data entry field in index actions.
110
145
  ############################################################################
@@ -149,7 +184,8 @@ end
149
184
  ############################################################################
150
185
  def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
151
186
  parms = {}
152
- caption = yaml['caption'] ? t("#{yaml['caption'].downcase}", yaml['caption']) : nil
187
+ caption = yaml['caption'] || yaml['text']
188
+ caption = caption ? t("#{caption.downcase}", caption) : nil
153
189
  icon = yaml['icon'] ? "#{fa_icon(yaml['icon'])}" : ''
154
190
  # action is not active
155
191
  unless dc_is_action_active?(yaml)
@@ -158,14 +194,14 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
158
194
  # set data-confirm when confirm
159
195
  yaml['html'] ||= {}
160
196
  confirm = yaml['html']['data-confirm'] || yaml['confirm']
161
- yaml['html']['data-confirm'] = t(confirm) unless confirm.blank?
197
+ yaml['html']['data-confirm'] = t(confirm) if confirm.present?
162
198
  yaml['html']['title'] ||= yaml['title']
163
- yaml['html']['title'] = t(yaml['title'])
199
+ yaml['html']['title'] = t(yaml['title']) if yaml['title'].present?
164
200
  yaml['html']['target'] ||= yaml['target']
165
201
  # direct url
166
202
  if yaml['url']
167
- parms['controller'] = yaml['url']
168
- parms['idr'] = dc_document_path(record) if record
203
+ parms['url'] = yaml['url']
204
+ parms['idr'] = dc_document_path(record) if record
169
205
  # make url from action controller
170
206
  else
171
207
  parms['controller'] = yaml['controller'] || 'cmsedit'
@@ -178,16 +214,18 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
178
214
  # add current id to parameters
179
215
  parms['id'] = dc_document_path(record) if record
180
216
  # overwrite with or add additional parameters from environment or record
181
- yaml['params'].each { |k,v| parms[k] = dc_value_for_parameter(v) } if yaml['params']
217
+ yaml['params'].each { |k, v| parms[k] = dc_value_for_parameter(v, record) } if yaml['params']
218
+
182
219
  parms['table'] = parms['table'].underscore if parms['table'] # might be CamelCase
183
220
  # error if controller parameter is missing
184
221
  if parms['controller'].nil? && parms['url'].nil?
185
222
  "<li>#{'Controller not defined'}</li>"
186
223
  else
187
- yaml['caption'] ||= yaml['text']
224
+ #yaml['caption'] ||= yaml['text']
188
225
  html_data = dc_html_data(yaml['html'])
189
- #
190
226
  url = url_for(parms) rescue 'URL error'
227
+ url = nil if parms['url'] == '#'
228
+
191
229
  request = yaml['request'] || yaml['method'] || 'get'
192
230
  if yaml['type'] == 'ajax' # ajax button
193
231
  clas = "dc-link-ajax dc-animate"
@@ -204,7 +242,7 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
204
242
 
205
243
  elsif yaml['type'] == 'link' # link button
206
244
  clas = "dc-link dc-animate"
207
- link = dc_link_to(yaml['caption'], yaml['icon'], parms, html_data )
245
+ link = dc_link_to(caption, yaml['icon'], parms, yaml['html'] )
208
246
  %Q[<li class="#{clas}">#{action_active ? link : caption}</li>]
209
247
 
210
248
  elsif yaml['type'] == 'window'
@@ -47,13 +47,13 @@ def dc_actions_for_index()
47
47
  actions['standard'] = nil
48
48
  end
49
49
 
50
- # start div with hidden spinner image
51
- html = <<EOT
50
+ # start div with hidden spinner image
51
+ html = %(
52
52
  <form id="dc-action-menu">
53
53
  <span class="dc-spinner">#{fa_icon('spinner lg spin')}</span>
54
- <ul class="dc-action-menu">
55
- EOT
56
- # Remove actions settings and sort
54
+ <ul class="dc-action-menu">)
55
+
56
+ # Remove actions settings and sort
57
57
  only_actions = []
58
58
  actions.each { |key, value| only_actions << [key, value] if key.class == Integer }
59
59
  only_actions.sort_by!(&:first)
@@ -67,7 +67,7 @@ EOT
67
67
  dc_deprecate "action: url will be deprecated. Use action: link in index: actions! Form #{params['form_name']}"
68
68
  action = 'link'
69
69
  end
70
- # if return_to is present link directly to URL
70
+ # if return_to is present link directly to URL
71
71
  if action == 'link' and yaml['url']
72
72
  url = yaml['url']
73
73
  else
@@ -77,11 +77,12 @@ EOT
77
77
  url['form_name'] = yaml['form_name'] if yaml['form_name']
78
78
  url['control'] = yaml['control'] if yaml['control']
79
79
  end
80
- # html link options
80
+ # html link options
81
81
  yhtml = yaml['html'] || {}
82
82
  yhtml['title'] = yaml['title'] if yaml['title']
83
- code = case
84
- # sort
83
+
84
+ code = case
85
+ # sort
85
86
  when action == 'sort' then
86
87
  choices = [['id','id']]
87
88
  if @form['index']['sort']
@@ -93,11 +94,12 @@ EOT
93
94
  fa_icon('sort-alpha-asc') + ' ' + t('drgcms.sort') + ' ' +
94
95
  select('sort', 'sort', choices, { include_blank: true },
95
96
  { class: 'drgcms_sort', 'data-table' => @form['table'], 'data-form' => params['form_name']} )
96
- # filter
97
+
98
+ # filter
97
99
  when action == 'filter' then
98
100
  caption = t('drgcms.filter')
99
101
  caption << '&nbsp;' + fa_icon('caret-down lg') + DcFilter.menu_filter(self)
100
- # add filter OFF link
102
+ # add filter OFF link
101
103
  sess = session[@form['table']]
102
104
  if sess and sess[:filter]
103
105
  caption << '&nbsp;&nbsp;' + dc_link_to(nil,'remove lg',
@@ -105,11 +107,13 @@ EOT
105
107
  { title: DcFilter.title4_filter_off(sess[:filter]) })
106
108
  end
107
109
  caption
108
- # new
110
+
111
+ # new
109
112
  when action == 'new' then
110
113
  caption = yaml['caption'] || 'drgcms.new'
111
114
  dc_link_to(caption,'plus', url, yhtml )
112
- # menu
115
+
116
+ # menu
113
117
  when action == 'menu' then
114
118
  caption = t(options['caption'], options['caption']) + '&nbsp;' + fa_icon('caret-down lg')
115
119
  caption + eval(options['eval'])
@@ -126,13 +130,16 @@ EOT
126
130
  when action == 'script'
127
131
  html << dc_script_action(options)
128
132
  next
133
+
129
134
  when action == 'field'
130
135
  html << dc_field_action(yaml)
131
136
  next
137
+
132
138
  when %w(ajax link window submit).include?(action)
133
139
  html << dc_link_ajax_window_submit_action(options, nil)
134
140
  next
135
- else
141
+
142
+ else
136
143
  caption = yaml['caption'] || yaml['text']
137
144
  icon = yaml['icon'] ? yaml['icon'] : action
138
145
  dc_link_to(caption, icon, url, yhtml)
@@ -140,22 +147,21 @@ EOT
140
147
  html << "<li class=\"dc-link dc-animate\">#{code}</li>"
141
148
  html << DcFilter.get_filter_field(self) if action == 'filter'
142
149
  end
143
- html << '</ul>'
144
- html << '</form>'
150
+ html << '</ul></form>'
145
151
  html.html_safe
146
152
  end
147
153
 
148
154
  ############################################################################
149
155
  # Creates filter div for cmsedit index/filter action.
150
156
  ############################################################################
151
- def dc_div_filter()
157
+ def dc_div_filter
152
158
  choices = []
153
159
  filter = (@form['index'] and @form['index']['filter']) ? @form['index']['filter'] + ',' : ''
154
160
  filter << 'id as text_field' # filter id is added by default
155
161
  filter.split(',').each do |f|
156
162
  f.strip!
157
163
  name = f.match(' as ') ? f.split(' ').first : f
158
- # like another field on the form
164
+ # like another field on the form
159
165
  if f.match(' like ')
160
166
  a = f.split(' ')
161
167
  name = a.first
@@ -164,7 +170,7 @@ def dc_div_filter()
164
170
  choices << [ t("helpers.label.#{@form['table']}.#{name}", name), f ]
165
171
  end
166
172
  choices4_operators = t('drgcms.choices4_filter_operators').chomp.split(',').inject([]) {|r,v| r << (v.match(':') ? v.split(':') : v )}
167
- # currently selected options
173
+ # currently selected options
168
174
  if session[@form['table']] and session[@form['table']][:filter]
169
175
  field_name, operators_value, dummy = session[@form['table']][:filter].split("\t")
170
176
  else
@@ -190,7 +196,7 @@ end
190
196
  ############################################################################
191
197
  # Creates popup div for setting filter on result set header.
192
198
  ############################################################################
193
- def dc_filter_popup()
199
+ def dc_filter_popup
194
200
  html = %Q[<div class="filter-popup" style="display: none;">
195
201
  <div>#{t('drgcms.filter_set')}</div>
196
202
  <ul>]
@@ -204,20 +210,22 @@ def dc_filter_popup()
204
210
  end
205
211
 
206
212
  ############################################################################
207
- # Creates title div for cmsedit index result set records. Title div also includes paging
208
- # options.
213
+ # Will return title based on @form['title']
209
214
  ############################################################################
210
- def dc_table_title_for_result(result=nil)
211
- title = if @form['title'] # form has title section
212
- if @form['title'].class == Hash
213
- dc_process_eval(@form['title']['eval'], [@form['title']['caption'] || @form['title']['text'], params])
214
- else
215
- t(@form['title'], @form['title'])
216
- end
217
- else # get name from translations
218
- t("helpers.label.#{@form['table']}.tabletitle", @form['table'])
219
- end
220
- dc_table_title(title, result)
215
+ def dc_form_title
216
+ return t("helpers.label.#{@form['table']}.tabletitle", @form['table']) if @form['title'].nil?
217
+ return t(@form['title'], @form['title']) if @form['title'].class == String
218
+
219
+ # Hash
220
+ dc_process_eval(@form['title']['eval'], [@form['title']['caption'] || @form['title']['text'], params])
221
+ end
222
+
223
+ ############################################################################
224
+ # Creates title div for index action. Title div also includes paging options
225
+ # and help link
226
+ ############################################################################
227
+ def dc_title_for_index(result = nil)
228
+ dc_table_title(dc_form_title(), result)
221
229
  end
222
230
 
223
231
  ############################################################################
@@ -225,15 +233,16 @@ end
225
233
  ############################################################################
226
234
  def dc_actions_column
227
235
  actions = @form['result_set']['actions']
228
- return [{}, 0] if actions.nil? or dc_dont?(actions)
229
- # standard actions
236
+ return [{}, 0] if actions.nil? || dc_dont?(actions)
237
+
238
+ # standard actions
230
239
  actions = {'standard' => true} if actions.class == String && actions == 'standard'
231
240
  std_actions = { 2 => 'edit', 5 => 'delete' }
232
241
  if actions['standard']
233
242
  actions.merge!(std_actions)
234
243
  actions.delete('standard')
235
244
  end
236
- #
245
+
237
246
  width = @form['result_set']['actions_width'] || 18*actions.size
238
247
  [actions, width]
239
248
  end
@@ -263,7 +272,7 @@ def dc_actions_for_result(document)
263
272
  # if single definition simulate type parameter
264
273
  yaml = v.class == String ? { 'type' => v } : v
265
274
  # code already includes li tag
266
- if %w(ajax link window submit).include?(yaml['type']) then
275
+ if %w(ajax link window submit).include?(yaml['type'])
267
276
  @record = document # otherwise document fields can't be used as parameters
268
277
  html << dc_link_ajax_window_submit_action(yaml, document)
269
278
  else
@@ -325,7 +334,7 @@ def dc_header_for_result()
325
334
  th = %Q[<div class="th" style="width:#{v['width'] || '15%'};text-align:#{v['align'] || 'left'};" data-name="#{v['name']}"]
326
335
  label = v['caption'] || v['label']
327
336
  label = (v['name'] ? "helpers.label.#{@form['table']}.#{v['name']}" : '') if label.nil?
328
- label = t(label) if label.match(/helpers\./)
337
+ label = t(label) if label.match(/\./)
329
338
  # no sorting when embedded documents or custom filter is active
330
339
  sort_ok = @form['result_set'].nil? || (@form['result_set'] && @form['result_set']['filter'].nil?)
331
340
  sort_ok = sort_ok || (@form['index'] && @form['index']['sort'])
@@ -364,9 +373,9 @@ def dc_clicks_for_result(document)
364
373
  html << ' data-dblclick=' + url_for(opts)
365
374
  else
366
375
  html << (' data-dblclick=' +
367
- url_for(action: 'show', controller: 'cmsedit', id: document.id,
368
- readonly: (params[:readonly] ? 2 : 1), table: params[:table],
369
- form_name: params[:form_name], ids: params[:ids]) ) if @form['form']
376
+ url_for(action: 'show', controller: 'cmsedit', id: document.id, ids: params[:ids],
377
+ readonly: (params[:readonly] ? 2 : 1), table: params[:table],
378
+ form_name: params[:form_name]) ) if @form['form']
370
379
  end
371
380
  html
372
381
  end
@@ -466,8 +475,8 @@ def dc_process_eval(evaluate, parameters)
466
475
  end
467
476
 
468
477
  ############################################################################
469
- # Break eval expression to array by parameters.
470
- # Will break dc_name4_value(one ,"two") => ['dc_name4_value', 'one', 'two']
478
+ # Split eval expression to array by parameters.
479
+ # Will split dc_name4_value(one ,"two") => ['dc_name4_value', 'one', 'two']
471
480
  ############################################################################
472
481
  def dc_eval_to_array(expression)
473
482
  expression.split(/\ |\,|\(|\)/).delete_if {|e| e.blank? }.map {|e| e.gsub(/\'|\"/,'').strip }
@@ -479,44 +488,46 @@ end
479
488
  ############################################################################
480
489
  def dc_process_column_eval(yaml, document)
481
490
  # dc_name_for_id
482
- if yaml['eval'].match('dc_name4_id') || yaml['eval'].match('dc_name_for_id')
483
- prms = dc_eval_to_array(yaml['eval'])
484
- if prms.size == 3
485
- dc_name_for_id(prms[1], prms[2], nil, document[ yaml['name'] ])
491
+ if yaml['eval'].match(/dc_name4_id|dc_name_for_id/)
492
+ parms = dc_eval_to_array(yaml['eval'])
493
+ if parms.size == 3
494
+ dc_name_for_id(parms[1], parms[2], nil, document[ yaml['name'] ])
495
+ else
496
+ dc_name_for_id(parms[1], parms[2], parms[3], document[ yaml['name'] ])
497
+ end
498
+
499
+ # dc_name_for_value from locale definition
500
+ elsif yaml['eval'].match(/dc_name4_value|dc_name_for_value/)
501
+ parms = dc_eval_to_array(yaml['eval'])
502
+ if parms.size == 1
503
+ dc_name_for_value( @form['table'], yaml['name'], document[ yaml['name'] ] )
486
504
  else
487
- dc_name_for_id(prms[1], prms[2], prms[3], document[ yaml['name'] ])
505
+ dc_name_for_value( parms[1], parms[2], document[ yaml['name'] ] )
488
506
  end
489
- # dc_name_for_value from this model
490
- elsif yaml['eval'] == 'dc_name4_value' || yaml['eval'] == 'dc_name_for_value'
491
- dc_name_for_value( @form['table'], yaml['name'], document[ yaml['name'] ] )
492
- # dc_name_for_value from other model
493
- elsif yaml['eval'].match('dc_name4_value') || yaml['eval'].match('dc_name_for_value')
494
- prms = dc_eval_to_array(yaml['eval'])
495
- dc_name_for_value( prms[1], prms[2], document[ yaml['name'] ] )
496
- # for example dc_icon_for_boolean
507
+
508
+ # defined in helpers. For example dc_icon_for_boolean
497
509
  elsif respond_to?(yaml['eval'])
498
- send(yaml['eval'], document[ yaml['name'] ])
499
- # defined in document
510
+ send(yaml['eval'], document[yaml['name']])
511
+
512
+ # defined in model
500
513
  elsif document.respond_to?(yaml['eval'])
501
514
  document.send(yaml['eval'])
515
+
502
516
  # special eval
503
517
  elsif yaml['eval'].match('eval ')
504
518
  # TO DO evaluate with specified parameters
519
+
520
+ # eval with params
505
521
  else
506
- parameters = if yaml['params']
507
- # pass document as parameter
508
- if yaml['params'] == 'document' or yaml['params'] == 'record'
509
- document
510
- else
511
- yaml['params'].chomp.split(',').inject([]) do |result,e|
512
- result << document[e.strip]
513
- end
514
- end
522
+ parms = {}
523
+ if yaml['params'].class == String
524
+ parms = dc_value_for_parameter(yaml['params'], document)
525
+ elsif yaml['params'].class == Hash
526
+ yaml['params'].each { |k, v| parms[k] = dc_value_for_parameter(v) }
515
527
  else
516
- document[ yaml['name'] ]
528
+ parms = document[ yaml['name'] ]
517
529
  end
518
- # evaluate by calling send method
519
- dc_process_eval(yaml['eval'], parameters)
530
+ dc_process_eval(yaml['eval'], parms)
520
531
  end
521
532
  end
522
533
 
@@ -525,7 +536,8 @@ end
525
536
  ############################################################################
526
537
  def dc_style_or_class(selector, yaml, value, record)
527
538
  return '' if yaml.nil?
528
- # alias record and value so both names can be used in eval
539
+
540
+ # alias record and value so both names can be used in eval
529
541
  field, document = value, record
530
542
  html = selector ? "#{selector}=\"" : ''
531
543
  html << if yaml.class == String
@@ -534,7 +546,7 @@ def dc_style_or_class(selector, yaml, value, record)
534
546
  elsif yaml['eval']
535
547
  eval(yaml['eval']) rescue 'background-color:red;'
536
548
  elsif yaml['method']
537
- dc_process_eval(yaml['method'],record)
549
+ dc_process_eval(yaml['method'], record)
538
550
  end
539
551
  html << '"' if selector
540
552
  html