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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +260 -0
- data/MIT-LICENSE +1 -1
- data/README.md +9 -5
- data/app/assets/javascripts/drg_cms/drg_cms.js +69 -32
- data/app/assets/javascripts/drg_cms_application.js +0 -2
- data/app/assets/javascripts/drg_cms_cms.js +2 -3
- data/app/assets/stylesheets/drg_cms/drg_cms.css +89 -26
- data/app/assets/stylesheets/drg_cms/jstree.css +32 -27
- data/app/assets/stylesheets/drg_cms/select-multiple.css +4 -2
- data/app/controllers/cmsedit_controller.rb +9 -111
- data/app/controllers/dc_application_controller.rb +100 -23
- data/app/controllers/dc_common_controller.rb +10 -24
- data/app/controls/browse_models_control.rb +3 -1
- data/app/controls/cmsedit_control.rb +5 -1
- data/app/controls/dc_category_control.rb +61 -0
- data/app/controls/dc_report.rb +1 -1
- data/app/forms/all_options.yml +2 -0
- data/app/forms/cms_menu.yml +3 -2
- data/app/forms/dc_browse_models.yml +24 -2
- data/app/forms/dc_category.yml +17 -8
- data/app/forms/dc_category_as_tree.yml +31 -0
- data/app/forms/dc_steps_template.yml +51 -0
- data/app/forms/help/dc_category_as_tree.en +4 -0
- data/app/forms/help/dc_category_as_tree.sl +5 -0
- data/app/helpers/cms_common_helper.rb +66 -1
- data/app/helpers/cms_edit_helper.rb +230 -121
- data/app/helpers/cms_helper.rb +74 -17
- data/app/helpers/cms_index_helper.rb +40 -37
- data/app/helpers/dc_application_helper.rb +37 -76
- data/app/helpers/dc_category_helper.rb +129 -0
- data/app/models/dc_category.rb +50 -24
- data/app/models/dc_journal.rb +2 -2
- data/app/models/dc_json_ld.rb +18 -41
- data/app/models/drgcms_form_fields/date_picker.rb +10 -12
- data/app/models/drgcms_form_fields/datetime_picker.rb +10 -11
- data/app/models/drgcms_form_fields/drgcms_field.rb +46 -4
- data/app/models/drgcms_form_fields/readonly.rb +1 -1
- data/app/models/drgcms_form_fields/select.rb +2 -2
- data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
- data/app/models/drgcms_form_fields/text_with_select.rb +1 -0
- data/app/models/drgcms_form_fields/tree_select.rb +20 -19
- data/app/renderers/dc_common_renderer.rb +20 -3
- data/app/views/cmsedit/_form.html.erb +19 -12
- data/app/views/cmsedit/edit.html.erb +10 -6
- data/app/views/cmsedit/index.html.erb +5 -3
- data/app/views/cmsedit/new.html.erb +9 -5
- data/app/views/dc_common/_help.html.erb +1 -0
- data/app/views/layouts/content.html.erb +1 -1
- data/config/locales/drgcms_en.yml +7 -0
- data/config/locales/drgcms_sl.yml +7 -0
- data/drg_cms.gemspec +3 -3
- data/lib/drg_cms/version.rb +1 -1
- data/lib/tasks/dc_cleanup.rake +20 -42
- metadata +18 -12
- data/History.log +0 -109
data/app/models/dc_json_ld.rb
CHANGED
@@ -37,21 +37,21 @@
|
|
37
37
|
#
|
38
38
|
########################################################################
|
39
39
|
class DcJsonLd
|
40
|
-
|
41
|
-
|
40
|
+
include Mongoid::Document
|
41
|
+
include Mongoid::Timestamps
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
48
|
+
embeds_many :dc_json_lds, :cyclic => true
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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(
|
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(
|
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']
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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 << %
|
84
|
+
@js << %(
|
87
85
|
$(document).ready(function() {
|
88
|
-
$("##{record}_#{@yaml['name']}").datetimepicker(
|
89
|
-
#{hash_to_options(
|
86
|
+
$("##{record}_#{@yaml['name']}").datetimepicker({
|
87
|
+
#{hash_to_options(options)}
|
90
88
|
});
|
91
89
|
});
|
92
|
-
|
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:
|
33
|
+
# * options: 'step: 15,inline: true,lang: sl' or
|
34
34
|
#
|
35
35
|
# * options:
|
36
36
|
# * step: 15
|
37
37
|
# * inline: true
|
38
|
-
# * lang:
|
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']
|
65
|
-
|
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 << %
|
68
|
+
@js << %(
|
70
69
|
$(document).ready(function() {
|
71
|
-
$("##{record}_#{@yaml['name']}").datetimepicker(
|
72
|
-
#{hash_to_options(
|
70
|
+
$("##{record}_#{@yaml['name']}").datetimepicker({
|
71
|
+
#{hash_to_options(options)}
|
73
72
|
});
|
74
73
|
});
|
75
|
-
|
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: "
|
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(
|
262
|
-
|
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 <<
|
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.
|
150
|
-
%(<span class="dc-window-open" data-url="#{url}"
|
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 = [ %
|
70
|
+
data = [ %("selected" : #{choice.last ? 'true' : 'false'} ) ]
|
70
71
|
# only for parent objects
|
71
72
|
if @choices[ choice[1].to_s ]
|
72
|
-
|
73
|
+
# parent is not selectable
|
73
74
|
data << '"disabled" : true' unless @parent.dc_dont?(@yaml['parent_disabled'], true)
|
74
|
-
|
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 << %
|
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 = %
|
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
|
160
|
+
result.delete_if(&:blank?)
|
161
161
|
return nil if result.size == 0
|
162
|
-
|
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
|
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
|
-
|
73
|
-
|
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
|
-
|
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
|
-
|
3
|
-
<%=
|
4
|
-
<%=
|
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
|
-
|
9
|
-
|
10
|
-
<%= dc_fields_for_form %>
|
11
|
-
<%= dc_document_statistics %>
|
15
|
+
<%= fields %>
|
16
|
+
<%= dc_document_statistics %>
|
12
17
|
|
13
|
-
|
14
|
-
</div>
|
18
|
+
<%= dc_actions_for_form 'bottom' %>
|
19
|
+
</div>
|
15
20
|
|
16
|
-
<%= javascript_tag(@js) unless @js.blank? %>
|
17
|
-
<% unless @css.blank? %><style
|
21
|
+
<%= javascript_tag(@js) unless @js.blank? %>
|
22
|
+
<% unless @css.blank? %><style><%= @css %></style><% end %>
|
23
|
+
</div>
|
24
|
+
</div>
|
@@ -1,9 +1,13 @@
|
|
1
|
-
|
2
|
-
<%= dc_table_title dc_edit_title() %>
|
1
|
+
<% dc_form_update %>
|
3
2
|
|
4
|
-
<%=
|
5
|
-
|
6
|
-
<%=
|
7
|
-
|
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
|
-
|
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=
|
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
|
13
|
+
<% unless @css.blank? %><style><%= @css %></style><% end %>
|
12
14
|
<div id="popup" style="display: none;"></div>
|
@@ -1,8 +1,12 @@
|
|
1
|
-
|
1
|
+
<% dc_form_update %>
|
2
2
|
|
3
|
-
<%=
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
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
|
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'
|
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'
|
29
|
+
s.add_dependency 'mongoid'#, '~> 7'
|
30
30
|
|
31
31
|
s.add_dependency 'kaminari-mongoid'
|
32
32
|
s.add_dependency 'kaminari-actionview'
|