drg_cms 0.6.1.9 → 0.7.0.2

Sign up to get free protection for your applications and to get access to all the features.
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'