drg_cms 0.6.0.8 → 0.6.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -10
  3. data/app/assets/javascripts/drg_cms/drg_cms.js +208 -81
  4. data/app/assets/stylesheets/drg_cms/drg_cms.css +298 -93
  5. data/app/assets/stylesheets/drg_cms/select-multiple.css +1 -1
  6. data/app/controllers/cmsedit_controller.rb +174 -167
  7. data/app/controllers/dc_application_controller.rb +230 -196
  8. data/app/controllers/dc_common_controller.rb +88 -50
  9. data/app/controls/dc_help_control.rb +138 -0
  10. data/app/controls/dc_report.rb +12 -16
  11. data/app/forms/all_options.yml +14 -5
  12. data/app/forms/cms_menu.yml +7 -1
  13. data/app/forms/dc_big_table.yml +0 -2
  14. data/app/forms/dc_big_table_value.yml +0 -2
  15. data/app/forms/dc_category.yml +2 -1
  16. data/app/forms/dc_design.yml +2 -2
  17. data/app/forms/dc_folder_permission.yml +0 -2
  18. data/app/forms/dc_help_1.yml +110 -0
  19. data/app/forms/dc_journal.yml +3 -1
  20. data/app/forms/dc_json_ld.yml +0 -3
  21. data/app/forms/dc_link.yml +1 -1
  22. data/app/forms/dc_menu.yml +8 -12
  23. data/app/forms/dc_menu_item.yml +2 -3
  24. data/app/forms/dc_page.yml +7 -2
  25. data/app/forms/dc_part.yml +1 -0
  26. data/app/forms/dc_piece.yml +1 -0
  27. data/app/forms/dc_policy.yml +2 -5
  28. data/app/forms/dc_poll.yml +13 -16
  29. data/app/forms/dc_seo.yml +1 -2
  30. data/app/forms/dc_simple_menu.yml +3 -2
  31. data/app/forms/dc_site.yml +5 -8
  32. data/app/forms/dc_user.yml +27 -11
  33. data/app/forms/dc_user_role.yml +3 -0
  34. data/app/helpers/cms_common_helper.rb +68 -4
  35. data/app/helpers/cms_edit_helper.rb +73 -55
  36. data/app/helpers/cms_helper.rb +70 -32
  37. data/app/helpers/cms_index_helper.rb +155 -102
  38. data/app/helpers/dc_application_helper.rb +132 -109
  39. data/app/models/concerns/dc_page_concern.rb +14 -4
  40. data/app/models/concerns/dc_piece_concern.rb +1 -1
  41. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  42. data/app/models/concerns/dc_site_concern.rb +56 -44
  43. data/app/models/concerns/dc_user_concern.rb +58 -19
  44. data/app/models/dc_big_table.rb +2 -2
  45. data/app/models/dc_design.rb +29 -19
  46. data/app/models/dc_filter.rb +28 -22
  47. data/app/models/dc_key_value_store.rb +1 -0
  48. data/app/models/dc_permission.rb +19 -9
  49. data/app/models/dc_policy.rb +25 -14
  50. data/app/models/dc_policy_role.rb +22 -11
  51. data/app/models/dc_temp.rb +8 -1
  52. data/app/models/dc_user_role.rb +2 -2
  53. data/app/models/drgcms_form_fields/comment.rb +11 -2
  54. data/app/models/drgcms_form_fields/date_picker.rb +2 -0
  55. data/app/models/drgcms_form_fields/drgcms_field.rb +2 -1
  56. data/app/models/drgcms_form_fields/embedded.rb +9 -10
  57. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  58. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  59. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  60. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  61. data/app/models/drgcms_form_fields/method.rb +5 -4
  62. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  63. data/app/models/drgcms_form_fields/number_field.rb +4 -3
  64. data/app/models/drgcms_form_fields/readonly.rb +13 -17
  65. data/app/models/drgcms_form_fields/select.rb +24 -25
  66. data/app/models/drgcms_form_fields/text_autocomplete.rb +22 -14
  67. data/app/renderers/dc_page_renderer.rb +7 -6
  68. data/app/renderers/dc_poll_renderer.rb +16 -20
  69. data/app/views/cmsedit/_edit_stuff.html.erb +5 -2
  70. data/app/views/cmsedit/_form.html.erb +3 -2
  71. data/app/views/cmsedit/_result.html.erb +21 -18
  72. data/app/views/cmsedit/edit.html.erb +4 -1
  73. data/app/views/cmsedit/index.html.erb +3 -2
  74. data/app/views/cmsedit/new.html.erb +5 -2
  75. data/app/views/dc_common/_help.html.erb +17 -0
  76. data/app/views/layouts/models.html.erb +2 -1
  77. data/config/locales/drgcms_en.yml +17 -2
  78. data/config/locales/drgcms_sl.yml +20 -2
  79. data/config/locales/models_en.yml +7 -5
  80. data/config/locales/models_sl.yml +12 -9
  81. data/drg_cms.gemspec +16 -16
  82. data/lib/drg_cms/version.rb +1 -1
  83. data/lib/drg_cms.rb +94 -2
  84. metadata +32 -30
  85. data/app/models/__dc_dummy.rb +0 -102
