drg_cms 0.6.1.6 → 0.6.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +203 -24
  3. data/app/assets/javascripts/drg_cms/drg_cms.js +183 -95
  4. data/app/assets/stylesheets/drg_cms/drg_cms.css +542 -509
  5. data/app/assets/stylesheets/drg_cms_application.css +1 -1
  6. data/app/assets/stylesheets/drg_cms_cms.css +1 -4
  7. data/app/controllers/cmsedit_controller.rb +25 -103
  8. data/app/controllers/dc_common_controller.rb +6 -5
  9. data/app/controls/browse_models_control.rb +15 -26
  10. data/app/controls/cmsedit_control.rb +125 -0
  11. data/app/controls/dc_help_control.rb +1 -1
  12. data/app/controls/dc_page_control.rb +0 -1
  13. data/app/controls/dc_poll_result_control.rb +1 -1
  14. data/app/controls/dc_report.rb +1 -1
  15. data/app/forms/all_options.yml +1 -1
  16. data/app/forms/cms_menu.yml +24 -24
  17. data/app/forms/dc_browse_fields.yml +13 -9
  18. data/app/forms/dc_poll_result_export.yml +1 -1
  19. data/app/helpers/cms_common_helper.rb +7 -5
  20. data/app/helpers/cms_edit_helper.rb +52 -45
  21. data/app/helpers/cms_helper.rb +76 -40
  22. data/app/helpers/cms_index_helper.rb +180 -139
  23. data/app/helpers/dc_application_helper.rb +37 -43
  24. data/app/models/concerns/dc_page_concern.rb +1 -1
  25. data/app/models/dc_filter.rb +30 -22
  26. data/app/models/dc_json_ld.rb +1 -1
  27. data/app/models/dc_part.rb +19 -9
  28. data/app/models/drgcms_form_fields/drgcms_field.rb +10 -4
  29. data/app/models/drgcms_form_fields/link_to.rb +1 -1
  30. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +5 -5
  31. data/app/models/drgcms_form_fields/readonly.rb +3 -0
  32. data/app/models/drgcms_form_fields/select.rb +8 -7
  33. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  34. data/app/renderers/dc_part_renderer.rb +1 -1
  35. data/app/renderers/dc_poll_renderer.rb +1 -1
  36. data/app/views/cmsedit/_edit_stuff.html.erb +12 -12
  37. data/app/views/cmsedit/login.html.erb +1 -1
  38. data/app/views/dc_common/paste_clipboard.html.erb +1 -1
  39. data/config/locales/drgcms_en.yml +2 -1
  40. data/config/locales/drgcms_sl.yml +2 -1
  41. data/config/locales/kaminari.yml +1 -1
  42. data/drg_cms.gemspec +1 -1
  43. data/lib/drg_cms/version.rb +1 -1
  44. data/lib/drg_cms.rb +4 -4
  45. metadata +4 -5
  46. data/app/views/cmsedit/__remove_edit_stuff.js.erb +0 -6
  47. data/app/views/cmsedit/__show.html.erb +0 -21
