drg_cms 0.6.1.9 → 0.7.0.2

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +260 -0
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +9 -5
  5. data/app/assets/javascripts/drg_cms/drg_cms.js +69 -32
  6. data/app/assets/javascripts/drg_cms_application.js +0 -2
  7. data/app/assets/javascripts/drg_cms_cms.js +2 -3
  8. data/app/assets/stylesheets/drg_cms/drg_cms.css +89 -26
  9. data/app/assets/stylesheets/drg_cms/jstree.css +32 -27
  10. data/app/assets/stylesheets/drg_cms/select-multiple.css +4 -2
  11. data/app/controllers/cmsedit_controller.rb +9 -111
  12. data/app/controllers/dc_application_controller.rb +100 -23
  13. data/app/controllers/dc_common_controller.rb +10 -24
  14. data/app/controls/browse_models_control.rb +3 -1
  15. data/app/controls/cmsedit_control.rb +5 -1
  16. data/app/controls/dc_category_control.rb +61 -0
  17. data/app/controls/dc_report.rb +1 -1
  18. data/app/forms/all_options.yml +2 -0
  19. data/app/forms/cms_menu.yml +3 -2
  20. data/app/forms/dc_browse_models.yml +24 -2
  21. data/app/forms/dc_category.yml +17 -8
  22. data/app/forms/dc_category_as_tree.yml +31 -0
  23. data/app/forms/dc_steps_template.yml +51 -0
  24. data/app/forms/help/dc_category_as_tree.en +4 -0
  25. data/app/forms/help/dc_category_as_tree.sl +5 -0
  26. data/app/helpers/cms_common_helper.rb +66 -1
  27. data/app/helpers/cms_edit_helper.rb +230 -121
  28. data/app/helpers/cms_helper.rb +74 -17
  29. data/app/helpers/cms_index_helper.rb +40 -37
  30. data/app/helpers/dc_application_helper.rb +37 -76
  31. data/app/helpers/dc_category_helper.rb +129 -0
  32. data/app/models/dc_category.rb +50 -24
  33. data/app/models/dc_journal.rb +2 -2
  34. data/app/models/dc_json_ld.rb +18 -41
  35. data/app/models/drgcms_form_fields/date_picker.rb +10 -12
  36. data/app/models/drgcms_form_fields/datetime_picker.rb +10 -11
  37. data/app/models/drgcms_form_fields/drgcms_field.rb +46 -4
  38. data/app/models/drgcms_form_fields/readonly.rb +1 -1
  39. data/app/models/drgcms_form_fields/select.rb +2 -2
  40. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  41. data/app/models/drgcms_form_fields/text_with_select.rb +1 -0
  42. data/app/models/drgcms_form_fields/tree_select.rb +20 -19
  43. data/app/renderers/dc_common_renderer.rb +20 -3
  44. data/app/views/cmsedit/_form.html.erb +19 -12
  45. data/app/views/cmsedit/edit.html.erb +10 -6
  46. data/app/views/cmsedit/index.html.erb +5 -3
  47. data/app/views/cmsedit/new.html.erb +9 -5
  48. data/app/views/dc_common/_help.html.erb +1 -0
  49. data/app/views/layouts/content.html.erb +1 -1
  50. data/config/locales/drgcms_en.yml +7 -0
  51. data/config/locales/drgcms_sl.yml +7 -0
  52. data/drg_cms.gemspec +3 -3
  53. data/lib/drg_cms/version.rb +1 -1
  54. data/lib/tasks/dc_cleanup.rake +20 -42
  55. metadata +18 -12
  56. data/History.log +0 -109
@@ -37,21 +37,21 @@
37
37
  #
38
38
  ########################################################################
39
39
  class DcJsonLd
40
- include Mongoid::Document
41
- include Mongoid::Timestamps
40
+ include Mongoid::Document
41
+ include Mongoid::Timestamps
42
42
 
43
- field :name, type: String
44
- field :type, type: String
45
- field :data, type: String
46
- field :active, type: Boolean, default: true
43
+ field :name, type: String
44
+ field :type, type: String
45
+ field :data, type: String
46
+ field :active, type: Boolean, default: true
47
47
 