@@ -49,20 +49,17 @@ class Embedded < DrgcmsField
49
49
  ###########################################################################
50
50
  # Render embedded field html code
51
51
  ###########################################################################
52
- def render
53
- #return self if @record.new_record? # would be in error otherwise
52
+ def render
54
53
  # HTML defaults. Some must be set
55
54
  @yaml['html'] ||= {}
56
- @yaml['html']['height'] ||= 300
57
- @yaml['html']['width'] ||= '99%'
55
+ @yaml['html']['width'] ||= '99%'
56
+ html = @yaml['html'].inject('') { |r, val| r << "#{val.first}=\"#{val.last}\" " }
57
+
58
58
  @yaml['action'] ||= 'index'
59
59
  # defaults both way
60
60
  @yaml['table'] ||= @yaml['form_name'] if @yaml['form_name']
61
61
  @yaml['form_name'] ||= @yaml['table'] if @yaml['table']
62
- #
63
- html = ''
64
- @yaml['html'].each {|k,v| html << "#{k}=\"#{v}\" "}
65
- #
62
+
66
63
  if @yaml['name'] == @yaml['table'] or @yaml['table'] == 'dc_memory'
67
64
  tables = @yaml['table']
68
65
  ids = @record.id
@@ -70,9 +67,11 @@ def render
70
67
  tables = @parent.tables.inject('') { |r,v| r << "#{v[1]};" } + @yaml['table']
71
68
  ids = @parent.ids.inject('') { |r,v| r << "#{v};" } + @record.id
72
69
  end
73
- opts = { controller: 'cmsedit', action: @yaml['action'],
70
+ # edit enabled embedded form on a readonly form
71
+ readonly = @yaml['readonly'].class == FalseClass ? nil : @readonly
72
+ opts = { controller: 'cmsedit', action: @yaml['action'],
74
73
  ids: ids, table: tables, form_name: @yaml['form_name'],
75
- field_name: @yaml['name'], iframe: "if_#{@yaml['name']}", readonly: @readonly }
74
+ field_name: @yaml['name'], iframe: "if_#{@yaml['name']}", readonly: readonly }
76
75
  # additional parameters if specified
77
76
  @yaml['params'].each { |k,v| opts[k] = @parent.dc_value_for_parameter(v) } if @yaml['params']
78
77
 
@@ -43,7 +43,7 @@ class FileField < DrgcmsField
43
43
  ###########################################################################
44
44
  def render
45
45
  return self if @readonly
46
- #record = record_text_for(@yaml['name'])
46
+
47
47
  @html << @parent.file_field(nil,@yaml['name'], @yaml['html'])
48
48
  self
49
49
  end
@@ -50,10 +50,10 @@ class FileSelect < DrgcmsField
50
50
  ###########################################################################
51
51
  def render
52
52
  return ro_standard if @readonly
53
- # retrieve html editor from page settings
53
+ # retrieve file_select component from site settings
54
54
  selector_string = @parent.dc_get_site.params['file_select'] if @parent.dc_get_site
55
55
  selector_string ||= 'elfinder'
56
- #
56
+
57
57
  klas_string = selector_string.camelize
58
58
  if DrgcmsFormFields.const_defined?(klas_string)
59
59
  klas = DrgcmsFormFields::const_get(klas_string)
@@ -45,6 +45,7 @@ class HashField < DrgcmsField
45
45
  ###########################################################################
46
46
  def ro_standard()
47
47
  return self if @record[@yaml['name']].nil?
48
+
48
49
  html = ''
49
50
  @record[@yaml['name']].each do |key, value|
50
51
  html << "#{key}:#{value}<br>"
@@ -57,10 +58,10 @@ end
57
58
  ###########################################################################
58
59
  def render
59
60
  return ro_standard if @readonly
61
+
60
62
  set_initial_value
