drg_cms 0.7.0.2 → 0.7.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +110 -35
- data/app/assets/javascripts/drg_cms/jquery.bpopup.js +372 -0
- data/app/assets/javascripts/drg_cms_application.js +1 -1
- data/app/assets/javascripts/drg_cms_cms.js +1 -1
- data/app/assets/stylesheets/drg_cms/drg_cms.css +126 -36
- data/app/assets/stylesheets/drg_cms/select-multiple.css +6 -7
- data/app/controllers/cmsedit_controller.rb +78 -47
- data/app/controllers/dc_application_controller.rb +22 -25
- data/app/controllers/dc_common_controller.rb +9 -6
- data/app/controllers/dc_main_controller.rb +0 -1
- data/app/controls/{dc_category_control.rb → dc_gallery_control.rb} +15 -30
- data/app/controls/dc_image_control.rb +180 -0
- data/app/controls/dc_page_control.rb +3 -3
- data/app/controls/dc_poll_result_control.rb +38 -39
- data/app/controls/dc_report.rb +9 -4
- data/app/controls/dc_setup_control.rb +53 -0
- data/app/controls/design_element_settings_control.rb +88 -37
- data/app/forms/all_options.yml +20 -9
- data/app/forms/cms_menu.yml +14 -2
- data/app/forms/dc_gallery.yml +1 -1
- data/app/forms/dc_image.yml +122 -0
- data/app/forms/dc_image_search.yml +72 -0
- data/app/forms/dc_page.yml +11 -8
- data/app/forms/dc_poll.yml +2 -1
- data/app/forms/dc_poll_result.yml +10 -7
- data/app/forms/dc_setup.yml +45 -0
- data/app/forms/dc_steps_template.yml +6 -2
- data/app/helpers/cms_common_helper.rb +36 -24
- data/app/helpers/cms_edit_helper.rb +26 -33
- data/app/helpers/cms_helper.rb +29 -12
- data/app/helpers/cms_index_helper.rb +109 -80
- data/app/helpers/dc_application_helper.rb +108 -86
- data/app/helpers/dc_image_helper.rb +127 -0
- data/app/models/concerns/dc_policy_rule_concern.rb +1 -1
- data/app/models/concerns/dc_user_concern.rb +13 -5
- data/app/models/dc_big_table.rb +1 -1
- data/app/models/dc_category.rb +12 -0
- data/app/models/dc_design.rb +5 -4
- data/app/models/dc_filter.rb +24 -27
- data/app/models/dc_image.rb +237 -0
- data/app/models/dc_internals.rb +5 -9
- data/app/models/dc_memory.rb +2 -2
- data/app/models/dc_policy_role.rb +8 -8
- data/app/models/dc_setup.rb +111 -0
- data/app/models/drgcms_form_fields/datetime_picker.rb +1 -1
- data/app/models/drgcms_form_fields/drgcms_field.rb +9 -26
- data/app/models/drgcms_form_fields/embedded.rb +28 -17
- data/app/models/drgcms_form_fields/journal_diff.rb +2 -2
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +88 -76
- data/app/models/drgcms_form_fields/select.rb +41 -19
- data/app/models/drgcms_form_fields/text_with_select.rb +5 -9
- data/app/renderers/dc_big_menu_renderer.rb +18 -20
- data/app/renderers/dc_gallery_renderer.rb +10 -4
- data/app/renderers/dc_menu_renderer.rb +21 -58
- data/app/renderers/dc_page_renderer.rb +7 -7
- data/app/renderers/dc_poll_renderer.rb +13 -12
- data/app/renderers/dc_simple_menu_renderer.rb +1 -1
- data/app/views/cmsedit/_edit_stuff.html.erb +4 -1
- data/app/views/cmsedit/edit.html.erb +1 -1
- data/app/views/cmsedit/index.html.erb +1 -1
- data/app/views/cmsedit/new.html.erb +1 -0
- data/config/locales/drgcms_en.yml +22 -2
- data/config/locales/drgcms_sl.yml +25 -6
- data/config/locales/models_en.yml +50 -1
- data/config/locales/models_sl.yml +60 -1
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +40 -27
- data/lib/generators/convert_to_ar/USAGE +8 -0
- data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +32 -14
- metadata +19 -10
- data/app/assets/javascripts/drg_cms/jquery.bpopup.min.js +0 -7
- data/app/views/layouts/__cmsedit.html.erb +0 -16
@@ -49,8 +49,8 @@ def render
|
|
49
49
|
old_value = v.class == Array ? v[0] : v
|
50
50
|
new_value = v.class == Array ? v[1] : v
|
51
51
|
@html << "<div style='background-color: #eee;'>#{@parent.check_box('select', k)} #{k}</div>
|
52
|
-
<div style='background-color: #fcc;'>-<br>#{old_value}</div>
|
53
|
-
<div style='background-color: #cfc;'>+<br>#{new_value}</div><br>"
|
52
|
+
<div style='background-color: #fcc;'>-<br>#{old_value.to_s.gsub("\n", '<br>')}</div>
|
53
|
+
<div style='background-color: #cfc;'>+<br>#{new_value.to_s.gsub("\n", '<br>')}</div><br>"
|
54
54
|
end
|
55
55
|
@html << '</div>'
|
56
56
|
self
|
@@ -24,12 +24,12 @@ module DrgcmsFormFields
|
|
24
24
|
|
25
25
|
###########################################################################
|
26
26
|
# Implementation of multitext_autocomplete DRG Form field.
|
27
|
-
#
|
27
|
+
#
|
28
28
|
# multitext_autocomplete field is complex data entry field which uses autocomplete
|
29
29
|
# function when selecting multiple values for MongoDB Array field. Array typically holds
|
30
|
-
# id's of selected documents and control typically displays value of the field name
|
30
|
+
# id's of selected documents and control typically displays value of the field name
|
31
31
|
# defined by search options.
|
32
|
-
#
|
32
|
+
#
|
33
33
|
# ===Form options:
|
34
34
|
# * +name:+ field name (required)
|
35
35
|
# * +type:+ multitext_autocomplete (required)
|
@@ -40,12 +40,12 @@ module DrgcmsFormFields
|
|
40
40
|
# * collection_name.search_field_name.method_name; When searching is more complex custom search
|
41
41
|
# method may be defined in CollectionName model which will provide result set for search.
|
42
42
|
# * +with_new+ Will add an icon for shortcut to add new document to collection
|
43
|
-
#
|
43
|
+
#
|
44
44
|
# Form example:
|
45
45
|
# 90:
|
46
46
|
# name: kats
|
47
47
|
# type: multitext_autocomplete
|
48
|
-
# search: dc_category.name
|
48
|
+
# search: dc_category.name
|
49
49
|
# with_new: model_name
|
50
50
|
# size: 30
|
51
51
|
###########################################################################
|
@@ -55,106 +55,116 @@ class MultitextAutocomplete < DrgcmsField
|
|
55
55
|
# Returns value for readonly field
|
56
56
|
###########################################################################
|
57
57
|
def ro_standard(table, search)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
search = search.split(
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
super(result)
|
58
|
+
current_values = @record.send(@yaml['name'])
|
59
|
+
return self if current_values.blank?
|
60
|
+
|
61
|
+
table = table.classify.constantize
|
62
|
+
search = search.split(/\.|\,/).first if search.match(/\.|\,/)
|
63
|
+
html = current_values.inject('') { |r, element| r << table.find(element)[search] + '<br>' }
|
64
|
+
super(html)
|
67
65
|
end
|
68
66
|
|
69
67
|
###########################################################################
|
70
68
|
# Render multitext_autocomplete field html code
|
71
69
|
###########################################################################
|
72
|
-
def render
|
73
|
-
#
|
70
|
+
def render
|
71
|
+
# get field name
|
74
72
|
if @yaml['search'].class == Hash
|
75
|
-
table
|
73
|
+
table = @yaml['search']['table']
|
76
74
|
field_name = @yaml['search']['field']
|
77
|
-
method
|
78
|
-
search
|
79
|
-
elsif @yaml['search'].to_s.match(
|
75
|
+
method = @yaml['search']['method']
|
76
|
+
search = method.nil? ? field_name : "#{field_name}.#{method}"
|
77
|
+
elsif @yaml['search'].to_s.match(/\.|\,/)
|
80
78
|
table, field_name, method = @yaml['search'].split(/\.|\,/).map(&:strip)
|
81
79
|
search = method.nil? ? field_name : "#{field_name}.#{method}"
|
82
80
|
else # search and table name are separated
|
83
81
|
search = field_name = @yaml['search']
|
84
82
|
end
|
85
|
-
#
|
83
|
+
# get table name
|
86
84
|
if @yaml['table']
|
87
85
|
table = if @yaml['table'].class == String
|
88
|
-
|
89
|
-
# eval(how_to_get_my_table_name)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
86
|
+
@yaml['table']
|
87
|
+
# eval(how_to_get_my_table_name)
|
88
|
+
elsif @yaml['table']['eval']
|
89
|
+
eval @yaml['table']['eval']
|
90
|
+
else
|
91
|
+
Rails.logger.error "Field #{@yaml['name']}: Invalid table parameter!"
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
if table.blank? || search.blank?
|
97
|
+
@html << 'Table or search field not defined!'
|
98
|
+
return self
|
96
99
|
end
|
97
|
-
|
98
|
-
|
100
|
+
|
101
|
+
# does collection exists
|
102
|
+
collection = table.classify.constantize rescue nil
|
103
|
+
if collection.nil?
|
104
|
+
@html << "Invalid table name: #{table}"
|
99
105
|
return self
|
100
106
|
end
|
101
|
-
|
102
|
-
#
|
103
|
-
collection = table.classify.constantize
|
107
|
+
|
108
|
+
# does field exists
|
104
109
|
unless @record.respond_to?(@yaml['name'])
|
105
|
-
@html << "Invalid field name: #{@yaml['name']}"
|
110
|
+
@html << "Invalid field name: #{@yaml['name']}"
|
106
111
|
return self
|
107
112
|
end
|
108
|
-
|
113
|
+
|
114
|
+
# search data entry
|
109
115
|
@yaml['html'] ||= {}
|
110
116
|
@yaml['html']['value'] = '' # must be. Otherwise it will look into record and return error
|
111
117
|
@yaml['html']['placeholder'] = t('drgcms.search_placeholder')
|
112
118
|
_name = '_' + @yaml['name']
|
113
119
|
@html << '<div class="ui-autocomplete-border">'
|
114
|
-
@html << @parent.link_to(@parent.
|
120
|
+
@html << @parent.link_to(@parent.mi_icon('plus-square-o green'), '#', onclick: 'return false;') # dummy add. But it is usefull.
|
115
121
|
|
122
|
+
# text_field for autocomplete
|
116
123
|
record = record_text_for(@yaml['name'])
|
117
|
-
# text field for autocomplete
|
118
124
|
@html << '<span class="dc-text-autocomplete">' << @parent.text_field(record, _name, @yaml['html']) << '<span></span></span>'
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
125
|
+
|
126
|
+
# link for adding new documents to searched collection
|
127
|
+
if @yaml['with_new'] && !@readonly
|
128
|
+
@html << ' ' +
|
129
|
+
@parent.mi_icon('plus-square-o', class: 'in-edit-add', title: t('drgcms.new'),
|
130
|
+
style: "vertical-align: top;", 'data-table' => @yaml['with_new'] )
|
124
131
|
end
|
132
|
+
|
125
133
|
# div to list active selections
|
126
134
|
@html << "<div id =\"#{record}#{@yaml['name']}\">"
|
127
|
-
#
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
#
|
135
|
+
# fill with current values
|
136
|
+
current_values = @record.send(@yaml['name'])
|
137
|
+
unless current_values.nil?
|
138
|
+
current_values.each do |element|
|
139
|
+
# this is quick and dirty trick. We have model dc_big_table which can be used for retrive
|
140
|
+
# more complicated options
|
132
141
|
# TODO retrieve choices from big_table
|
133
142
|
rec = if table == 'dc_big_table'
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
143
|
+
collection.find(@yaml['name'], @parent.session)
|
144
|
+
else
|
145
|
+
collection.find(element)
|
146
|
+
end
|
147
|
+
|
139
148
|
@html << if rec
|
140
|
-
link = @parent.link_to(@parent.
|
141
|
-
onclick:
|
142
|
-
link = @parent.
|
149
|
+
link = @parent.link_to(@parent.mi_icon('remove_circle red'), '#',
|
150
|
+
onclick: %($('##{rec.id}').hide(); let v = $('##{record}_#{@yaml['name']}_#{rec.id}'); v.val("-" + v.val());return false;))
|
151
|
+
link = @parent.mi_icon('check green') if @readonly
|
143
152
|
field = @parent.hidden_field(record, "#{@yaml['name']}_#{rec.id}", value: element)
|
144
|
-
|
153
|
+
%(<div id="#{rec.id}" style="padding:4px;">#{link} #{rec.send(field_name)}<br>#{field}</div>)
|
145
154
|
else
|
146
|
-
'** error **'
|
155
|
+
'** error **' # Related data is missing. It happends.
|
147
156
|
end
|
148
157
|
end
|
149
158
|
end
|
150
159
|
@html << "</div></div>"
|
151
|
-
|
152
|
-
|
153
|
-
|
160
|
+
|
161
|
+
# Create text for div to be added when new category is selected
|
162
|
+
link = @parent.link_to(@parent.mi_icon('remove_circle red'), '#',
|
163
|
+
onclick: %($('#rec_id').hide(); let v = $('##{record}_#{@yaml['name']}_rec_id'); v.val("-" + v.val());return false;"))
|
154
164
|
field = @parent.hidden_field(record, "#{@yaml['name']}_rec_id", value: 'rec_id')
|
155
|
-
one_div =
|
156
|
-
|
157
|
-
# JS stuff
|
165
|
+
one_div = %(<div id="rec_id" style="padding:4px;">#{link} rec_search<br>#{field}</div>)
|
166
|
+
|
167
|
+
# JS stuff
|
158
168
|
@js << <<EOJS
|
159
169
|
$(document).ready(function() {
|
160
170
|
$("##{record}_#{_name}").autocomplete( {
|
@@ -172,11 +182,13 @@ $(document).ready(function() {
|
|
172
182
|
});
|
173
183
|
},
|
174
184
|
change: function (event, ui) {
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
185
|
+
let div = '#{one_div}';
|
186
|
+
if (ui.item != null) {
|
187
|
+
div = div.replace(/rec_id/g, ui.item.id)
|
188
|
+
div = div.replace('rec_search', ui.item.value)
|
189
|
+
$("##{record}#{@yaml['name']}").append(div);
|
190
|
+
$("##{record}_#{_name}").val('');
|
191
|
+
}
|
180
192
|
$("##{record}_#{_name}").focus();
|
181
193
|
},
|
182
194
|
minLength: 2
|
@@ -184,20 +196,20 @@ $(document).ready(function() {
|
|
184
196
|
});
|
185
197
|
EOJS
|
186
198
|
|
187
|
-
self
|
199
|
+
self
|
188
200
|
end
|
189
201
|
|
190
202
|
###########################################################################
|
191
|
-
# Class method for retrieving data from multitext_autocomplete form field.
|
203
|
+
# Class method for retrieving data from multitext_autocomplete form field. Values are sabed
|
204
|
+
# in parameters as name_id => id
|
192
205
|
###########################################################################
|
193
206
|
def self.get_data(params, name)
|
194
207
|
r = []
|
195
|
-
params['record'].each do |k,v|
|
196
|
-
# if it starts with - then it was removed
|
197
|
-
r << BSON::ObjectId.from_string(v) if k.
|
208
|
+
params['record'].each do |k, v| # inject does not work on params
|
209
|
+
# if it starts with - then it was removed
|
210
|
+
r << BSON::ObjectId.from_string(v) if k.starts_with?("#{name}_") && v[0] != '-'
|
198
211
|
end
|
199
|
-
r.uniq
|
200
|
-
r
|
212
|
+
r.uniq
|
201
213
|
end
|
202
214
|
|
203
215
|
end
|
@@ -47,7 +47,9 @@ module DrgcmsFormFields
|
|
47
47
|
# * +depend:+ Select options may depend on a value in some other field. If depend option is specified
|
48
48
|
# then chices must be provided by class method and defined in eval option.
|
49
49
|
# * +html:+ html options which apply to select field (optional)
|
50
|
-
#
|
50
|
+
# * +with_new:+ model_name.form_name will invoke view dialog for selected option
|
51
|
+
# * +with_edit:+ model_name.form_name will invoke edit dialog for selected option
|
52
|
+
#
|
51
53
|
# Form example:
|
52
54
|
# 30:
|
53
55
|
# name: type
|
@@ -80,9 +82,9 @@ class Select < DrgcmsField
|
|
80
82
|
def choices_in_helper(helper = nil)
|
81
83
|
helper ||= "helpers.label.#{@form['table']}.choices4_#{@yaml['name']}"
|
82
84
|
c = t(helper)
|
83
|
-
if c.match(
|
85
|
+
if c.match(/translation missing/i)
|
84
86
|
helper = "choices_for_#{@form['table']}_#{@yaml['name']}"
|
85
|
-
return "Error. #{helper} not defined" if c.match(
|
87
|
+
return "Error. #{helper} not defined" if c.match(/translation missing/i)
|
86
88
|
end
|
87
89
|
c
|
88
90
|
end
|
@@ -95,21 +97,27 @@ def choices_in_eval(e)
|
|
95
97
|
e.strip!
|
96
98
|
if @yaml['depend'].nil?
|
97
99
|
method = e.split(/\ |\(/).first
|
98
|
-
return eval(e) if respond_to?(method) #
|
99
|
-
return eval('@parent.' + e) if @parent.respond_to?(method) # is method defined in
|
100
|
+
return eval(e) if respond_to?(method) # is method defined here
|
101
|
+
return eval('@parent.' + e) if @parent.respond_to?(method) # is method defined in helper methods
|
100
102
|
# eval whatever it is there
|
101
103
|
eval e
|
102
104
|
else
|
103
|
-
# add event listener to depend field
|
104
|
-
|
105
|
-
$(document).ready(function() {
|
106
|
-
|
107
|
-
|
108
|
-
|
105
|
+
# add event listener to depend field(s)
|
106
|
+
depend_value = ''
|
107
|
+
@js << "\n$(document).ready(function() {\n"
|
108
|
+
@yaml['depend'].split(',') do |depend|
|
109
|
+
depend.strip!
|
110
|
+
depend_value << ',' if depend_value.present?
|
111
|
+
# depend field might be virtual field. It's value should be set in params
|
112
|
+
depend_value << (depend[0] == '_' ? @parent.params["p_#{depend}"] : @record[depend]).to_s
|
113
|
+
next if depend == @yaml['name'] # self may be sent, but don't listen to change event
|
114
|
+
|
115
|
+
@js << %(
|
116
|
+
$('#record_#{depend}').change( function(e) { update_select_depend('record_#{@yaml['name']}', '#{@yaml['depend']}', '#{e}');});
|
117
|
+
$('#_record_#{depend}').change( function(e) { update_select_depend('record_#{@yaml['name']}', '#{@yaml['depend']}', '#{e}');});
|
109
118
|
)
|
110
|
-
|
111
|
-
|
112
|
-
|
119
|
+
end
|
120
|
+
@js << + "});\n"
|
113
121
|
e << " '#{depend_value}'"
|
114
122
|
eval e
|
115
123
|
end
|
@@ -132,7 +140,7 @@ def get_choices
|
|
132
140
|
|
133
141
|
choices.chomp.split(',').map { |e| e.match(':') ? e.split(':') : e }
|
134
142
|
rescue Exception => e
|
135
|
-
Rails.logger.
|
143
|
+
Rails.logger.error "\nError in select eval. #{e.message}\n"
|
136
144
|
Rails.logger.debug(e.backtrace.join($/)) if Rails.env.development?
|
137
145
|
['error'] # return empty array when error occures
|
138
146
|
end
|
@@ -144,9 +152,21 @@ end
|
|
144
152
|
def add_view_code
|
145
153
|
return '' if (data = @record.send(@yaml['name'])).blank?
|
146
154
|
|
147
|
-
table, form_name = @yaml['
|
155
|
+
table, form_name = @yaml['with_view'].split(/\ |\,/).delete_if(&:blank)
|
148
156
|
url = @parent.url_for(controller: 'cmsedit', id: data, action: :edit, table: table, form_name: form_name, readonly: true, window_close: 1 )
|
149
|
-
icon = @parent.mi_icon('
|
157
|
+
icon = @parent.mi_icon('visibility-o md-18')
|
158
|
+
%(<span class="dc-window-open" data-url="#{url}"> #{icon}</span>)
|
159
|
+
end
|
160
|
+
|
161
|
+
###########################################################################
|
162
|
+
# Will add code to view more data about selected option in a window
|
163
|
+
###########################################################################
|
164
|
+
def add_edit_code
|
165
|
+
return '' if (data = @record.send(@yaml['name'])).blank?
|
166
|
+
|
167
|
+
table, form_name = @yaml['view'].split(/\ |\,/).delete_if(&:blank)
|
168
|
+
url = @parent.url_for(controller: 'cmsedit', id: data, action: :edit, table: table, form_name: form_name, window_close: 1 )
|
169
|
+
icon = @parent.mi_icon('edit-o md-18')
|
150
170
|
%(<span class="dc-window-open" data-url="#{url}"> #{icon}</span>)
|
151
171
|
end
|
152
172
|
|
@@ -176,7 +196,7 @@ def ro_standard
|
|
176
196
|
(html = choice; break) if choice.to_s == value.to_s
|
177
197
|
end
|
178
198
|
end
|
179
|
-
html << add_view_code if @yaml['
|
199
|
+
html << add_view_code if @yaml['with_view']
|
180
200
|
end
|
181
201
|
super(html)
|
182
202
|
end
|
@@ -196,12 +216,14 @@ def render
|
|
196
216
|
|
197
217
|
record = record_text_for(@yaml['name'])
|
198
218
|
if @yaml['html'][:multiple]
|
219
|
+
@yaml['html']['class'] = "#{@yaml['html']['class']} select-multiple"
|
199
220
|
@html << @parent.select(record, @yaml['name'], get_choices, options_part, @yaml['html'])
|
200
221
|
@js << "$('##{record}_#{@yaml['name']}').selectMultiple();"
|
201
222
|
else
|
202
223
|
@html << @parent.select(record, @yaml['name'], get_choices, options_part, @yaml['html'])
|
203
224
|
# add code for view more data
|
204
|
-
@html <<
|
225
|
+
@html << view_code_add() if @yaml['with_view']
|
226
|
+
@html << edit_code_add() if @yaml['with_edit'] && !@readonly
|
205
227
|
end
|
206
228
|
self
|
207
229
|
end
|
@@ -65,9 +65,7 @@ class TextWithSelect < Select
|
|
65
65
|
# Render text_with_select field html code
|
66
66
|
###########################################################################
|
67
67
|
def render
|
68
|
-
|
69
|
-
set_initial_value('html','value')
|
70
|
-
|
68
|
+
set_initial_value
|
71
69
|
record = record_text_for(@yaml['name'])
|
72
70
|
@html << @parent.text_field( record, @yaml['name'], @yaml['html'])
|
73
71
|
@yaml['html']['class'] ||= ''
|
@@ -80,13 +78,11 @@ def render
|
|
80
78
|
# javascript to update text field if new value is selected in select field
|
81
79
|
@js =<<EOJS
|
82
80
|
$(document).ready(function() {
|
83
|
-
|
84
|
-
|
85
|
-
$('##{record}_#{@yaml['name']}').val( $(this).val() );
|
81
|
+
$('##{@yaml['name']}_').on("click", function() {
|
82
|
+
$('##{record}_#{@yaml['name']}').val( $(this).val().toString() );
|
86
83
|
$('##{record}_#{@yaml['name']}').trigger("change");
|
87
|
-
|
88
|
-
|
89
|
-
});
|
84
|
+
$('##{record}_#{@yaml['name']}').focus();
|
85
|
+
});
|
90
86
|
});
|
91
87
|
EOJS
|
92
88
|
self
|
@@ -1,4 +1,3 @@
|
|
1
|
-
#coding: utf-8
|
2
1
|
#--
|
3
2
|
# Copyright (c) 2013+ Damjan Rems
|
4
3
|
#
|
@@ -51,9 +50,7 @@ def find_selected #:nodoc:
|
|
51
50
|
while ret and ret.parent != nil
|
52
51
|
ret = DcBigMenu.find( ret.parent )
|
53
52
|
end
|
54
|
-
|
55
|
-
# p ret
|
56
|
-
ret ||= DcBigMenu.where(dc_site_id: @site._id, parent: nil, active: true).limit(1).first
|
53
|
+
ret || DcBigMenu.where(dc_site_id: @site._id, parent: nil, active: true).limit(1).first
|
57
54
|
end
|
58
55
|
|
59
56
|
########################################################################
|
@@ -78,7 +75,7 @@ def link_4menu(item) #:nodoc:
|
|
78
75
|
html = ''
|
79
76
|
link = item.link
|
80
77
|
link = "/#{@site.route_name}/#{item.page_id}" #if link.blank?
|
81
|
-
|
78
|
+
|
82
79
|
html << @parent.link_to(item.picture, link) unless item.picture.blank?
|
83
80
|
html << if !item.caption.blank?
|
84
81
|
# TODO Translation
|
@@ -91,23 +88,23 @@ end
|
|
91
88
|
########################################################################
|
92
89
|
def left_menu
|
93
90
|
html = ''
|
94
|
-
|
95
|
-
# Show menu on same level if selected has no children
|
91
|
+
menu = DcBigMenu.find( @parent.page.menu_id )
|
92
|
+
# Show menu on same level if selected has no children
|
96
93
|
if DcBigMenu.where( parent: @parent.page.menu_id ).limit(1).to_a.size == 0
|
97
|
-
|
94
|
+
menu = DcBigMenu.find( m.parent )
|
98
95
|
end
|
99
|
-
|
100
|
-
html << "<div class='menu-left-item-top'>#{
|
101
|
-
DcBigMenu.where( parent:
|
96
|
+
|
97
|
+
html << "<div class='menu-left-item-top'>#{menu.caption}</div>"
|
98
|
+
DcBigMenu.where( parent: menu.id ).order(order: 1).each do |item|
|
102
99
|
html << (item._id == @parent.page.menu_id ? '<div class="menu-left-item-selected">' : '<div class="menu-left-item">')
|
103
100
|
html << link_4menu(item)
|
104
101
|
html << '</div>'
|
105
102
|
end
|
106
|
-
|
103
|
+
|
107
104
|
html << "<div class='menu-left-item-bottom'>"
|
108
|
-
if
|
109
|
-
|
110
|
-
html << "▲ #{link_4menu(
|
105
|
+
if menu.parent
|
106
|
+
parent = DcBigMenu.find( menu.parent )
|
107
|
+
html << "▲ #{link_4menu(parent)}"
|
111
108
|
end
|
112
109
|
html << ' </div>'
|
113
110
|
end
|
@@ -124,14 +121,14 @@ def path
|
|
124
121
|
m = DcBigMenu.find( m.parent )
|
125
122
|
a << m
|
126
123
|
end
|
127
|
-
|
124
|
+
|
128
125
|
(a.size - 1).downto(0) do |i|
|
129
126
|
html << "<span id=menu-path-#{a.size - 1 - i}>"
|
130
127
|
html << link_4menu(a[i])
|
131
128
|
html << (i > 0 ? ' » ' : '') #›➔
|
132
129
|
html << '</span>'
|
133
130
|
end
|
134
|
-
# Save level to parents params object
|
131
|
+
# Save level to parents params object
|
135
132
|
@parent.params[:menu_level] = a.size
|
136
133
|
html
|
137
134
|
end
|
@@ -144,20 +141,21 @@ def default
|
|
144
141
|
@selected = find_selected
|
145
142
|
level_0 = DcBigMenu.where(dc_site_id: @site._id, parent: nil, active: true).sort(order: 1).to_a
|
146
143
|
level_0.each do |item|
|
147
|
-
# menu can be hidden from user
|
144
|
+
# menu can be hidden from user
|
148
145
|
can_view, msg = dc_user_can_view(@parent, item)
|
149
146
|
next unless can_view
|
147
|
+
|
150
148
|
klas = item.id == @selected.id ? "menu0-selected" : "menu0-item"
|
151
149
|
html << "<li class='#{klas}'>#{ link_4menu(item) }</li>\n"
|
152
150
|
end
|
153
151
|
html << "</ul></div>"
|
154
|
-
# submenu
|
152
|
+
# submenu
|
155
153
|
level_1 = DcBigMenu.where(dc_site_id: @site._id, parent: @selected.id, active: true).sort(order: 1).to_a
|
156
154
|
html << "<div class='menu1-div'><ul>\n"
|
157
155
|
level_1.each do |item1|
|
158
|
-
# menu can be hidden from user
|
159
156
|
can_view, msg = dc_user_can_view(@parent, item1)
|
160
157
|
next unless can_view
|
158
|
+
|
161
159
|
html << " <li class='menu1-item'>#{link_4menu(item1)}</li>\n"
|
162
160
|
end
|
163
161
|
html << '</ul></div>'
|
@@ -52,14 +52,20 @@ end
|
|
52
52
|
def default
|
53
53
|
can_view, msg = dc_user_can_view(@parent, @page)
|
54
54
|
return msg unless can_view
|
55
|
-
|
55
|
+
|
56
56
|
html = '<div class="picture-gallery"><ul>'
|
57
57
|
DcGallery.where(doc_id: @opts[:doc_id], active: true).order_by(order: 1).each do |picture|
|
58
58
|
html << '<li>'
|
59
|
-
|
59
|
+
if @opts[:edit_mode] > 1
|
60
|
+
html << edit_menu(picture)
|
61
|
+
html << %(
|
62
|
+
<span class="dc-inline-link dc-link-ajax" data-url="/cmsedit/run?control=DcGalleryControl.picture_remove;id=#{picture.id};table=DcGallery"
|
63
|
+
data-confirm="#{t('drgcms.confirm_delete')}" title="#{t('drgcms.delete')}">
|
64
|
+
<i class="mi-o mi-delete"></i>
|
65
|
+
</span>)
|
66
|
+
end
|
60
67
|
html << "#{@parent.link_to(i@parent.mage_tag(picture.thumbnail, title: picture.title), picture.picture)}<li>"
|
61
68
|
end
|
62
|
-
#
|
63
69
|
html << '</ul></div>'
|
64
70
|
end
|
65
71
|
|
@@ -88,7 +94,7 @@ def edit_menu(picture)
|
|
88
94
|
opts[:id] = picture.id
|
89
95
|
opts[:table] = 'dc_gallery'
|
90
96
|
|
91
|
-
'<li>'+dc_link_for_edit(opts)+'</li>'
|
97
|
+
'<li>' + dc_link_for_edit(opts) + '</li>'
|
92
98
|
end
|
93
99
|
|
94
100
|
|