48
- embeds_many :dc_json_lds, :cyclic => true
48
+ embeds_many :dc_json_lds, :cyclic => true
49
49
 
50
- field :created_by, type: BSON::ObjectId
51
- field :updated_by, type: BSON::ObjectId
52
-
53
- validates :name, presence: true
54
- validates :type, presence: true
50
+ field :created_by, type: BSON::ObjectId
51
+ field :updated_by, type: BSON::ObjectId
52
+
53
+ validates :name, presence: true
54
+ validates :type, presence: true
55
55
 
56
56
  ##########################################################################
57
57
  # Returns JSON LD data as YAML
@@ -71,29 +71,6 @@ def get_json_ld(parent_data)
71
71
  yaml
72
72
  end
73
73
 
74
- ########################################################################
75
- # Searches forms path for file_name and returns full file name or nil if not found.
76
- #
77
- # @param [String] Form file name. File name can be passed as gem_name.filename. This can
78
- # be useful when you are extending form but want to retain same name as original form
79
- # For example. You are extending dc_user form from drg_cms gem and want to
80
- # retain same dc_user name. This can be done by setting drg_cms.dc_user to extend option.
81
- #
82
- # @return [String] Form file name including path or nil if not found.
83
- ########################################################################
84
- def self.dc_find_form_file(form_file)
85
- form_path=nil
86
- if form_file.match(/\.|\//)
87
- form_path,form_file=form_file.split(/\.|\//)
88
- end
89
- DrgCms.paths(:forms).reverse.each do |path|
90
- f = "#{path}/#{form_file}.yml"
91
- return f if File.exist?(f) and (form_path.nil? or path.to_s.match(/\/#{form_path}\//i))
92
- end
93
- p "Form file #{form_file} not found!"
94
- nil
95
- end
96
-
97
74
  ########################################################################
98
75
  # Find document by ids when document are embedded into main d even if embedded
99
76
  #
@@ -105,9 +82,9 @@ end
105
82
  def self.find_document_by_ids(tables, ids)
106
83
  collection = tables.split(';').first.classify.constantize
107
84
  ar_ids = ids.split(';')
108
- # Find top document
85
+ # Find top document
109
86
  document = collection.find(ar_ids.shift)
110
- # Search for embedded document
87
+ # Search for embedded document
111
88
  ar_ids.each {|id| document = document.dc_json_lds.find(id) }
112
89
  document
113
90
  end
@@ -116,7 +93,7 @@ end
116
93
  # Returns possible options for type select field on form.
117
94
  #########################################################################
118
95
  def self.choices4_type()
119
- yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
96
+ yaml = YAML.load_file( CmsHelper.form_file_find('json_ld_schema') )
120
97
 
121
98
  yaml.inject([]) {|result, schema_name| result << schema_name.first }
122
99
  end
@@ -125,7 +102,7 @@ end
125
102
  # Create menu to add schema element. Called from DRGCMS Form action.
126
103
  #########################################################################
127
104
  def self.add_schema_menu(parent)
128
- yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
105
+ yaml = YAML.load_file( CmsHelper.form_file_find('json_ld_schema') )
129
106
  if (level = parent.params['ids'].split(';').size) == 1
130
107
  # select only top level elements
131
108
  yaml.delete_if { |schema_name, schema_data| schema_data['level'].nil? }
@@ -139,7 +116,7 @@ def self.add_schema_menu(parent)
139
116
  end
140
117
  yaml = _yaml
141
118
  end
142
- # create menu code
119
+ # create menu code
143
120
  html = '<ul>'
144
121
  yaml.each do |schema_name, schema_data|
145
122
  next if level == 1 and schema_data['level'].nil?
@@ -149,4 +126,4 @@ def self.add_schema_menu(parent)
149
126
  html << '</ul>'
150
127
  end
151
128
 
152
- end
129
+ end
@@ -66,30 +66,28 @@ class DatePicker < DrgcmsField
66
66
  ###########################################################################
67
67
  def render
68
68
  value = @record.try(@yaml['name']) ? I18n.localize(@record[@yaml['name']].to_date) : nil
69
- #return ro_standard( @parent.dc_format_value(value)) if @readonly
70
-
71
- @yaml['options'] ||= {}
72
69
  set_initial_value
73
70
  @yaml['html']['size'] ||= @yaml['size'] || 10
74
71
  @yaml['html']['value'] ||= value
75
72
  @yaml['html']['autocomplete'] ||= 'off'
76
73
  @yaml['html']['class'] = @yaml['html']['class'].to_s + ' date-picker'
77
74
 
78
- @yaml['options']['lang'] ||= "'#{I18n.locale}'"
79
- @yaml['options']['format'] ||= "'#{t('datetimepicker.formats.date')}'"
80
- @yaml['options']['timepicker'] = false
81
- @yaml['options']['scrollMonth'] ||= false
82
- @yaml['options']['scrollInput'] ||= false
75
+ options = options_to_hash(@yaml['options'])
76
+ options['lang'] ||= I18n.locale.to_s
77
+ options['format'] ||= t('datetimepicker.formats.date')
78
+ options['timepicker'] = false
79
+ options['scrollMonth'] ||= false
80
+ options['scrollInput'] ||= false
83
81
 
84
82
  record = record_text_for(@yaml['name'])
85
83
  @html << @parent.text_field(record, @yaml['name'], @yaml['html'])
86
- @js << %Q[
84
+ @js << %(
87
85
  $(document).ready(function() {
88
- $("##{record}_#{@yaml['name']}").datetimepicker( {
89
- #{hash_to_options(@yaml['options'])}
86
+ $("##{record}_#{@yaml['name']}").datetimepicker({
87
+ #{hash_to_options(options)}
90
88
  });
91
89
  });
92
- ] unless @readonly
90
+ ) unless @readonly
93
91
 
94
92
  self
95
93
  end
@@ -30,12 +30,12 @@ module DrgcmsFormFields
30
30
  # * +name:+ Field name (required)
31
31
  # * +options:+ options which apply to date_picker field. All options can be found here http://xdsoft.net/jqplugins/datetimepicker/ .
32
32
  # Options can be defined in single line like:
33
- # * options: 'step: 15,inline: true,lang: "sl"' or
33
+ # * options: 'step: 15,inline: true,lang: sl' or
34
34
  #
35
35
  # * options:
36
36
  # * step: 15
37
37
  # * inline: true
38
- # * lang: '"sl"'
38
+ # * lang: sl
39
39
  #
40
40
  # * +html:+ html options which apply to date_time_picker field (optional)
41
41
  #
@@ -52,27 +52,26 @@ class DatetimePicker < DrgcmsField
52
52
  ###########################################################################
53
53
  def render
54
54
  value = @record.try(@yaml['name']) ? I18n.localize(@record[@yaml['name']].localtime) : nil
55
- #return ro_standard( @parent.dc_format_value(value)) if @readonly
56
-
57
- @yaml['options'] ||= {}
58
55
  set_initial_value
56
+
59
57
  @yaml['html']['size'] ||= @yaml['size'] || 14
60
58
  @yaml['html']['value'] ||= value if @record[@yaml['name']]
61
59
  @yaml['html']['autocomplete'] ||= 'off'
62
60
  @yaml['html']['class'] = @yaml['html']['class'].to_s + ' date-picker'
63
61
 
64
- @yaml['options']['lang'] ||= "'#{I18n.locale}'"
65
- @yaml['options']['format'] ||= "'#{t('datetimepicker.formats.datetime')}'"
62
+ options = options_to_hash(@yaml['options'])
63
+ options['lang'] ||= I18n.locale.to_s
64
+ options['format'] ||= t('datetimepicker.formats.datetime')
66
65
 
67
66
  record = record_text_for(@yaml['name'])
68
67
  @html << @parent.text_field(record, @yaml['name'], @yaml['html'])
69
- @js << %Q[
68
+ @js << %(
70
69
  $(document).ready(function() {
71
- $("##{record}_#{@yaml['name']}").datetimepicker( {
72
- #{hash_to_options(@yaml['options'])}
70
+ $("##{record}_#{@yaml['name']}").datetimepicker({
71
+ #{hash_to_options(options)}
73
72
  });
74
73
  });
75
- ] unless @readonly
74
+ ) unless @readonly
76
75
 
77
76
  self
78
77
  end
@@ -250,16 +250,58 @@ end
250
250
  # options:
251
251
  # height: 400
252
252
  # width: 800
253
- # toolbar: "'basic'"
253
+ # toolbar: "basic"
254
254
  #
255
- # => "height:400, width:800, toolbar:'basic'"
255
+ # => "height:400, width:800, toolbar: 'basic'"
256
256
  #
257
257
  # Return:
258
258
  # String: Options formated as javascript options.
259
259
  #
260
260
  ####################################################################
261
- def hash_to_options(hash)
262
- hash.to_a.inject([]) {|r,v| r << "#{v[0]}: #{v[1]}" }.join(',')
261
+ def hash_to_options(options)
262
+ c = ''
263
+ options.each do |key, option|
264
+ c << "#{key} : "
265
+ c << case
266
+ when option.to_s.match(/function/i) then option
267
+ when option.class == String then "\"#{option}\""
268
+ else option.to_s
269
+ end
270
+ c << ",\n"
271
+ end
272
+ c
273
+ end
274
+
275
+ ####################################################################
276
+ # Options may be defined on form as hash or as string. This method will
277
+ # ensure conversion of options into hash.
278
+ #
279
+ # Parameters:
280
+ # [String or Hash] : Form options
281
+ #
282
+ # Form example: As used in forms
283
+ # options:
284
+ # height: 400
285
+ # width: 800
286
+ # toolbar: "'basic'"
287
+ # or
288
+ #
289
+ # options: "height:400, width:800, toolbar:'basic'"
290
+ #
291
+ # Return:
292
+ # Hash: Options as Hash
293
+ ####################################################################
294
+ def options_to_hash(options)
295
+ return {} if options.nil?
296
+ return options unless options.class == String
297
+
298
+ options.chomp.split(',').inject({}) do |r, e|
299
+ key, value = e.chomp.split(':')
300
+ value.strip!
301
+ value = value[1..value.size - 2] if value[0] =~ /\'|\"/
302
+ r[key.strip] = value
303
+ r
304
+ end
263
305
  end
264
306
 
265
307
  ####################################################################
@@ -56,7 +56,7 @@ def render
56
56
  @record[@yaml['name']] = @yaml['html']['value'] if @yaml['html']['value']
57
57
 
58
58
  @html << @parent.hidden_field('record', @yaml['name']) # retain field as hidden field
59
- @html << '<div class="dc-readonly">'
59
+ @html << %(<div class="dc-readonly" id="record_#{@yaml['name']}_">)
60
60
 
61
61
  @html << if @yaml['eval']
62
62
  if @yaml['eval'].match(/dc_name4_id|dc_name_for_id/)
@@ -146,8 +146,8 @@ def add_view_code
146
146
 
147
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
- icon = @parent.fa_icon('eye')
150
- %(<span class="dc-window-open" data-url="#{url}">#{icon}</span>)
149
+ icon = @parent.mi_icon('eye-o md-18')
150
+ %(<span class="dc-window-open" data-url="#{url}"> #{icon}</span>)
151
151
  end
152
152
 
153
153
  ###########################################################################
@@ -114,7 +114,7 @@ def render
114
114
  style: "vertical-align: top;", 'data-table' => @yaml['with_new'] )
115
115
  end
116
116
  # with edit icon
117
- if @yaml['with_edit'] && @record[@yaml['name']].present?
117
+ if @yaml['with_edit'] && @record && @record[@yaml['name']].present?
118
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
@@ -148,7 +148,7 @@ $(document).ready(function() {
148
148
  change: function (event, ui) {
149
149
  #{not_id_code}
150
150
  if (ui.item == null) return;
151
- $("##{record}_#{@yaml['name']}").val(ui.item.id);
151
+ $("##{record}_#{@yaml['name']}").val(ui.item.id).trigger('change');
152
152
  },
153
153
 
154
154
  minLength: 2
@@ -83,6 +83,7 @@ $(document).ready(function() {
83
83
  $('##{@yaml['name']}_').change( function() {
84
84
  if ($(this).val().toString().length > 0) {
85
85
  $('##{record}_#{@yaml['name']}').val( $(this).val() );
86
+ $('##{record}_#{@yaml['name']}').trigger("change");
86
87
  }
87
88
  $('##{record}_#{@yaml['name']}').focus();
88
89
  });
@@ -59,6 +59,7 @@ class TreeSelect < Select
59
59
  ###########################################################################
60
60
  def make_tree(parent)
61
61
  return '' unless @choices[parent.to_s]
62
+
62
63
  @html << '<ul>'
63
64
  choices = if @choices[parent.to_s].first[3] != 0
64
65
  @choices[parent.to_s].sort_by {|e| e[3].to_i } # sort by order if first is not 0
@@ -66,16 +67,16 @@ def make_tree(parent)
66
67
  @choices[parent.to_s].sort_alphabetical_by(&:first) # use UTF-8 sort
67
68
  end
68
69
  choices.each do |choice|
69
- data = [ %Q["selected" : #{choice.last ? 'true' : 'false'} ] ]
70
+ data = [ %("selected" : #{choice.last ? 'true' : 'false'} ) ]
70
71
  # only for parent objects
71
72
  if @choices[ choice[1].to_s ]
72
- # parent is not selectable
73
+ # parent is not selectable
73
74
  data << '"disabled" : true' unless @parent.dc_dont?(@yaml['parent_disabled'], true)
74
- # parents are opened on start
75
+ # parents are opened on start
75
76
  data << '"opened" : true' unless @parent.dc_dont?(@yaml['parent_opened'], true)
76
77
  end
77
78
  # data-jstree must be singe quoted
78
- @html << %Q[<li data-id="#{choice[1]}" data-jstree='{#{data.join(' , ')}}'>#{choice.first}\n]
79
+ @html << %(<li data-id="#{choice[1]}" data-jstree='{#{data.join(' , ')}}'>#{choice.first}\n)
79
80
  # call recursively for children
80
81
  make_tree(choice[1]) if @choices[ choice[1].to_s ]
81
82
  @html << "</li>"
@@ -87,25 +88,24 @@ end
87
88
  # Render tree_select field html code
88
89
  ###########################################################################
89
90
  def render
90
- #return ro_standard if @readonly
91
91
  set_initial_value('html','value')
92
92
  require 'sort_alphabetical'
93
93
 
94
94
  record = record_text_for(@yaml['name'])
95
95
  clas = 'tree-select' + (@readonly ? ' dc-readonly' : '')
96
96
  @html << "<div id=\"#{@yaml['name']}\" class=\"#{clas}\" #{set_style()} >"
97
- # Fill @choices hash. The key is parent object id
97
+ # Fill @choices hash. The key is parent object id
98
98
  @choices = {}
99
99
  choices_in_eval(@yaml['eval']).each do |data|
100
100
  @choices[ data[2].to_s ] ||= []
101
101
  @choices[ data[2].to_s ] << (data << false)
102
102
  end
103
- # put current values hash with. To speed up selection when there is a lot of categories
103
+ # put current values hash with. To speed up selection when there is a lot of categories
104
104
  current_values = {}
105
105
  current = @record[@yaml['name']] || []
106
106
  current = [current] unless current.class == Array # non array fields
107
- current.each {|e| current_values[e.to_s] = true}
108
- # set third element of @choices when selected
107
+ current.each { |e| current_values[e.to_s] = true }
108
+ # set third element of @choices when selected
109
109
  @choices.keys.each do |key|
110
110
  0.upto( @choices[key].size - 1 ) do |i|
111
111
  choice = @choices[key][i]
@@ -114,16 +114,16 @@ def render
114
114
  end
115
115
  make_tree(nil)
116
116
  @html << '</div>'
117
- # add hidden communication field
117
+ # add hidden communication field
118
118
  @html << @parent.hidden_field(record, @yaml['name'], value: current.join(','))
119
- # save multiple indicator for data processing on return
119
+ # save multiple indicator for data processing on return
120
120
  @html << @parent.hidden_field(record, "#{@yaml['name']}_multiple", value: 1) if @yaml['multiple']
121
- # javascript to update hidden record field when tree looses focus
122
- readonly_code = %Q[
121
+ # javascript to update hidden record field when tree looses focus
122
+ readonly_code = %(
123
123
  ,
124
124
  "conditionalselect" : function (node) {
125
125
  return false; }
126
- ]
126
+ )
127
127
 
128
128
  @js =<<EOJS
129
129
  $(function(){
@@ -131,7 +131,7 @@ $(function(){
131
131
  "checkbox" : {"three_state" : false},
132
132
  "core" : { "themes" : { "icons": false },
133
133
  "multiple" : #{@yaml['multiple'] ? 'true' : 'false'} },
134
- "plugins" : ["checkbox","conditionalselect"]
134
+ "plugins" : ["checkbox", "conditionalselect"]
135
135
  #{@readonly ? readonly_code : ''}
136
136
  });
137
137
  });
@@ -155,13 +155,14 @@ end
155
155
  ###########################################################################
156
156
  def self.get_data(params, name)
157
157
  return nil if params['record'][name].blank?
158
- #
158
+
159
159
  result = params['record'][name].split(',')
160
- result.delete_if {|e| e.blank? }
160
+ result.delete_if(&:blank?)
161
161
  return nil if result.size == 0
162
- # convert to BSON objects if is BSON object ID
162
+
163
+ # convert to BSON objects if is BSON object ID
163
164
  result = result.map{ |e| BSON::ObjectId.from_string(e) } if BSON::ObjectId.legal?(result.first)
164
- # return only first element if multiple values select was not alowed
165
+ # return only first element if multiple values select was not allowed
165
166
  params['record']["#{name}_multiple"] == '1' ? result : result.first
166
167
  end
167
168
 
@@ -68,9 +68,10 @@ end
68
68
  # dc_render(:dc_common_renderer, method: 'google_analytics', code: 'UA-12345678-9')
69
69
  ########################################################################
70
70
  def google_analytics
71
+ html = ''
71
72
  ga_acc = @opts[:code] || @opts[:ga_acc]
72
- return '' if ga_acc.nil? or ga_acc == '/'
73
- html =<<EOT
73
+ if ga_acc && ga_acc != '/'
74
+ html << %(
74
75
  <!-- Google analytics. -->
75
76
  <script type="text/javascript">
76
77
  (function(i,s,o,g,r,a,m){
@@ -86,7 +87,23 @@ def google_analytics
86
87
  ga('send', 'pageview')
87
88
  }
88
89
  </script>
89
- EOT
90
+ )
91
+ end
92
+
93
+ ga4_acc = @opts[:code4] || @opts[:ga4_acc]
94
+ if ga4_acc && ga4_acc != '/'
95
+ html << %(
96
+ <!-- Global site tag (gtag.js) - Google Analytics -->
97
+ <script async src="https://www.googletagmanager.com/gtag/js?id=#{ga4_acc}"></script>
98
+ <script>
99
+ window.dataLayer = window.dataLayer || [];
100
+ function gtag(){dataLayer.push(arguments);}
101
+ gtag('js', new Date());
102
+
103
+ gtag('config', '#{ga4_acc}');
104
+ </script>)
105
+ end
106
+
90
107
  html.html_safe
91
108
  end
92
109
 
@@ -1,17 +1,24 @@
1
+ <div id="dc-form-container">
2
+ <div id="dc-form-left">
3
+ <%= dc_form_left %>
4
+ </div>
1
5
 
2
- <%= dc_flash_messages %>
3
- <%= dc_error_messages_for @record %>
4
- <%= dc_warning_messages_for @record %>
6
+ <div id="dc-form-right">
7
+ <%= dc_flash_messages %>
8
+ <%= dc_error_messages_for @record %>
9
+ <%= dc_warning_messages_for @record %>
5
10
 
6
- <div class="dc-form-frame">
11
+ <div class="dc-form-frame">
12
+ <% fields = dc_fields_for_form %>
13
+ <%= dc_actions_for_form 'top' %>
7
14
 
8
- <%= dc_actions_for_form 'top' %>
9
-
10
- <%= dc_fields_for_form %>
11
- <%= dc_document_statistics %>
15
+ <%= fields %>
16
+ <%= dc_document_statistics %>
12
17
 
13
- <%= dc_actions_for_form 'bottom' %>
14
- </div>
18
+ <%= dc_actions_for_form 'bottom' %>
19
+ </div>
15
20
 
16
- <%= javascript_tag(@js) unless @js.blank? %>
17
- <% unless @css.blank? %><style type="text/css"><%= @css %></style><% end %>
21
+ <%= javascript_tag(@js) unless @js.blank? %>
22
+ <% unless @css.blank? %><style><%= @css %></style><% end %>
23
+ </div>
24
+ </div>
@@ -1,9 +1,13 @@
1
- <%= dc_head_for_form %>
2
- <%= dc_table_title dc_edit_title() %>
1
+ <% dc_form_update %>
3
2
 
4
- <%= form_tag( @parms, method: :put, id: params['form_name'] || params['table'],
5
- class: 'cmsform', multipart: @form['form']['multipart'] ) do %>
6
- <%= render partial: 'form' %>
7
- <% end %>
3
+ <div <%= dc_form_id %>>
4
+ <%= dc_head_for_form %>
5
+ <%= dc_table_title dc_edit_title() %>
6
+
7
+ <%= form_tag( @form_params, method: :put, id: CmsHelper.form_param(params) || CmsHelper.table_param(params),
8
+ class: 'cmsform', multipart: @form['form']['multipart'], window_close: params[:window_close] ) do %>
9
+ <%= render partial: 'form' %>
10
+ <% end %>
11
+ </div>
8
12
 
9
13
  <div id="popup" style="display: none;"></div>
@@ -1,12 +1,14 @@
1
- <div id="<%= params['form_name'] || params['table'] %>" class="dc-form-frame">
1
+ <% dc_form_update %>
2
+
3
+ <div <%= dc_form_id %> class="dc-form-frame">
2
4
  <%= dc_title_for_index @records %>
3
5
 
4
6
  <%= dc_actions_for_index %>
5
7
  <%= dc_div_filter %>
6
8
  <%= dc_flash_messages %>
7
- <div id='result'> <%= render partial: 'result' %></div>
9
+ <div id="result"> <%= render partial: 'result' %></div>
8
10
  </div>
9
11
 
10
12
  <%= javascript_tag(@js) unless @js.blank? %>
11
- <% unless @css.blank? %><style type="text/css"><%= @css %></style><% end %>
13
+ <% unless @css.blank? %><style><%= @css %></style><% end %>
12
14
  <div id="popup" style="display: none;"></div>
@@ -1,8 +1,12 @@
1
- <%= dc_table_title dc_new_title %>
1
+ <% dc_form_update %>
2
2
 
3
- <%= form_tag(@parms, method: :post, id: params['form_name'] || params['table'],
4
- class: 'cmsform', multipart: @form['form']['multipart']) do %>
5
- <%= render partial: 'form' %>
6
- <% end %>
3
+ <div <%= dc_form_id %>>
4
+ <%= dc_table_title dc_new_title %>
5
+
6
+ <%= form_tag(@form_params, method: :post, id: CmsHelper.form_param(params) || CmsHelper.table_param(params),
7
+ class: 'cmsform', multipart: @form['form']['multipart']) do %>
8
+ <%= render partial: 'form' %>
9
+ <% end %>
10
+ </div>
7
11
 
8
12
  <div id="popup" style="display: none;"></div>
@@ -8,6 +8,7 @@
8
8
  <% if @commnets %>
9
9
  <button onclick="location.href='#comments'; return false;"><%= t('drgcms.dc_help.comments_button') %></button>
10
10
  <% end %>
11
+ <div style="float: right"><%= fa_icon('close', class: 'dc-link') %></div>
11
12
  </div>
12
13
 
13
14
  <div class="help-body"><%= dc_help_body if @help %></div>
@@ -4,7 +4,7 @@
4
4
  <title><%= @page_title %></title>
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
6
  <%= stylesheet_link_tag "application", media: 'all' %>
7
- <style type="text/css" media="all"><%= "#{@site.css if @site}#{@design.css if @design}\n#{@page.css if @page}".html_safe %></style>
7
+ <style media="all"><%= "#{@site.css if @site}#{@design.css if @design}\n#{@page.css if @page}".html_safe %></style>
8
8
  <%= @site.header.html_safe %>
9
9
  <%= javascript_include_tag "application" %>
10
10
  <%= csrf_meta_tags %>
@@ -75,7 +75,11 @@ en:
75
75
  filter: Filter
76
76
  refresh: Refresh
77
77
  back: Back
78
+ next: Next
79
+ finish: Finish
80
+ steps: Steps
78
81
  close: Close
82
+ cancel: Cancel
79
83
  delete: Delete
80
84
  enable: Enable
81
85
  disable: Disable
@@ -98,6 +102,7 @@ en:
98
102
  updated_by: Updated by
99
103
  created_at: Created at
100
104
  updated_at: Updated at
105
+ active: Active
101
106
  new_record: New record
102
107
 
103
108
  filter_poll: Filter
@@ -108,6 +113,8 @@ en:
108
113
  choices4_filter_operators: 'Equal to:eq,Contains:like,Greater then:gt,Less then:lt,Is empty:empty'
109
114
 
110
115
  browse_collections: Browse all collections
116
+ category_has_subs: Category can't be deleted, because it contains sub-elements.
117
+ category_as_tree: Edit in treeview
111
118
 
112
119
  dc_journal:
113
120
  zero_selected: No data selected!
@@ -75,7 +75,11 @@ sl:
75
75
  filter: Filter
76
76
  refresh: Osveži
77
77
  back: Nazaj
78
+ next: Naprej
79
+ steps: Koraki
80
+ finish: Zaključek
78
81
  close: Zapri
82
+ cancel: Preklic
79
83
  delete: Izbris
80
84
  enable: Omogoči
81
85
  disable: Onemogoči
@@ -98,6 +102,7 @@ sl:
98
102
  updated_by: Spremenil
99
103
  created_at: Ustvarjeno
100
104
  updated_at: Spremenjeno
105
+ active: Aktiven
101
106
  new_record: Nov zapis
102
107
 
103
108
  filter_poll: Filter
@@ -108,6 +113,8 @@ sl:
108
113
  choices4_filter_operators: 'Je enak:eq,Vsebuje:like,Je večji od:gt,Je manjši od:lt,Je prazen:empty'
109
114
 
110
115
  browse_collections: Brskanje po definicijah zbirk
116
+ category_has_subs: Kategorije ni mogoče izbrisati, ker vsebuje podrejene elemente.
117
+ category_as_tree: Uredi v drevesnem pogledu
111
118
 
112
119
  dc_journal:
113
120
  zero_selected: Ni izbranih podatkov!
data/drg_cms.gemspec CHANGED
@@ -15,18 +15,18 @@ Gem::Specification.new do |s|
15
15
  s.summary = 'DRG: Rapid web application development tool and CMS for Ruby, Rails and MongoDB'
16
16
  s.description = 'DRG, development tool for rapid building of in-house (Intranet, private cloud) applications as well as CMS for creating complex, data-entry intensive web sites.'
17
17
  s.license = 'MIT'
18
- s.files = Dir['{app,config,db,lib}/**/*'] + %w[MIT-LICENSE Rakefile README.md History.log drg_cms.gemspec]
18
+ s.files = Dir['{app,config,db,lib}/**/*'] + %w[MIT-LICENSE Rakefile README.md CHANGELOG.md drg_cms.gemspec]
19
19
  s.test_files = Dir['test/**/*']
20
20
 
21
21
  s.required_ruby_version = '>= 2.7'
22
22
 
23
- s.add_dependency 'rails', '~> 6.1'
23
+ s.add_dependency 'rails'#, '~> 6.1'
24
24
  s.add_dependency 'jquery-rails'
25
25
  s.add_dependency 'jquery-ui-rails'
26
26
  s.add_dependency 'non-stupid-digest-assets'
27
27
 
28
28
  s.add_dependency 'bcrypt' #, '~> 3.0.0'
29
- s.add_dependency 'mongoid', '~> 7'
29
+ s.add_dependency 'mongoid'#, '~> 7'
30
30
 
31
31
  s.add_dependency 'kaminari-mongoid'
32
32
  s.add_dependency 'kaminari-actionview'