61
- #
62
63
  record = record_text_for(@yaml['name'])
63
- # Convert Hash to values separated by colon
64
+ # Convert Hash to values separated by colon
64
65
  if @record[@yaml['name']]
65
66
  @yaml['html']['value'] = @record[@yaml['name']].to_a.inject('') {|r, e| r << "#{e.first}:#{e.last}\n"}
66
67
  end
@@ -73,12 +74,15 @@ end
73
74
  ###########################################################################
74
75
  def self.get_data(params, name)
75
76
  return nil if params['record'][name].blank?
76
- #
77
- result = params['record'][name].split("\n").select {|e| !e.blank? }
78
- return nil if result.size == 0
79
- # convert to Hash
77
+
78
+ result = params['record'][name].split("\n").select { |e| !e.blank? }
79
+ return if result.size == 0
80
+ # convert to Hash
80
81
  ret = {}
81
- result.map { |e| key,value = e.chomp.split(':'); ret[key.strip] = value.strip unless value.blank? }
82
+ result.map do |e|
83
+ key, value = e.chomp.split(':')
84
+ ret[key.strip] = value.strip if value.present?
85
+ end
82
86
  ret
83
87
  end
84
88
 
@@ -53,13 +53,13 @@ def render
53
53
  @yaml['html'] ||= {}
54
54
  @yaml['html']['class'] ||= 'dc-link dc-animate'
55
55
  @yaml['html'].symbolize_keys!
56
- #
56
+
57
57
  @yaml[:id] = record._id if @yaml[:id] == 'id'
58
58
  url = @yaml['url'] || "#{@yaml[:controller]}/#{@yaml[:action]}/#{@yaml[:id]}"
59
59
  url.gsub!('//','/') # no action and id
60
60
  url = '/' + @yaml['url'] unless url[0,1] == '/' # no leading /
61
61
  url.chop if url[0,-1] == '/' # remove trailing /
62
- #
62
+
63
63
  caption = @yaml['caption'] || @yaml['text']
64
64
  @html << @parent.dc_link_to(caption, @yaml['icon'], url, @yaml['html'])
65
65
  self
@@ -24,9 +24,10 @@ module DrgcmsFormFields
24
24
 
25
25
  ###########################################################################
26
26
  # Implementation of custom DRG CMS form field. Method field will call method or class method
27
- # defined in eval option and add returned code to HTML output code. This might prove usefull in
28
- # cases where form contains complex dta stgructer or set of pictures which can not
29
- # be simply displayed by any other field.
27
+ # defined in eval option and add returned code to HTML output code.
28
+ #
29
+ # It can be used in case when form contains complex data structure. For example set of pictures which can not
30
+ # be simply displayed by any other DRG Forms field.
30
31
  #
31
32
  # Form example:
32
33
  # 50:
@@ -44,7 +45,7 @@ class Method < DrgcmsField
44
45
  ###########################################################################
45
46
  def render
46
47
  # might be defined as my_method or MyClass.my_method
47
- clas, method = @yaml['eval'].split('.')
48
+ clas, method = @yaml['eval'].split(/\.|\,/).map(&:strip)
48
49
  if method.nil?
49
50
  if @parent.respond_to?(clas)
50
51
  @html << @parent.send(clas, @record, @yaml, @readonly)
@@ -77,7 +77,7 @@ def render
77
77
  method = @yaml['search']['method']
78
78
  search = method.nil? ? field_name : "#{field_name}.#{method}"
79
79
  elsif @yaml['search'].to_s.match(/\./)
80
- table, field_name, method = @yaml['search'].split(/\.|\,/)
80
+ table, field_name, method = @yaml['search'].split(/\.|\,/).map(&:strip)
81
81
  search = method.nil? ? field_name : "#{field_name}.#{method}"
82
82
  else # search and table name are separated
83
83
  search = field_name = @yaml['search']
@@ -69,14 +69,14 @@ def render
69
69
  @yaml['html']['data-delimiter'] = @yaml.dig('format','delimiter') || I18n.t('number.currency.format.delimiter')
70
70
  @yaml['html']['data-separator'] = @yaml.dig('format','separator') || I18n.t('number.currency.format.separator')
71
71
  # @yaml['html']['data-currency'] = @yaml.dig('format','currency') == 'yes' ? I18n.t('number.currency.format.currency') : @yaml.dig('format','currency')
72
- value = @record[@yaml['name']] || 0
72
+ value = @yaml['html']['value'] || @record[@yaml['name']] || 0
73
73
  @yaml['html']['value'] = @parent.dc_format_number(value, @yaml['html']['data-decimal'], @yaml['html']['data-separator'], @yaml['html']['data-delimiter'] )