@@ -260,9 +260,9 @@ def dc_table_title(text, result_set = nil)
260
260
  c = %(<div class="dc-title">#{text})
261
261
  # help button
262
262
  type = result_set.nil? ? 'form' : 'index'
263
- form_name = params[:form_name] || params[:table]
264
- url = url_for(controller: :dc_common, action: :help, type: type, form_name: form_name)
265
- c << %(<div class="dc-help dc-link-ajax" data-url=#{url}>#{fa_icon('question-circle')}</div>)
263
+ form_name = CmsHelper.form_param(params) || CmsHelper.table_param(params)
264
+ url = url_for(controller: :dc_common, action: :help, type: type, f: form_name)
265
+ c << %(<div class="dc-help-icon dc-link-ajax" data-url=#{url}>#{fa_icon('question-circle')}</div>)
266
266
 
267
267
  if result_set and result_set.respond_to?(:current_page)
268
268
  c << %(<div class="dc-paginate">#{paginate(result_set, :params => {action: 'index', clear: 'no', filter: nil})}</div>)
@@ -281,21 +281,19 @@ def dc_edit_title
281
281
  session[:form_processing] = "form:title:"
282
282
  title = @form['form']['title']
283
283
  # defined as form:title:edit
284
- if title and title['edit'] and !@form['readonly']
284
+ if title && title['edit'] && !@form['readonly']
285
285
  t( title['edit'], title['edit'] )
286
- elsif title and title['show'] and @form['readonly']
286
+ elsif title && title['show'] && @form['readonly']
287
287
  t( title['show'], title['show'] )
288
288
  else
289
289
  # concatenate title
290
290
  c = (@form['readonly'] ? t('drgcms.show') : t('drgcms.edit')) + " : "
291
- c << (@form['title'].class == String ? t( @form['title'], @form['title'] ) : t_tablename(@form['table'])) + ' : '
292
- title = (title and title['field']) ? title['field'] : @form['form']['edit_title']
293
- dc_deprecate('form:edit_title will be deprecated. Use form:title:field instead.') if @form['form']['edit_title']
291
+ c << (@form['title'].class == String ? t( @form['title'], @form['title'] ) : t_tablename(@form['table']))
292
+ title = title.try('field')
294
293
 
295
- c << "#{@record[ title ]} : " if title and @record.respond_to?(title)
296
- c << @record.id if @record
294
+ c << "#{@record[ title ]}" if title && @record.respond_to?(title)
295
+ c
297
296
  end
298
- c
299
297
  end
300
298
 
301
299
  ############################################################################
@@ -341,10 +339,10 @@ end
341
339
  # Similar to rails submit_tag, but also takes care of link icon, translation, ...
342
340
  ############################################################################
343
341
  def dc_submit_tag(caption, icon, parms, rest={})
344
- parms['class'] ||= 'dc-submit'
342
+ parms['class'] ||= 'dc-link'
345
343
  if icon
346
344
  icon_image = if icon.match(/\./)
347
- image_tag(icon, class: 'dc-animate')
345
+ image_tag(icon)
348
346
  elsif icon.match('<i')
349
347
  icon
350
348
  else
@@ -360,10 +358,10 @@ end
360
358
  # Returns icon code if icon is specified
361
359
  ############################################################################
362
360
  def dc_icon_for_link(icon)
363
- return nil if icon.nil?
361
+ return '' if icon.blank?
364
362
 
365
363
  if icon.match(/\./)
366
- _origin.image_tag(icon, class: 'dc-link-img dc-animate')
364
+ _origin.image_tag(icon, class: 'dc-link-img')
367
365
  elsif icon.match('<i')
368
366
  icon
369
367
  else
@@ -379,20 +377,20 @@ def dc_link_to(caption, icon, parms, rest={})
379
377
  if parms.class == Hash
380
378
  parms.stringify_keys!
381
379
  rest.stringify_keys!
382
- rest['class'] = rest['class'].to_s + ' dc-animate' unless rest['class'].to_s.match('dc-animate')
380
+ url = parms.delete('url')
383
381
  rest['target'] ||= parms.delete('target')
384
382
  parms['controller'] ||= 'cmsedit'
385
383
  icon_pos = parms.delete('icon_pos') || 'first'
386
384
  end
387
- #
385
+
388
386
  icon_image = dc_icon_for_link(icon)
389
387
  if caption
390
388
  caption = t(caption, caption)
391
389
  icon_image << ' ' if icon_image
392
390
  end
393
- icon_pos == 'first' ?
394
- _origin.link_to("#{icon_image}#{caption}".html_safe, parms, rest) :
395
- _origin.link_to("#{caption} #{icon_image}".html_safe, parms, rest)
391
+
392
+ body = (%w[first left].include?(icon_pos) ? "#{icon_image}#{caption}" : "#{caption} #{icon_image}").html_safe
393
+ url ? _origin.link_to(body, url, rest) : _origin.link_to(body, parms, rest)
396
394
  end
397
395
 
398
396
  ####################################################################
@@ -417,7 +415,7 @@ def dc_flash_messages()
417
415
  _origin.flash[:info] = nil
418
416
  _origin.flash[:note] = nil
419
417
  end
420
- # Update fields on the form
418
+ # Update fields on the form
421
419
  if _origin.flash[:update]
422
420
  html << "<div class=\"dc-form-updates\">\n"
423
421
  _origin.flash[:update].each do |field, value|
@@ -461,13 +459,11 @@ def dc_error_messages_for(doc)
461
459
  r << "<li>#{label} : #{error.message}</li>"
462
460
  end
463
461
 
464
- html = <<eot
462
+ %(
465
463
  <div class="dc-form-error">
466
464
  <h2>#{t('drgcms.errors_no')} #{doc.errors.size}</h2>
467
465
  <ul>#{msgs}</ul>
468
- </div>
469
- eot
470
- html.html_safe
466
+ </div>).html_safe
471
467
  end
472
468
 
473
469
  ####################################################################
@@ -490,13 +486,11 @@ def dc_warning_messages_for(doc)
490
486
  msgs << "<li>#{label} : #{error.message}</li>"
491
487
  end
492
488
 
493
- html = <<eot
489
+ %(
494
490
  <div class="dc-form-warning">
495
491
  <h2>#{t('drgcms.warnings_no')} #{doc.warnings.size}</h2>
496
492
  <ul>#{msgs}</ul>
497
- </div>
498
- eot
499
- html.html_safe
493
+ </div>).html_safe
500
494
  end
501
495
 
502
496
  ####################################################################
@@ -534,8 +528,8 @@ def dc_link_for_create(opts)
534
528
  opts['action'] = 'new'
535
529
  opts['controller'] ||= 'cmsedit'
536
530
  js = "$('##{target}').attr('src', '#{_origin.url_for(opts)}'); return false;"
537
- dc_link_to(nil, _origin.fa_icon('plus-circle lg', class: 'dc-inline-link'), '#',
538
- { onclick: js, title: title, alt: 'Create'}).html_safe
531
+ dc_link_to(nil, _origin.fa_icon('plus-circle'), '#',
532
+ { onclick: js, title: title, alt: 'Create', class: 'dc-inline-link'}).html_safe
539
533
  end
540
534
 
541
535
  ####################################################################
@@ -557,13 +551,13 @@ def dc_link_for_edit(opts)
557
551
  title = opts.delete('title') #
558
552
  title = t(title)
559
553
  target = opts.delete('target') || 'iframe_cms'
560
- icon = opts.delete('icon') || 'edit lg'
554
+ icon = opts.delete('icon') || 'edit-o'
561
555
  opts['controller'] ||= 'cmsedit'
562
556
  opts['action'] ||= 'edit'
563
557
  opts['form_name'] ||= opts['table'].to_s.split(';').last
564
558
  js = "$('##{target}').attr('src', '#{_origin.url_for(opts)}'); return false;"
565
- dc_link_to(nil, _origin.fa_icon(icon, class: 'dc-inline-link'), '#',
566
- { onclick: js, title: title, alt: 'Edit'})
559
+ dc_link_to(nil, _origin.fa_icon(icon), '#',
560
+ { onclick: js, title: title, class: 'dc-inline-link', alt: 'Edit'})
567
561
  end
568
562
 
569
563
  ####################################################################
@@ -572,8 +566,8 @@ end
572
566
  def dc_link_menu_tag(title) #:nodoc:
573
567
  html = %(
574
568
  <dl>
575
- <dt><div class='drgcms_popmenu' href="#">
576
- #{_origin.fa_icon('file-text-o lg', class: 'dc-inline-link', title: title)}
569
+ <dt><div class='drgcms_popmenu dc-inline-link' href="#">
570
+ #{_origin.fa_icon('file-text-o', title: title)}
577
571
  </div></dt>
578
572
  <dd>
579
573
  <ul class=' div-hidden drgcms_popmenu_class'>
@@ -628,17 +622,17 @@ def dc_page_edit_menu(opts = @opts)
628
622
  title = "#{t('drgcms.edit')}: #{page.subject}"
629
623
  opts[:editparams] ||= {}
630
624
  dc_link_menu_tag(title) do |html|
631
- opts[:editparams].merge!( controller: 'cmsedit', action: 'edit', 'icon' => 'edit' )
632
- opts[:editparams].merge!( :id => page.id, :table => _origin.site.page_class.underscore, form_name: opts[:form_name], edit_only: 'body' )
625
+ opts[:editparams].merge!( controller: 'cmsedit', action: 'edit', 'icon' => 'edit-o' )
626
+ opts[:editparams].merge!( :id => page.id, :t => _origin.site.page_class.underscore, f: opts[:form_name], edit_only: 'body' )
633
627
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_content') )
634
628
 
635
- opts[:editparams].merge!( edit_only: nil, 'icon' => 'pencil' )
629
+ opts[:editparams].merge!( edit_only: nil, 'icon' => 'edit-o' )
636
630
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_advanced') )
637
631
 
638
632
  opts[:editparams].merge!( action: 'new', 'icon' => 'plus' )
639
633
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_new_page') )
640
634
 
641
- opts[:editparams].merge!(ids: page.id, form_name: 'dc_part', 'icon' => 'plus-square-o',
635
+ opts[:editparams].merge!(ids: page.id, form_name: 'dc_part', 'icon' => 'plus',
642
636
  table: "#{_origin.site.page_class.underscore};dc_part" )
643
637
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_new_part') )
644
638
  end.html_safe
@@ -785,7 +779,7 @@ def dc_choices4_cmsmenu
785
779
  menus.to_a.sort.each do |index, menu| # sort menus, result is array of sorted hashes
786
780
  next unless menu['caption']
787
781
  icon = menu['icon'].match('/') ? image_tag(menu['icon']) : fa_icon(menu['icon']) #external or fa- image
788
- html << "<li class=\"cmsedit-top-level-menu\">#{icon}#{t(menu['caption'])}<ul>"
782
+ html << %(<li class="cmsedit-top-level-menu"><div>#{icon}#{t(menu['caption'])}</div><ul>)
789
783
  menu['items'].to_a.sort.each do |index1, value| # again, sort menu items first
790
784
  html << if value['link']
791
785
  opts = { target: value['target'] || 'iframe_cms' }
@@ -1085,9 +1079,9 @@ end
1085
1079
  # Html code for edit iframe
1086
1080
  ########################################################################
1087
1081
  def dc_iframe_edit(table, opts={})
1088
- ret = if params.to_unsafe_h.size > 2 and table # controller, action, path is minimal
1082
+ ret = if params.to_unsafe_h.size > 2 && table # controller, action, path is minimal
1089
1083
  params[:controller] = 'cmsedit'
1090
- params[:action] = (params[:oper] and (params[:oper] == 'edit')) ? 'edit' : 'index'
1084
+ params[:action] = (params[:oper] && (params[:oper] == 'edit')) ? 'edit' : 'index'
1091
1085
  params[:action] = opts[:action] unless params[:oper]
1092
1086
  params[:table] ||= table
1093
1087
  params[:form_name] ||= opts[:form_name] || table
@@ -161,7 +161,7 @@ end
161
161
  # Return filter options
162
162
  ########################################################################
163
163
  def self.dc_filters
164
- {'title' => 'drgcms.filters.this_site_only', 'operation' => 'eq',
164
+ {'title' => I18n.t('drgcms.filters.this_site_only'), 'operation' => 'eq',
165
165
  'field' => 'dc_site_id', 'value' => '@current_site'}
166
166
  end
167
167
 
@@ -91,11 +91,11 @@ end
91
91
  def self.get_field_form_definition(name, parent) #:nodoc:
92
92
  form = parent.form
93
93
  form['form']['tabs'].each do |tab|
94
- # Array with 2 elements. First is tabname, second is data
94
+ # Array with 2 elements. First is tabname, second is data
95
95
  my_fields = tab.last
96
96
  my_fields.each {|k,v| return v if (k.class == Integer and v['name'] == name) }
97
97
  end if form['form']['tabs'] # I know. But nice.
98
- #
98
+
99
99
  form['form']['fields'].each do |field|
100
100
  next unless field.first.class == Integer # options
101
101
  return field.last if field.last['name'] == name
@@ -133,15 +133,15 @@ def self.get_filter_field(parent)
133
133
  field['type'] = filter['input'] if filter['input'].to_s.size > 5
134
134
  field['type'] ||= 'text_field'
135
135
  field['readonly'] = false # must be
136
+ # let text fields size be no more then 20
137
+ field['size'] = 20 if field['type'].match('text') && field['size'].to_i > 20
136
138
  field['html'] ||= {}
137
- field['html']['size'] = 20
138
139
  # Start with last entered value
139
140
  field['html']['value'] = filter['value'] unless filter['value'] == '#NIL'
140
141
  field['html']['selected'] = field['html']['value'] # for select field
141
142
  # url for filter ON action
142
- field['html']['data-url'] = parent.url_for(
143
- controller: 'cmsedit', action: :index, filter: 'on',
144
- table: parent.form['table'], form_name: parent.params['form_name'])
143
+ field['html']['data-url'] = parent.url_for(controller: 'cmsedit', action: 'run', control: 'cmsedit.filter_on',
144
+ t: CmsHelper.table_param(parent.params), f: CmsHelper.form_param(parent.params))
145
145
  url = field['html']['data-url']
146
146
  # remove if present
147
147
  field['with_new'] = nil if field['with_new']
@@ -155,7 +155,7 @@ def self.get_filter_field(parent)
155
155
  js = drg_field.js.blank? ? '' : parent.javascript_tag(drg_field.js)
156
156
  html = %(<li class="no-background">
157
157
  <span class="filter_field" data-url="#{url}">#{drg_field.html}
158
- #{parent.fa_icon('search lg', class: 'record_filter_field_icon')}
158
+ #{parent.fa_icon('search', class: 'record_filter_field_icon')}
159
159
  #{js}</span></li>)
160
160
  else
161
161
  # Error. Forget filter
@@ -163,7 +163,7 @@ def self.get_filter_field(parent)
163
163
  end
164
164
  end
165
165
  parent.form['readonly'] = saved_readonly
166
- html
166
+ html.html_safe
167
167
  end
168
168
 
169
169
  ######################################################################
@@ -178,41 +178,49 @@ def self.menu_filter(parent)
178
178
  html << "<li data-filter=\"#{document.id}\">#{description}</li>"
179
179
  end
180
180
 
181
- # add filters defined in model
181
+ # add filters defined in model
182
182
  model = table.classify.constantize
183
- filters = model.dc_filters rescue nil
183
+ filters = model.dc_filters if model.respond_to?(:dc_filters)
184
184
  if filters
185
- # only single defined. Convert to array.
185
+ # only single defined. Convert to array.
186
186
  filters = [filters] if filters.class == Hash
187
- filters.each do |filter|
188
- url = parent.dc_link_to(filter['title'], nil,controller: :cmsedit, action: :index, table: table,
189
- form_name: parent.params[:form_name],
187
+ filters.each do |filter|
188
+ url = parent.dc_link_to(filter['title'], nil, controller: 'cmsedit', action: :run, t: table,
189
+ f: CmsHelper.form_param(parent.params),
190
+ control: 'cmsedit.filter_on',
191
+ filter_field: filter['field'],
192
+ filter_oper: filter['operation'],
193
+ filter_value: filter['value'])
194
+
195
+ url = parent.url_for(controller: 'cmsedit', action: :run, t: table, f: CmsHelper.form_param(parent.params),
196
+ control: 'cmsedit.filter_on',
190
197
  filter_field: filter['field'],
191
198
  filter_oper: filter['operation'],
192
- filter_value: filter['value'],
193
- filter: 'on')
194
- html << "<li>#{url}</li>"
199
+ filter_value: filter['value'])
200
+ html << %(<li class="dc-link-ajax in-menu" data-url="#{url}">#{filter['title']}</li>)
195
201
  end
196
202
  end
197
203
  # divide standard and custom filter options
198
204
  html << '<hr>' if html.size > 30 #
199
- html << '<li id="open_drgcms_filter">' + I18n.t('drgcms.filter_set') + '</li>'
200
- html << '</ul>'
205
+ html << %(<li class="dc-link in-menu" id="open_drgcms_filter">#{I18n.t('drgcms.filter_set')}</li></ul>)
206
+ html.html_safe
201
207
  end
202
208
 
203
209
  ######################################################################
204
210
  # Creates title for turn filter off, which consists of displaying curently
205
211
  # active filter and text to turn it off.
206
212
  ######################################################################
207
- def self.title4_filter_off(filter_yaml)
208
- filter = YAML.load(filter_yaml)
213
+ def self.title4_filter_off(filter_data)
214
+ return '' unless filter_data&.dig(:filter)
215
+
216
+ filter = YAML.load(filter_data[:filter])
209
217
  operations = I18n.t('drgcms.choices4_filter_operators').chomp.split(',').inject([]) {|r,v| r << v.split(':') }
210
218
  operation = ''
211
219
  if filter['operation'] == 'eval'
212
220
  filter['field']
213
221
  else
214
222
  operations.each{|a| (operation = a.first; break) if a.last == filter['operation']}
215
- #
223
+
216
224
  '[ ' + I18n.t("helpers.label.#{filter['table']}.#{filter['field']}") +
217
225
  " ] #{operation} [ #{filter['value'].to_s} ] : #{I18n.t('drgcms.filter_off')}"
218
226
  end
@@ -144,7 +144,7 @@ def self.add_schema_menu(parent)
144
144
  yaml.each do |schema_name, schema_data|
145
145
  next if level == 1 and schema_data['level'].nil?
146
146
  url = "/dc_common/add_json_ld_schema?table=#{parent.params['table']}&ids=#{parent.params['ids']}&schema=#{schema_name}&url=#{parent.request.url}"
147
- html << %Q[<li class="dc-link-ajax dc-animate" data-url="#{url}">#{schema_name}</li>]
147
+ html << %Q[<li class="dc-link-ajax in-menu" data-url="#{url}">#{schema_name}</li>]
148
148
  end
149
149
  html << '</ul>'
150
150
  end
@@ -62,15 +62,25 @@
62
62
  # taken into account when rendering part.
63
63
  ########################################################################
64
64
  class DcPart
65
- include DcPieceConcern
66
-
67
- field :_type, type: String, default: 'DcPart' # needed when changed to Concern
68
- field :policy_id, type: BSON::ObjectId
69
- field :link, type: String
70
-
71
- embedded_in :dc_parts, polymorphic: true
72
-
73
- before_save :do_before_save
65
+ include DcPieceConcern
66
+
67
+ field :_type, type: String, default: 'DcPart' # needed when changed to Concern
68
+ field :policy_id, type: BSON::ObjectId
69
+ field :link, type: String
70
+
71
+ embedded_in :dc_parts, polymorphic: true
72
+
73
+ before_save :do_before_save
74
+
75
+ after_save :cache_clear
76
+ after_destroy :cache_clear
77
+
78
+ ####################################################################
79
+ # Clear parent's record from cache if cache is configured
80
+ ####################################################################
81
+ def cache_clear
82
+ _parent.cache_clear() if _parent&.respond_to?(:cache_clear)
83
+ end
74
84
 
75
85
  ######################################################################
76
86
  # Implementation of before_save callback.
@@ -171,10 +171,16 @@ def set_default_value(opt1, opt2)
171
171
  return if @record && @record[@yaml['name']].present?
172
172
 
173
173
  @yaml[opt1][opt2] = if @yaml['default'].class == Hash
174
- eval(@yaml['default']['eval'])
175
- else
176
- @yaml['default']
177
- end
174
+ evaluate = @yaml['default']['eval']
175
+ return if evaluate.blank?
176
+ # add @parent if it's a method call and @parent is not present
177
+ if evaluate[0] != evaluate[0].upcase && !evaluate.match('@parent')
178
+ evaluate.prepend('@parent.')
179
+ end
180
+ eval(evaluate)
181
+ else
182
+ @yaml['default']
183
+ end
178
184
  end
179
185
 
180
186
  ####################################################################
@@ -51,7 +51,7 @@ class LinkTo < DrgcmsField
51
51
  ###########################################################################
52
52
  def render
53
53
  @yaml['html'] ||= {}
54
- @yaml['html']['class'] ||= 'dc-link dc-animate'
54
+ @yaml['html']['class'] ||= 'dc-link'
55
55
  @yaml['html'].symbolize_keys!
56
56
 
57
57
  @yaml[:id] = record._id if @yaml[:id] == 'id'
@@ -111,7 +111,7 @@ def render
111
111
  @yaml['html']['placeholder'] = t('drgcms.search_placeholder')
112
112
  _name = '_' + @yaml['name']
113
113
  @html << '<div class="ui-autocomplete-border">'
114
- @html << @parent.link_to(@parent.fa_icon('plus-square lg', class: 'dc-animate dc-green'), '#',onclick: 'return false;') # dummy add. But it is usefull.
114
+ @html << @parent.link_to(@parent.fa_icon('plus-square-o', class: 'dc-green'), '#',onclick: 'return false;') # dummy add. But it is usefull.
115
115
 
116
116
  record = record_text_for(@yaml['name'])
117
117
  # text field for autocomplete
@@ -119,7 +119,7 @@ def render
119
119
  # direct link for adding new documents to collection
120
120
  if @yaml['with_new'] and !@readonly
121
121
  @html << ' ' +
122
- @parent.fa_icon('plus-square lg', class: 'in-edit-add', title: t('drgcms.new'),
122
+ @parent.fa_icon('plus-square-o', class: 'in-edit-add', title: t('drgcms.new'),
123
123
  style: "vertical-align: top;", 'data-table' => @yaml['with_new'] )
124
124
  end
125
125
  # div to list active selections
@@ -137,9 +137,9 @@ def render
137
137
  end
138
138
  # Related data is missing. It happends.
139
139
  @html << if rec
140
- link = @parent.link_to(@parent.fa_icon('remove lg', class: 'dc-animate dc-red'), '#',
140
+ link = @parent.link_to(@parent.fa_icon('remove_circle', class: 'dc-red'), '#',
141
141
  onclick: "$('##{rec.id}').hide(); var v = $('##{record}_#{@yaml['name']}_#{rec.id}'); v.val(\"-\" + v.val());return false;")
142
- link = @parent.fa_icon('check lg', class: 'dc-green') if @readonly
142
+ link = @parent.fa_icon('check', class: 'dc-green') if @readonly
143
143
  field = @parent.hidden_field(record, "#{@yaml['name']}_#{rec.id}", value: element)
144
144
  "<div id=\"#{rec.id}\" style=\"padding:4px;\">#{link} #{rec.send(field_name)}<br>#{field}</div>"
145
145
  else
@@ -149,7 +149,7 @@ def render
149
149
  end
150
150
  @html << "</div></div>"
151
151
  # Create text for div to be added when new category is selected
152
- link = @parent.link_to(@parent.fa_icon('remove lg', class: 'dc-animate dc-red'), '#',
152
+ link = @parent.link_to(@parent.fa_icon('remove_circle', class: 'dc-red'), '#',
153
153
  onclick: "$('#rec_id').hide(); var v = $('##{record}_#{@yaml['name']}_rec_id'); v.val(\"-\" + v.val());return false;")
154
154
  field = @parent.hidden_field(record, "#{@yaml['name']}_rec_id", value: 'rec_id')
155
155
  one_div = "<div id=\"rec_id\" style=\"padding:4px;\">#{link} rec_search<br>#{field}</div>"
@@ -52,6 +52,9 @@ class Readonly < DrgcmsField
52
52
  # Render readonly field html code
53
53
  ###########################################################################
54
54
  def render
55
+ set_initial_value
56
+ @record[@yaml['name']] = @yaml['html']['value'] if @yaml['html']['value']
57
+
55
58
  @html << @parent.hidden_field('record', @yaml['name']) # retain field as hidden field
56
59
  @html << '<div class="dc-readonly">'
57
60
 
@@ -145,7 +145,7 @@ def add_view_code
145
145
  return '' if (data = @record.send(@yaml['name'])).blank?
146
146
 
147
147
  table, form_name = @yaml['view'].split(/\ |\,/).delete_if { |e| e.blank? }
148
- url = @parent.url_for(controller: :cmsedit, id: data, action: :edit, table: table, form_name: form_name, readonly: true, window_close: 1 )
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>)
151
151
  end
@@ -189,16 +189,17 @@ def render
189
189
 
190
190
  set_initial_value('html','selected')
191
191
  # separate options and html part
192
- html_part = {}
192
+ options_part = {}
193
193
  @yaml['html'].symbolize_keys!
194
- %i(class id style required).each { |sym| html_part[sym] = @yaml['html'].delete(sym) if @yaml['html'][sym] }
195
- html_part[:multiple] = true if @yaml['multiple']
194
+ %i(selected include_blank).each { |sym| options_part[sym] = @yaml['html'].delete(sym) if @yaml['html'][sym] }
195
+ @yaml['html'][:multiple] = true if @yaml['multiple']
196
+
196
197
  record = record_text_for(@yaml['name'])
197
- if html_part[:multiple]
198
- @html << @parent.select(record, @yaml['name'], get_choices, @yaml['html'], html_part)
198
+ if @yaml['html'][:multiple]
199
+ @html << @parent.select(record, @yaml['name'], get_choices, options_part, @yaml['html'])
199
200
  @js << "$('##{record}_#{@yaml['name']}').selectMultiple();"
200
201
  else
201
- @html << @parent.select(record, @yaml['name'], get_choices, @yaml['html'], html_part)
202
+ @html << @parent.select(record, @yaml['name'], get_choices, options_part, @yaml['html'])
202
203
  # add code for view more data
203
204
  @html << add_view_code() if @yaml['view']
204
205
  end
@@ -110,12 +110,12 @@ def render
110
110
  @html << '<span class="dc-text-autocomplete">' + @parent.text_field(record, _name, @yaml['html']) + '<span></span>'
111
111
  # with new icon
112
112
  if @yaml['with_new']
113
- @html << ' ' + @parent.fa_icon('plus-square lg', class: 'in-edit-add', title: t('drgcms.new'),
113
+ @html << ' ' + @parent.fa_icon('plus-square-o', class: 'in-edit-add', title: t('drgcms.new'),
114
114
  style: "vertical-align: top;", 'data-table' => @yaml['with_new'] )
115
115
  end
116
116
  # with edit icon
117
117
  if @yaml['with_edit'] && @record[@yaml['name']].present?
118
- @html << ' ' + @parent.fa_icon('edit lg', class: 'in-edit-add', title: t('drgcms.edit'),
118
+ @html << ' ' + @parent.fa_icon('edit-o', class: 'in-edit-add', title: t('drgcms.edit'),
119
119
  style: "vertical-align: top;", 'data-table' => @yaml['with_edit'], 'data-id' => @record[@yaml['name']] )
120
120
  end
121
121
  @html << '</span>' + @parent.hidden_field(record, @yaml['name'], value: value) # actual value will be in hidden field
@@ -64,7 +64,7 @@ def render_particle(particle, opts)
64
64
  return msg unless can_view
65
65
  html = ''
66
66
  if @opts[:edit_mode] > 1
67
- opts[:editparams].merge!(title: "#{t('drgcms.edit')}: #{particle.name}", controller: :cmsedit)
67
+ opts[:editparams].merge!(title: "#{t('drgcms.edit')}: #{particle.name}", controller: 'cmsedit')
68
68
  html << dc_link_for_edit( opts[:editparams] )
69
69
  end
70
70
  #
@@ -120,7 +120,7 @@ def do_one_item(poll, yaml)
120
120
  end
121
121
  # submit and link tag
122
122
  clas = yaml['type'].match(/submit_tag/) ? '' : 'dc-link-submit'
123
- html << "<span class='#{clas} dc-animate'>#{field_html}#{yaml['separator']}</span>"
123
+ html << "<span class='#{clas}'>#{field_html}#{yaml['separator']}</span>"
124
124
  # other fields
125
125
  else
126
126
  html << case
@@ -2,36 +2,36 @@
2
2
  <button class="cms-toggle mode-<%= session[:edit_mode] %>" title="<%= t('drgcms.toggle_cms')%>">CMS</button>
3
3
  <% # = link_to('CMS', controller: 'dc_common', action: 'toggle_edit_mode', return_to: request.url) %>
4
4
  <% if session[:edit_mode] > 1 %>
5
- <div class="cmsedit-table cmsedit-top">
6
- <div id="menu">
5
+ <div class="cmsedit-top">
6
+ <div id="cms-top-menu">
7
7
 
8
8
  <% if @page %>
9
- <%= link_to( fa_icon('file-text-o lg', class: "dc-animate", title: "#{t('drgcms.edit_page')}"),
9
+ <%= link_to( fa_icon('description-o', title: "#{t('drgcms.edit_page')}"),
10
10
  {controller: 'cmsedit', action: 'edit', table: @site.page_class, id: @page._id}, target: 'iframe_cms') %>
11
11
  <% end %>
12
12
 
13
13
  <% if @design %>
14
- <%= link_to( fa_icon('credit-card lg', class: "dc-animate", title: "#{t('drgcms.edit_design')}"),
14
+ <%= link_to( fa_icon('web', title: "#{t('drgcms.edit_design')}"),
15
15
  {controller: 'cmsedit', action: 'edit', table: 'dc_design', id: @design._id}, target: 'iframe_cms') %>
16
16
  <% end %>
17
17
 
18
18
  <% if @site %>
19
- <%= link_to( fa_icon('globe lg', class: "dc-animate", title: "#{t('drgcms.edit_site')}"),
19
+ <%= link_to( fa_icon('public', title: "#{t('drgcms.edit_site')}"),
20
20
  {controller: 'cmsedit', action: 'edit', table: 'dc_site', id: @site._id}, target: 'iframe_cms') %>
21
21
  <% end %>
22
- <b>&nbsp; | &nbsp; </b>
22
+ <span>|</span>
23
23
 
24
- <%= link_to( fa_icon('compress lg', class: "dc-animate", title: t('drgcms.minimize')), '#',
24
+ <%= link_to( fa_icon('compress', title: t('drgcms.minimize')), '#',
25
25
  onclick: "$('#iframe_cms').height(1); return false;" ) %>
26
26
 
27
- <%= link_to( fa_icon('expand lg', class: "dc-animate", title: t('drgcms.maximize')), '#',
27
+ <%= link_to( fa_icon('expand', title: t('drgcms.maximize')), '#',
28
28
  onclick: "$('#iframe_cms').height( $('#iframe_cms').height() + 500);; return false;") %>
29
29
 
30
- <%= link_to( fa_icon('refresh lg', class: "dc-animate", title: t('drgcms.reload')), '#',
30
+ <%= link_to( fa_icon('refresh', title: t('drgcms.reload')), '#',
31
31
  onclick: "document.location.reload(true); return false;") %>
32
- <b>&nbsp; | &nbsp; </b>
32
+ <span>|</span>
33
33
 
34
- <%= link_to( fa_icon('copy lg', class: "dc-animate", title: "#{t('drgcms.doc_paste_title')}"),
34
+ <%= link_to( fa_icon('content_paste-o', title: t('drgcms.doc_paste_title')),
35
35
  {controller: 'dc_common', action: 'paste_clipboard'}, target: 'iframe_cms') %>
36
36
 
37
37
  <%= DrgcmsFormFields::Elfinder.file_manager_url(self) %>
@@ -42,7 +42,7 @@
42
42
  <div id="menu-hamburger"><%= fa_icon('bars') %></div>
43
43
 
44
44
  <div class="cmsedit-container">
45
- <div id="menu">
45
+ <div id="cms-menu">
46
46
  <%= dc_choices4_cmsmenu.html_safe %>
47
47
  </div>
48
48
 
@@ -12,7 +12,7 @@
12
12
  <div class="input"><%= password_field('record', 'password') %></div>
13
13
 
14
14
  <div class="label"></div>
15
- <div class="input"><%= submit_tag t('drgcms.login'), class: 'dc-animate-button' %></div>
15
+ <div class="input"><%= submit_tag t('drgcms.login'), class: 'dc-submit' %></div>
16
16
  <%= hidden_field_tag('return_to_error', request.url ) %>
17
17
  <% end %>
18
18
  </div>
@@ -2,7 +2,7 @@
2
2
  <%= dc_table_title t('drgcms.doc_paste_title') %>
3
3
 
4
4
  <div class="dc-form-frame"><br>
5
- <span class="dc-link dc-link-ajax dc-animate" data-request="post" title="<%= t('drgcms.doc_paste_clipboard') %>"
5
+ <span class="dc-link-ajax" data-request="post" title="<%= t('drgcms.doc_paste_clipboard') %>"
6
6
  data-url="<%= url_for(controller: 'dc_common', action: 'paste_clipboard') %>"><%= t('drgcms.doc_paste_clipboard') %>
7
7
  </span>
8
8
 
@@ -69,6 +69,7 @@ en:
69
69
  toggle_cms: Toggle CMS edit/view mode
70
70
  edit: Edit
71
71
  show: Show
72
+ duplicate: Duplicate
72
73
  new: New
73
74
  sort: Sort
74
75
  filter: Filter
@@ -117,7 +118,7 @@ en:
117
118
  simple_message: Please write in the name of month no %{number} in a year.
118
119
 
119
120
  filters:
120
- this_site_only: Documents for currently selected site only
121
+ this_site_only: Only documents of currently selected web site
121
122
 
122
123
  dc_help:
123
124
  help: HELP