74
74
 
75
75
  return ro_standard(@yaml['html']['value']) if @readonly
76
76
 
77
77
  @yaml['html']['autocomplete'] ||= 'off'
78
78
  @html << @parent.hidden_field( record, @yaml['name'], value: value )
79
- @html << @parent.text_field( nil,"record_#{@yaml['name']}_", @yaml['html'])
79
+ @html << @parent.text_field( nil, "record_#{@yaml['name']}_", @yaml['html'])
80
80
  self
81
81
  end
82
82
 
@@ -85,7 +85,8 @@ end
85
85
  ###########################################################################
86
86
  def self.get_data(params, name)
87
87
  return 0 if params['record'][name].blank?
88
- params['record'][name].match('.') ? params['record'][name].to_f : Integer.new(params['record'][name])
88
+
89
+ params['record'][name].match('.') ? params['record'][name].to_f : params['record'][name].to_i
89
90
  end
90
91
 
91
92
  end
@@ -51,29 +51,25 @@ class Readonly < DrgcmsField
51
51
  ###########################################################################
52
52
  # Render readonly field html code
53
53
  ###########################################################################
54
- def render
54
+ def render
55
55
  @html << @parent.hidden_field('record', @yaml['name']) # retain field as hidden field
56
56
  @html << '<div class="dc-readonly">'
57
-
57
+
58
58
  @html << if @yaml['eval']
59
- if @yaml['eval'].match('dc_name4_id')
60
- a = @yaml['eval'].split(',')
61
- if a.size == 3
62
- @parent.dc_name4_id(a[1], a[2], nil, @record[ @yaml['name'] ])
63
- else
64
- @parent.dc_name4_id(a[1], a[2], a[3], @record[ @yaml['name'] ])
65
- end
66
-
67
- # @parent.dc_name4_id(a[1], a[2], @record[ @yaml['name'] ])
68
- else
69
- eval( "#{@yaml['eval']} '#{@record.send(@yaml['name'])}'")
70
- end
71
- else
72
- @parent.dc_format_value(@record.send(@yaml['name']),@yaml['format'])
73
- end
59
+ if @yaml['eval'].match(/dc_name4_id|dc_name_for_id/)
60
+ parms = @parent.dc_eval_to_array(@yaml['eval'])
61
+ parms << nil if parms.size == 3
62
+ @parent.dc_name_for_id(parms[1], parms[2], parms[3], @record[@yaml['name']])
63
+ else
64
+ eval( "#{@yaml['eval']} '#{@record.send(@yaml['name'])}'")
65
+ end
66
+ else
67
+ @parent.dc_format_value(@record.send(@yaml['name']), @yaml['format'])
68
+ end
74
69
  @html << '</div>'
75
70
  self
76
71
  end
72
+
77
73
  end
78
74
 
79
75
  end
@@ -96,7 +96,7 @@ def choices_in_eval(e)
96
96
  if @yaml['depend'].nil?
97
97
  method = e.split(/\ |\(/).first
98
98
  return eval(e) if respond_to?(method) # id method defined here
99
- return eval('@parent.'+e) if @parent.respond_to?(method) # is method defined in helpers
99
+ return eval('@parent.' + e) if @parent.respond_to?(method) # is method defined in helpers
100
100
  # eval whatever it is there
101
101
  eval e
102
102
  else
@@ -120,20 +120,20 @@ end
120
120
  ###########################################################################
121
121
  def get_choices
122
122
  begin
123
- choices = case
124
- when @yaml['choices'] then
125
- @yaml['choices'].match('helpers.') ? choices_in_helper(@yaml['choices']) : @yaml['choices']
123
+ choices = case
126
124
  when @yaml['eval'] then
127
125
  choices_in_eval(@yaml['eval'])
126
+ when @yaml['choices'] then
127
+ @yaml['choices'].match('helpers.') ? choices_in_helper(@yaml['choices']) : @yaml['choices']
128
128
  else
129
129
  choices_in_helper()
130
130
  end
131
- # Convert string to Array
132
- choices.class == String ?
133
- choices.chomp.split(',').inject([]) { |r,v| r << (v.match(':') ? v.split(':') : v ) } :
134
- choices
135
- rescue Exception => e
136
- Rails.logger.debug "Error in select eval. #{e.message}\n"
131
+ return choices unless choices.class == String
132
+
133
+ choices.chomp.split(',').map { |e| e.match(':') ? e.split(':') : e }
134
+ rescue Exception => e
135
+ Rails.logger.debug "\nError in select eval. #{e.message}\n"
136
+ Rails.logger.debug(e.backtrace.join($/)) if Rails.env.development?
137
137
  ['error'] # return empty array when error occures
138
138
  end
139
139
  end
@@ -143,8 +143,8 @@ end
143
143
  ###########################################################################
144
144
  def add_view_code
145
145
  return '' if (data = @record.send(@yaml['name'])).blank?
146
- ar = @yaml['view'].split(/\ |\,/).delete_if {|e| e.blank?}
147
- table, form_name = *ar
146
+
147
+ table, form_name = @yaml['view'].split(/\ |\,/).delete_if { |e| e.blank? }
148
148
  url = @parent.url_for(controller: :cmsedit, id: data, action: :edit, table: table, form_name: form_name, readonly: true, window_close: 1 )
149
149
  icon = @parent.fa_icon('eye')
150
150
  %(<span class="dc-window-open" data-url="#{url}">#{icon}</span>)
@@ -157,9 +157,9 @@ def ro_standard
157
157
  value = @record.respond_to?(@yaml['name']) ? @record.send(@yaml['name']) : nil
158
158
  return self if value.blank?
159
159
 
160
+ html = ''
160
161
  choices = get_choices()
161
162
  if value.class == Array # multiple choices
162
- html = ''
163
163
  value.each do |element|
164
164
  choices.each do |choice|
165
165
  if choice.to_s == element.to_s
@@ -168,17 +168,17 @@ def ro_standard
168
168
  end
169
169
  end
170
170
  end
171
- return super(html)
172
171
  else
173
172
  choices.each do |choice|
174
173
  if choice.class == Array
175
- return super(choice.first) if choice.last.to_s == value.to_s
174
+ (html = choice.first; break) if choice.last.to_s == value.to_s
176
175
  else
177
- return super(choice) if choice.to_s == value.to_s
176
+ (html = choice; break) if choice.to_s == value.to_s
178
177
  end
179
178
  end
179
+ html << add_view_code if @yaml['view']
180
180
  end
181
- super('')
181
+ super(html)
182
182
  end
183
183
 
184
184
  ###########################################################################
@@ -186,16 +186,16 @@ end
186
186
  ###########################################################################
187
187
  def render
188
188
  return ro_standard if @readonly
189
+
189
190
  set_initial_value('html','selected')
190
191
  # separate options and html part
191
- @yaml['html'].symbolize_keys!
192
192
  html_part = {}
193
- html_part[:class] = @yaml['html'].delete(:class) if @yaml['html'][:class]
194
- html_part[:id] = @yaml['html'].delete(:id) if @yaml['html'][:id]
195
- html_part[:style] = @yaml['html'].delete(:style) if @yaml['html'][:style]
193
+ @yaml['html'].symbolize_keys!
194
+ %i(class id style required).each { |sym| html_part[sym] = @yaml['html'].delete(sym) if html_part[sym]}
195
+ html_part[:multiple] = true if @yaml['multiple']
196
+
196
197
  record = record_text_for(@yaml['name'])
197
- if @yaml['multiple']
198
- html_part[:multiple] = true
198
+ if html_part[:multiple]
199
199
  @html << @parent.select(record, @yaml['name'], get_choices, @yaml['html'], html_part)
200
200
  @js << "$('##{record}_#{@yaml['name']}').selectMultiple();"
201
201
  else
@@ -212,12 +212,11 @@ end
212
212
  def self.get_data(params, name)
213
213
  if params['record'][name].class == Array
214
214
  params['record'][name].delete_if {|e| e.blank? }
215
- return nil if params['record'][name].size == 0
215
+ return if params['record'][name].size == 0
216
216
 
217
217
  # convert to BSON objects
218
218
  is_id = BSON::ObjectId.legal?(params['record'][name].first)
219
219
  return params['record'][name].map{ |e| BSON::ObjectId.from_string(e) } if is_id
220
- return params['record'][name]
221
220
  end
222
221
  params['record'][name]
223
222
  end
@@ -59,7 +59,7 @@ def render
59
59
  ret_name = @yaml['search']['field']
60
60
  method = @yaml['search']['method']
61
61
  elsif @yaml['search'].match(/\./)
62
- table, ret_name, method = @yaml['search'].split('.')
62
+ table, ret_name, method = @yaml['search'].split(/\.|\,/).map(&:strip)
63
63
  else
64
64
  ret_name = @yaml['search']
65
65
  end
@@ -74,23 +74,29 @@ def render
74
74
  nil
75
75
  end
76
76
  end
77
- return 'Table or field keyword not defined!' unless (table and ret_name)
77
+ return ro_standard 'Table or field keyword not defined!' unless (table && ret_name)
78
78
  # TODO check if table exists
79
- t = table.classify.constantize
79
+ model_klass = table.classify.constantize
80
80
  # find record and return value of field
81
81
  value_send_as = 'p_' + @yaml['name']
82
82
  value = if @parent.params[value_send_as]
83
- @parent.params[value_send_as]
84
- elsif @record and @record[@yaml['name']]
85
- @record[@yaml['name']]
86
- end
83
+ @parent.params[value_send_as]
84
+ elsif @record && @record[@yaml['name']]
85
+ @record[@yaml['name']]
86
+ end
87
+ not_id = @parent.dc_dont?(@yaml['is_id'], false)
87
88
  # Found value to be written in field. If field is not found write out value.
88
- if value
89
- record = t.find(value) unless @yaml['not_id'] # don't if it's is not an id
90
- value_displayed = record ? record.send(ret_name) : value
89
+ value_displayed = value
90
+ if value && !not_id
91
+ if BSON::ObjectId.legal?(value)
92
+ record = model_klass.find(value)
93
+ value_displayed = record.send(ret_name) if record
94
+ else
95
+ value_displayed = model_klass.send(ret_name, method, @parent, value)
96
+ end
91
97
  end
92
- # return if readonly
93
98
  return ro_standard(value_displayed) if @readonly
99
+
94
100
  # Add method back, so autocomplete will know that it must search for method inside class
95
101
  ret_name = "#{ret_name}.#{method}" if method
96
102
  @yaml['html'] ||= {}
@@ -108,7 +114,6 @@ def render
108
114
  @html << '</span>' + @parent.hidden_field(record, @yaml['name'], value: value) # actual value will be in hidden field
109
115
  # JS stuff
110
116
  # allow unselected values on is_id: false option
111
- not_id = @parent.dc_dont?(@yaml['is_id'], false)
112
117
  not_id_code = %(
113
118
  if (ui.item == null) {
114
119
  $("##{record}_#{@yaml['name']}").val($("##{record}__#{@yaml['name']}").val() );
@@ -120,7 +125,7 @@ $(document).ready(function() {
120
125
  $("##{record}_#{_name}").autocomplete( {
121
126
  source: function(request, response) {
122
127
  $.ajax({
123
- url: '/dc_common/autocomplete',
128
+ url: "/dc_common/autocomplete",
124
129
  type: "POST",
125
130
  dataType: "json",
126
131
  data: { input: request.term, table: "#{table}", search: "#{ret_name}" #{(',id: "'+@yaml['id'] + '"') if @yaml['id']} },
@@ -131,11 +136,13 @@ $(document).ready(function() {
131
136
  }
132
137
  });
133
138
  },
139
+
134
140
  change: function (event, ui) {
135
141
  #{not_id_code}
142
+ if (ui.item == null) return;
136
143
  $("##{record}_#{@yaml['name']}").val(ui.item.id);
137
-
138
144
  },
145
+
139
146
  minLength: 2
140
147
  });
141
148
  });
@@ -152,4 +159,5 @@ def self.get_data(params, name)
152
159
  end
153
160
 
154
161
  end
162
+
155
163
  end
@@ -72,6 +72,7 @@ end
72
72
  #########################################################################
73
73
  def iframe
74
74
  return '' if @page.if_url.blank?
75
+
75
76
  html = "\n<iframe"
76
77
  html << " id=\"#{@page.if_id}\"" unless @page.if_id.blank?
77
78
  html << " class=\"#{@page.if_class}\"" unless @page.if_class.blank?
@@ -79,7 +80,7 @@ def iframe
79
80
  html << " height=\"#{@page.if_height}\"" unless @page.if_height.blank?
80
81
  html << " width=\"#{@page.if_width}\"" unless @page.if_width.blank?
81
82
  html << " scrolling=\"#{@page.if_scroll}\""
82
- # Parameters
83
+ # Parameters
83
84
  parameters = @page.if_url.match(/\?/) ? '' : '?'
84
85
  params = YAML.load(@page.if_params) rescue {}
85
86
  params = {} unless params.class == Hash
@@ -98,20 +99,20 @@ end
98
99
  def default
99
100
  can_view, msg = dc_user_can_view(@parent, @page)
100
101
  return msg unless can_view
101
- #
102
- html = ''
102
+
103
+ html = "<div class=\"#{@page.div_class} #{@opts[:div_class]}\">"
103
104
  html << dc_page_edit_menu() if @opts[:edit_mode] > 1
104
105
  @parent.page_title = @page.title.blank? ? @page.subject : @page.title
105
106
  html << @page.body
106
- # render poll if defined
107
+ # render poll if defined
107
108
  if @page.dc_poll_id
108
109
  @opts.merge!(:poll_id => @page.dc_poll_id, :return_to => @parent.request.url, method: nil)
109
110
  comment = DcPollRenderer.new(@parent, @opts)
110
111
  html << "<div class='wrap row'>#{comment.render_html}</div>"
111
112
  @css << "\n#{comment.render_css}"
112
113
  end
113
- # also add iframe
114
- html << iframe()
114
+ # also add iframe
115
+ html << iframe() << '</div>'
115
116
  end
116
117
 
117
118
  #########################################################################
@@ -60,7 +60,7 @@ def do_one_item(poll, yaml)
60
60
  # label
61
61
  text = yaml['text'].match(/\./) ? t(yaml['text']) : yaml['text']
62
62
  if yaml['mandatory']
63
- text << ( poll.display == 'in' ? ' *' : '<font color="red"> *</font>' )
63
+ text << ( poll.display == 'in' ? ' *' : '<span class="required"> *</span>' )
64
64
  yaml['html'] ||= {}
65
65
  yaml['html']['required'] = true
66
66
  else
@@ -108,11 +108,7 @@ def do_one_item(poll, yaml)
108
108
  if yaml['type'].match(/submit_tag|link_to/)
109
109
  # There can be more than one links on form. End the data at first link or submit.
110
110
  if !@end_of_data
111
- html << if poll.display == 'lr'
112
- "</div><br>\n"
113
- else
114
- "</div>\n"
115
- end
111
+ html << (poll.display == 'lr' ? "</div><br>\n" : "</div>\n")
116
112
  # captcha
117
113
  if poll.captcha_type.to_s.size > 1
118
114
  @opts.merge!(:captcha_type => poll.captcha_type)
@@ -166,18 +162,18 @@ def default
166
162
 
167
163
  poll = DcPoll.find(poll_id)
168
164
  poll = DcPoll.find_by(name: poll_id) if poll.nil? # name instead of id
169
- return "<div class=\"dc-form-error\">Invalid Poll id #{poll_id}</div>" if poll.nil?
165
+ return %(<div class="dc-form-error">Invalid Poll id #{poll_id}</div>) if poll.nil?
170
166
  # If parent cant be seen. so cant be polls
171
167
  can_view, message = dc_user_can_view(@parent, @parent.page)
172
- return "<div class=\"dc-form-error\">#{message}</div>" unless can_view
168
+ return %(<div class="dc-form-error">#{message}</div>) unless can_view
173
169
 
174
- html = @opts[:div] ? "<div id='#{@opts[:div]}'>" : ''
170
+ html = @opts[:div] ? %(<div id="#{@opts[:div]}"'>) : ''
175
171
  html << '<a name="poll-top"></a>'
176
172
  unless poll.pre_display.blank?
177
173
  begin
178
174
  continue, message = eval_pre_display(poll.pre_display)
179
175
  rescue Exception => e
180
- return "<div class=\"dc-form-error\">Error! Poll pre display. Error: #{e.message}</div>"
176
+ return %(<div class="dc-form-error">Error! Poll pre display. Error: #{e.message}</div>)
181
177
  end
182
178
  return message unless continue
183
179
 
@@ -188,11 +184,11 @@ def default
188
184
  # If flash[:record] is present copy content to params record hash
189
185
  @parent.flash[:record].each {|k,v| @parent.params["p_#{k}"] = v } if @parent.flash[:record]
190
186
  # Error during procesing request
191
- html << "<div class=\"dc-form-error\">#{@parent.flash[:error]}</div>\n" if @parent.flash[:error].to_s.size > 0
192
- html << "<div class=\"dc-form-info\">#{@parent.flash[:info]}</div>\n" if @parent.flash[:info]
187
+ html << %(<div class="dc-form-error">#{@parent.flash[:error]}</div>\n) if @parent.flash[:error].to_s.size > 0
188
+ html << %(<div class="dc-form-info">#{@parent.flash[:info]}</div>\n) if @parent.flash[:info]
193
189
  end
194
190
  # div and form tag
195
- html << "<div class=\"poll-div\">\n"
191
+ html << %(<div class="poll-div">\n)
196
192
  # edit link
197
193
  if @opts[:edit_mode] > 1
198
194
  @opts[:editparams].merge!( controller: 'cmsedit', action: 'edit', id: poll._id, table: 'dc_poll', form_name: 'dc_poll' )
@@ -208,13 +204,13 @@ def default
208
204
  @parent.form_tag( poll.parameters, method: :put)
209
205
  end
210
206
  # header, - on first position will not display title
211
- html << "<div class='poll-title'>#{poll.title}</div>" unless poll.title[0] == '-'
212
- html << poll.sub_text.to_s
207
+ html << %(<div class="poll-title">#{poll.title}</div>) unless poll.title[0] == '-'
208
+ html << %(<div class="poll-text">#{poll.sub_text}</div>)
213
209
  html << if poll.display == 'lr'
214
- "\n" + '<div class="poll-data-table">'
215
- else
216
- '<div class="poll-data-div">' + "\n"
217
- end
210
+ %(\n<div class="poll-data-table">)
211
+ else
212
+ %(<div class="poll-data-div">\n)
213
+ end
218
214
  # items. Convert each item to yaml
219
215
  @end_od_data = false
220
216
  if poll.form.to_s.size < 10
@@ -232,9 +228,9 @@ def default
232
228
  yaml['text'] = item.text
233
229
  yaml['mandatory'] = item.mandatory
234
230
  yaml['type'] = item.type
231
+
235
232
  html << do_one_item(poll, yaml)
236
233
  end
237
- # FORM. Just call do_one_item for each form item
238
234
  else
239
235
  yaml = YAML.load(poll.form.gsub('&nbsp;',' ')) # very annoying. They come with copy&paste ;-)
240
236
  # if entered without numbering yaml is returned as Hash otherwise as Array
@@ -38,11 +38,14 @@
38
38
 
39
39
  </div>
40
40
  </div>
41
-
42
- <div class="cmsedit-container">
41
+
42
+ <div id="menu-hamburger"><%= fa_icon('bars') %></div>
43
+
44
+ <div class="cmsedit-container">
43
45
  <div id="menu">
44
46
  <%= dc_choices4_cmsmenu.html_safe %>
45
47
  </div>
48
+
46
49
  <div class="cmsedit-iframe" style="width: 99%;">
47
50
  <iframe id="iframe_cms" name="iframe_cms"></iframe>
48
51
  </div>
@@ -1,6 +1,7 @@
1
1
 
2
- <%= dc_flash_messages %>
3
- <%= dc_error_messages_for @record %>
2
+ <%= dc_flash_messages %>
3
+ <%= dc_error_messages_for @record %>
4
+ <%= dc_warning_messages_for @record %>
4
5
 
5
6
  <div class="dc-form-frame">
6
7
 
@@ -1,24 +1,27 @@
1
1
 
2
2
  <div class="dc-table-frame">
3
3
 
4
- <% unless @records.nil? %>
5
- <%= dc_background_for_result(:start) %>
6
-
7
- <%= dc_header_for_result %>
8
- <% for document in @records %>
9
- <%= dc_row_for_result(document) %>
10
- <%= dc_actions_for_result(document) %>
11
- <%= dc_columns_for_result(document) %>
12
- </div>
13
- <% end %>
14
- <% if @record_footer %>
15
- <div class="dc-result-data footer">
16
- <%= dc_actions_column_for_footer() %>
17
- <%= dc_columns_for_result(@record_footer) %>
18
- </div>
19
- <% end %>
20
-
21
- <%= dc_background_for_result(:end) %>
4
+ <% if @form['result_set']['type'] == 'method' %>
5
+ <%= dc_process_result_set_method %>
6
+ <% elsif @records %>
7
+ <%= dc_background_for_result(:start) %>
8
+ <%= dc_header_for_result %>
9
+
10
+ <% for document in @records %>
11
+ <%= dc_row_for_result(document) %>
12
+ <%= dc_actions_for_result(document) %>
13
+ <%= dc_columns_for_result(document) %>
14
+ </div>
15
+ <% end %>
16
+
17
+ <% if @record_footer %>
18
+ <div class="dc-result-data footer">
19
+ <%= dc_actions_column_for_footer() %>
20
+ <%= dc_columns_for_result(@record_footer) %>
21
+ </div>
22
+ <% end %>
23
+
24
+ <%= dc_background_for_result(:end) %>
22
25
  <% end %>
23
26
  <%= dc_filter_popup() %>
24
27