drg_cms 0.4.39 → 0.4.53
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.
- checksums.yaml +4 -4
- data/README.md +49 -0
- data/app/assets/images/drg_cms/file_manager.png +0 -0
- data/app/assets/javascripts/drg_cms/drg_cms.js +8 -8
- data/app/assets/stylesheets/drg_cms/drg_cms.css +22 -20
- data/app/controllers/cmsedit_controller.rb +170 -114
- data/app/controllers/dc_application_controller.rb +142 -56
- data/app/controllers/dc_common_controller.rb +56 -34
- data/app/controllers/dc_main_controller.rb +1 -4
- data/app/controllers/drgcms_controls/dc_page_controls.rb +3 -0
- data/app/forms/all_options.yml +3 -0
- data/app/forms/cms_menu.yml +100 -117
- data/app/forms/dc_design.yml +1 -1
- data/app/forms/dc_ident.yml +37 -0
- data/app/forms/dc_menu_item.yml +1 -1
- data/app/forms/dc_permission.yml +1 -1
- data/app/forms/dc_site.yml +4 -0
- data/app/helpers/cmsedit_helper.rb +44 -80
- data/app/helpers/dc_ad_renderer.rb +27 -15
- data/app/helpers/dc_application_helper.rb +433 -196
- data/app/helpers/dc_big_menu_renderer.rb +40 -40
- data/app/helpers/dc_captcha_renderer.rb +38 -25
- data/app/helpers/dc_common_renderer.rb +15 -48
- data/app/helpers/dc_menu_renderer.rb +30 -20
- data/app/helpers/dc_page_renderer.rb +14 -18
- data/app/helpers/dc_part_renderer.rb +45 -16
- data/app/helpers/dc_piece_renderer.rb +23 -29
- data/app/helpers/dc_poll_renderer.rb +31 -20
- data/app/helpers/dc_renderer.rb +5 -4
- data/app/helpers/dc_simple_menu_renderer.rb +90 -68
- data/app/models/{__dc_global_data.rb → __dc_stat.rb} +20 -21
- data/app/models/dc_ad.rb +13 -1
- data/app/models/dc_ad_stat.rb +6 -0
- data/app/models/dc_big_menu.rb +15 -2
- data/app/models/dc_big_table.rb +27 -4
- data/app/models/dc_big_table_locale.rb +7 -0
- data/app/models/dc_big_table_value.rb +7 -0
- data/app/models/dc_category.rb +9 -3
- data/app/models/dc_design.rb +50 -0
- data/app/models/dc_dummy.rb +41 -1
- data/app/models/dc_folder_permission.rb +9 -2
- data/app/models/{dc_global_data.rb → dc_ident.rb} +20 -22
- data/app/models/dc_journal.rb +9 -1
- data/app/models/dc_key_value_store.rb +41 -4
- data/app/models/dc_link.rb +7 -0
- data/app/models/dc_menu.rb +20 -3
- data/app/models/dc_menu_item.rb +7 -0
- data/app/models/dc_page.rb +31 -12
- data/app/models/dc_part.rb +34 -4
- data/app/models/dc_permission.rb +32 -12
- data/app/models/dc_piece.rb +32 -4
- data/app/models/dc_policy.rb +17 -11
- data/app/models/dc_policy_role.rb +12 -7
- data/app/models/dc_policy_rule.rb +32 -4
- data/app/models/dc_poll.rb +8 -0
- data/app/models/dc_poll_item.rb +6 -0
- data/app/models/dc_simple_menu.rb +18 -3
- data/app/models/dc_simple_menu_item.rb +20 -2
- data/app/models/dc_site.rb +13 -3
- data/app/models/dc_stat.rb +8 -1
- data/app/models/dc_user.rb +18 -2
- data/app/models/dc_user_role.rb +7 -0
- data/app/models/dc_visit.rb +5 -0
- data/app/{helpers → models}/drgcms_form_field.rb +171 -73
- data/app/views/__dc_at_the_beginning/create.html.erb +9 -0
- data/app/views/__dc_at_the_beginning/index.html.erb +19 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +2 -0
- data/app/views/cmsedit/_form.html.erb +0 -1
- data/app/views/dc_mail/subscribe.html.erb +0 -0
- data/config/initializers/kaminari_patch.rb +5 -4
- data/config/locales/drgcms_en.yml +4 -0
- data/config/locales/drgcms_sl.yml +1 -0
- data/config/locales/models_en.yml +14 -3
- data/config/locales/models_sl.yml +13 -4
- data/drg_cms.gemspec +4 -4
- data/lib/drg_cms.rb +37 -8
- data/lib/drg_cms/engine.rb +2 -2
- data/lib/drg_cms/version.rb +3 -2
- data/lib/tasks/at_the_beginning.yml +0 -0
- data/lib/tasks/dc_at_the_beginning.rake +118 -0
- data/lib/tasks/dc_cleanup.rake +19 -7
- data/lib/tasks/log_statistics.rb +66 -0
- data/lib/tasks/site_statistics.rake +29 -12
- data/test/dummy/app/controllers/application_controller.rb +1 -1
- data/test/dummy/app/helpers/application_helper.rb +1 -1
- metadata +15 -26
- data/README.rdoc +0 -3
- data/app/controllers/dc_at_the_beginning_controller.rb +0 -120
- data/app/controllers/dc_mail_controller.rb +0 -89
- data/app/forms/dc_forum_cat.yml +0 -54
- data/app/forms/dc_forum_forum.yml +0 -53
- data/app/forms/dc_forum_msg.yml +0 -124
- data/app/forms/dc_forum_privmsg.yml +0 -125
- data/app/forms/dc_forum_topic.yml +0 -131
- data/app/forms/dc_mail.yml +0 -88
- data/app/forms/dc_mail_address.yml +0 -56
- data/app/forms/dc_mail_list.yml +0 -44
- data/app/forms/dc_mail_list_member.yml +0 -42
- data/app/helpers/dc_mail_renderer.rb +0 -76
- data/app/models/dc_mail.rb +0 -64
- data/app/models/dc_mail_address.rb +0 -69
- data/app/models/dc_mail_list.rb +0 -48
- data/app/models/dc_mail_list_member.rb +0 -34
- data/app/models/dc_sendmail.rb +0 -48
|
@@ -23,55 +23,57 @@
|
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
25
|
########################################################################
|
|
26
|
-
#
|
|
26
|
+
# dc_big_menu is experimental menu system which can be used as alternative
|
|
27
|
+
# to dc_menu when sub menu menu level is larger than two levels. Idea is to have top two levels
|
|
28
|
+
# of menu displayed on standard top of page position with other sub levels displayed vertically
|
|
29
|
+
# on left or right part of page. Renderer also provides path method, which can be used to show
|
|
30
|
+
# menu path of currently displayed page.
|
|
27
31
|
########################################################################
|
|
28
32
|
class DcBigMenuRenderer
|
|
29
33
|
|
|
30
34
|
include DcApplicationHelper
|
|
31
35
|
########################################################################
|
|
32
|
-
#
|
|
36
|
+
# Object initialization.
|
|
33
37
|
########################################################################
|
|
34
|
-
def initialize( parent, opts )
|
|
38
|
+
def initialize( parent, opts ) #:nodoc:
|
|
35
39
|
@parent = parent
|
|
36
|
-
# @menu = DcSimpleMenu.find_by(site_id: dc_get_site._id)
|
|
37
40
|
@site = parent.dc_get_site
|
|
38
41
|
@opts = opts
|
|
39
42
|
self
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
########################################################################
|
|
43
|
-
#
|
|
46
|
+
# Find out which top level menu currently displayed page belongs to. Subroutine of default method.
|
|
44
47
|
########################################################################
|
|
45
|
-
def find_selected
|
|
46
|
-
ret =
|
|
48
|
+
def find_selected #:nodoc:
|
|
49
|
+
ret = DcBigMenu.find( @parent.page.menu_id ) if @parent.page.menu_id
|
|
47
50
|
while ret and ret.parent != nil
|
|
48
|
-
ret =
|
|
51
|
+
ret = DcBigMenu.find( ret.parent )
|
|
49
52
|
end
|
|
50
53
|
# return first if not found (something is wrong)
|
|
51
54
|
# p ret
|
|
52
|
-
ret ||=
|
|
55
|
+
ret ||= DcBigMenu.where(dc_site_id: @site._id, parent: nil, active: true).limit(1).first
|
|
53
56
|
end
|
|
54
57
|
|
|
55
58
|
########################################################################
|
|
56
59
|
# Creates edit link if in edit mode.
|
|
57
60
|
########################################################################
|
|
58
|
-
def link_4edit
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
c
|
|
61
|
+
def link_4edit #:nodoc:
|
|
62
|
+
html = ''
|
|
63
|
+
return html unless @opts[:edit_mode] > 1
|
|
64
|
+
|
|
65
|
+
@opts[:editparams].merge!( { table: 'dc_big_menu', controller: 'cmsedit', action: 'edit' } )
|
|
66
|
+
title = "#{t('drgcms.edit')}: "
|
|
67
|
+
@opts[:editparams].merge!( { id: @menu.id, title: "#{title}#{@menu.name}" } ) if @menu
|
|
68
|
+
title << t('helpers.label.dc_big_menu.tabletitle')
|
|
69
|
+
@opts[:editparams].merge!( { action: 'index', title: title }) if @menu.nil?
|
|
70
|
+
html << dc_link_for_edit( @opts[:editparams] )
|
|
69
71
|
end
|
|
70
72
|
|
|
71
73
|
########################################################################
|
|
72
|
-
#
|
|
74
|
+
# Returns html code for single link on a menu.
|
|
73
75
|
########################################################################
|
|
74
|
-
def link_4menu(item)
|
|
76
|
+
def link_4menu(item) #:nodoc:
|
|
75
77
|
html = ''
|
|
76
78
|
link = item.link
|
|
77
79
|
link = "/#{@site.route_name}/#{item.page_id}" #if link.blank?
|
|
@@ -84,19 +86,18 @@ def link_4menu(item)
|
|
|
84
86
|
end
|
|
85
87
|
|
|
86
88
|
########################################################################
|
|
87
|
-
#
|
|
89
|
+
# Renderer for menu part displayed on left position of page.
|
|
88
90
|
########################################################################
|
|
89
91
|
def left_menu
|
|
90
92
|
html = ''
|
|
91
|
-
m =
|
|
93
|
+
m = DcBigMenu.find( @parent.page.menu_id )
|
|
92
94
|
# Show menu on same level if selected has no children
|
|
93
|
-
if
|
|
94
|
-
m =
|
|
95
|
+
if DcBigMenu.where( parent: @parent.page.menu_id ).limit(1).to_a.size == 0
|
|
96
|
+
m = DcBigMenu.find( m.parent )
|
|
95
97
|
end
|
|
96
|
-
|
|
98
|
+
#
|
|
97
99
|
html << "<div class='menu-left-item-top'>#{m.caption}</div>"
|
|
98
|
-
|
|
99
|
-
DcMenu.where( parent: m._id ).sort(order: 1).each do |item|
|
|
100
|
+
DcBigMenu.where( parent: m._id ).sort(order: 1).each do |item|
|
|
100
101
|
html << (item._id == @parent.page.menu_id ? '<div class="menu-left-item-selected">' : '<div class="menu-left-item">')
|
|
101
102
|
html << link_4menu(item)
|
|
102
103
|
html << '</div>'
|
|
@@ -104,22 +105,22 @@ def left_menu
|
|
|
104
105
|
#
|
|
105
106
|
html << "<div class='menu-left-item-bottom'>"
|
|
106
107
|
if m.parent
|
|
107
|
-
p =
|
|
108
|
+
p = DcBigMenu.find( m.parent )
|
|
108
109
|
html << "▲ #{link_4menu(p)}"
|
|
109
110
|
end
|
|
110
111
|
html << ' </div>'
|
|
111
112
|
end
|
|
112
113
|
|
|
113
114
|
########################################################################
|
|
114
|
-
# Renders menu path for selected
|
|
115
|
+
# Renders menu path for currently selected page.
|
|
115
116
|
########################################################################
|
|
116
117
|
def path
|
|
117
118
|
html = ''
|
|
118
119
|
a = []
|
|
119
|
-
m =
|
|
120
|
+
m = DcBigMenu.find( @parent.page.menu_id )
|
|
120
121
|
a << m
|
|
121
122
|
while m.parent
|
|
122
|
-
m =
|
|
123
|
+
m = DcBigMenu.find( m.parent )
|
|
123
124
|
a << m
|
|
124
125
|
end
|
|
125
126
|
#
|
|
@@ -134,14 +135,13 @@ def path
|
|
|
134
135
|
html
|
|
135
136
|
end
|
|
136
137
|
|
|
137
|
-
|
|
138
138
|
########################################################################
|
|
139
|
-
#
|
|
139
|
+
# Default methods renders top two levels of menu on top of page.
|
|
140
140
|
########################################################################
|
|
141
141
|
def default
|
|
142
142
|
html = '<div class="menu0-div"><ul>'
|
|
143
143
|
@selected = find_selected
|
|
144
|
-
level_0 =
|
|
144
|
+
level_0 = DcBigMenu.where(dc_site_id: @site._id, parent: nil, active: true).sort(order: 1).to_a
|
|
145
145
|
level_0.each do |item|
|
|
146
146
|
# menu can be hidden from user
|
|
147
147
|
can_view, msg = dc_user_can_view(@parent, item)
|
|
@@ -151,7 +151,7 @@ def default
|
|
|
151
151
|
end
|
|
152
152
|
html << "</ul></div>"
|
|
153
153
|
# submenu
|
|
154
|
-
level_1 =
|
|
154
|
+
level_1 = DcBigMenu.where(dc_site_id: @site._id, parent: @selected.id, active: true).sort(order: 1).to_a
|
|
155
155
|
html << "<div class='menu1-div'><ul>\n"
|
|
156
156
|
level_1.each do |item1|
|
|
157
157
|
# menu can be hidden from user
|
|
@@ -163,15 +163,15 @@ def default
|
|
|
163
163
|
end
|
|
164
164
|
|
|
165
165
|
########################################################################
|
|
166
|
-
#
|
|
166
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
167
167
|
########################################################################
|
|
168
168
|
def render_html
|
|
169
169
|
method = @opts[:method] || 'default'
|
|
170
|
-
respond_to?(method) ? send(method) : "Error
|
|
170
|
+
respond_to?(method) ? send(method) : "Error DcBigMenu: Method #{method} doesn't exist!"
|
|
171
171
|
end
|
|
172
172
|
|
|
173
173
|
########################################################################
|
|
174
|
-
#
|
|
174
|
+
# Return CSS part of code.
|
|
175
175
|
########################################################################
|
|
176
176
|
def render_css
|
|
177
177
|
@menu ? "#{@menu.css}\n #{@selected ? @selected.css : ''}\n" : ''
|
|
@@ -23,12 +23,13 @@
|
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
25
|
########################################################################
|
|
26
|
-
#
|
|
26
|
+
# This is renderer to return captcha code field when required on data entry. It currently
|
|
27
|
+
# implements only very basic captcha logic and only in Slovenian language.
|
|
27
28
|
########################################################################
|
|
28
|
-
class DcCaptchaRenderer
|
|
29
|
+
class DcCaptchaRenderer < DcRenderer
|
|
29
30
|
|
|
30
31
|
########################################################################
|
|
31
|
-
#
|
|
32
|
+
# Check if result of captcha is OK.
|
|
32
33
|
########################################################################
|
|
33
34
|
def is_ok?()
|
|
34
35
|
return false unless self.respond_to?(@opts[:type])
|
|
@@ -36,19 +37,9 @@ def is_ok?()
|
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
########################################################################
|
|
39
|
-
#
|
|
40
|
-
########################################################################
|
|
41
|
-
def initialize( parent, opts={} )
|
|
42
|
-
@parent = parent
|
|
43
|
-
@opts = opts
|
|
44
|
-
@part_css = ''
|
|
45
|
-
self
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
########################################################################
|
|
49
|
-
#
|
|
40
|
+
# Very simple captcha type. This is Slovenian only version.
|
|
50
41
|
########################################################################
|
|
51
|
-
def simpl(check=false)
|
|
42
|
+
def simpl(check=false) #:nodoc:
|
|
52
43
|
a1 = [['enajst', 11], ['dvanajst',12],['petindvajset',25],['triintridest',33],['devetnajst',19]]
|
|
53
44
|
a2 = [['šest', 6], ['sedem',7],['osem',8],['devet',9],['deset',10]]
|
|
54
45
|
op = [['seštejte','+'],['odštejte','-']]
|
|
@@ -75,26 +66,48 @@ eot
|
|
|
75
66
|
end
|
|
76
67
|
|
|
77
68
|
########################################################################
|
|
78
|
-
#
|
|
69
|
+
# Very simple captcha. Will ask for name of month in a year and check if entered value is valid when
|
|
70
|
+
# asked to check.
|
|
71
|
+
#
|
|
72
|
+
# Parameters:
|
|
73
|
+
# [check] Boolean. Send true if you are checking if entered value is OK. Default is false.
|
|
74
|
+
# Method will return HTML code required to render capcha field on form.
|
|
75
|
+
#
|
|
76
|
+
# Returns:
|
|
77
|
+
# HTML code for displaying captcha field on page.
|
|
78
|
+
# If parameters check is true then method checks if written data is correct and returns true/false.
|
|
79
|
+
########################################################################
|
|
80
|
+
def simple(check=false)
|
|
81
|
+
if check
|
|
82
|
+
number = @opts['question'].split(' ').last.chomp('?').to_i
|
|
83
|
+
month = I18n.t('date.month_names')[number].downcase
|
|
84
|
+
return month == @opts['record']['captcha_result'].to_i
|
|
85
|
+
else
|
|
86
|
+
number = Random.rand(11) + 1
|
|
87
|
+
txt = I18n.t('drgcms.dc_captcha.simple_message', number)
|
|
88
|
+
|
|
89
|
+
<<eot
|
|
90
|
+
<div style="background-color: #fafafa; border: 1px solid #eee; padding: 6px; margin: 5px 5px 25px 5px; font-size: 1.2em; border-radius: 2px;">
|
|
91
|
+
#{txt} <span style="color: red;">*</span> #{@parent.text_field('record','captcha_result', size: 5)} #{@parent.hidden_field_tag('question', txt )}
|
|
92
|
+
</div>
|
|
93
|
+
eot
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
########################################################################
|
|
98
|
+
# Return HTML part of code.
|
|
79
99
|
########################################################################
|
|
80
100
|
def render_html
|
|
81
101
|
captcha_type = @opts[:captcha_type] || @parent.params[:captcha_type]
|
|
82
|
-
return '
|
|
102
|
+
return 'DcCaptchaRenderer: Error captcha_type parameter not set!' unless captcha_type
|
|
83
103
|
|
|
84
104
|
html = if self.respond_to?(captcha_type)
|
|
85
105
|
send(captcha_type)
|
|
86
106
|
else
|
|
87
|
-
|
|
107
|
+
"DcCaptchaRenderer: Error method #{captcha_type} not defined!"
|
|
88
108
|
end
|
|
89
109
|
|
|
90
110
|
html
|
|
91
111
|
end
|
|
92
112
|
|
|
93
|
-
########################################################################
|
|
94
|
-
#
|
|
95
|
-
########################################################################
|
|
96
|
-
def render_css
|
|
97
|
-
@part_css
|
|
98
|
-
end
|
|
99
|
-
|
|
100
113
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2012
|
|
2
|
+
# Copyright (c) 2012+ Damjan Rems
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
5
|
# a copy of this software and associated documentation files (the
|
|
@@ -22,30 +22,23 @@
|
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
24
|
########################################################################
|
|
25
|
-
#
|
|
25
|
+
# Renderer methods which may be useful on any site.
|
|
26
26
|
########################################################################
|
|
27
|
-
class DcCommonRenderer
|
|
27
|
+
class DcCommonRenderer < DcRenderer
|
|
28
28
|
|
|
29
29
|
include DcApplicationHelper
|
|
30
30
|
|
|
31
31
|
########################################################################
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
def initialize( parent, opts={} )
|
|
35
|
-
@parent = parent
|
|
36
|
-
@opts = opts
|
|
37
|
-
@css = ''
|
|
38
|
-
self
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
########################################################################
|
|
42
|
-
# Renderer for printer friendly layout.
|
|
32
|
+
# Renderer for printer friendly layout. Will call another renderer which
|
|
33
|
+
# should provide html code for printer friendly output.
|
|
43
34
|
#
|
|
44
35
|
# Parameters are passed through link. There are currently two parameters,
|
|
45
36
|
# which define renderer and method to be used for creating output.
|
|
46
37
|
#
|
|
47
|
-
# renderer
|
|
48
|
-
#
|
|
38
|
+
# renderer::
|
|
39
|
+
# Defines renderer's class
|
|
40
|
+
# method::
|
|
41
|
+
# Defines renderer's class method
|
|
49
42
|
########################################################################
|
|
50
43
|
def layout_4print
|
|
51
44
|
opts = @opts.dup
|
|
@@ -57,39 +50,20 @@ def layout_4print
|
|
|
57
50
|
@css << obj.render_css.to_s
|
|
58
51
|
html
|
|
59
52
|
end
|
|
60
|
-
=begin
|
|
61
|
-
# OLD code
|
|
62
|
-
html =<<EOT
|
|
63
|
-
<!-- Google analytics. -->
|
|
64
|
-
<script type="text/javascript">
|
|
65
|
-
var _gaq = _gaq || [];
|
|
66
|
-
_gaq.push(['_setAccount', '#{ga_acc}']);
|
|
67
|
-
_gaq.push(['_trackPageview']);
|
|
68
|
-
|
|
69
|
-
(function() {
|
|
70
|
-
if (typeof(eu_cookies_allowed) === "function" && !eu_cookies_allowed() ) return;
|
|
71
|
-
var ga = document.createElement('script');
|
|
72
|
-
ga.type = 'text/javascript';
|
|
73
|
-
ga.async = true;
|
|
74
|
-
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
|
75
|
-
var s = document.getElementsByTagName('script')[0];
|
|
76
|
-
s.parentNode.insertBefore(ga, s);
|
|
77
|
-
})();
|
|
78
|
-
</script>
|
|
79
|
-
EOT
|
|
80
|
-
=end
|
|
81
53
|
|
|
82
54
|
########################################################################
|
|
83
55
|
# Renderer for Google analytics code.
|
|
84
56
|
#
|
|
85
|
-
# Parameters
|
|
57
|
+
# Parameters:
|
|
58
|
+
# Are passed through @opts hash and can therefore be set on site or design
|
|
59
|
+
# or page document parameters field as ga_acc key.
|
|
86
60
|
#
|
|
87
61
|
# If eu_cookies_allowed function is defined in javascript libraries it will be
|
|
88
|
-
# called and if false is
|
|
62
|
+
# called and if false is returned GA code will not be executed. This is in
|
|
89
63
|
# order with European cookie law.
|
|
90
64
|
#
|
|
91
65
|
# Example:
|
|
92
|
-
#
|
|
66
|
+
# dc_render(:dc_common_renderer, method: 'google_analytics', code: 'UA-12345678-9')
|
|
93
67
|
########################################################################
|
|
94
68
|
def google_analytics
|
|
95
69
|
ga_acc = @opts[:code] || @opts[:ga_acc]
|
|
@@ -115,18 +89,11 @@ EOT
|
|
|
115
89
|
end
|
|
116
90
|
|
|
117
91
|
########################################################################
|
|
118
|
-
#
|
|
92
|
+
# Return HTML part of code.
|
|
119
93
|
########################################################################
|
|
120
94
|
def render_html
|
|
121
95
|
method = @opts[:method] || 'default'
|
|
122
96
|
respond_to?(method) ? send(method) : "Error DcCommonRenderer: Method #{method} doesn't exist!"
|
|
123
97
|
end
|
|
124
98
|
|
|
125
|
-
########################################################################
|
|
126
|
-
#
|
|
127
|
-
########################################################################
|
|
128
|
-
def render_css
|
|
129
|
-
@css
|
|
130
|
-
end
|
|
131
|
-
|
|
132
99
|
end
|
|
@@ -23,15 +23,22 @@
|
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
25
|
########################################################################
|
|
26
|
-
#
|
|
26
|
+
# Default menu renderer for dc_menus collection. Renderer produces output for
|
|
27
|
+
# rendering menu with (theoretically) infinite level of sub menus. In practice
|
|
28
|
+
# reasonable maximum level of 4 is advised.
|
|
29
|
+
#
|
|
30
|
+
# Example (as used in design):
|
|
31
|
+
# dc_render(:dc_menu, name: 'my_menu')
|
|
32
|
+
# # when :name option is ommited it will use site document's menu_name field
|
|
33
|
+
# dc_render(:dc_menu)
|
|
27
34
|
########################################################################
|
|
28
35
|
class DcMenuRenderer
|
|
29
36
|
|
|
30
37
|
include DcApplicationHelper
|
|
31
38
|
########################################################################
|
|
32
|
-
#
|
|
39
|
+
# Object initialization. Will also prepare DcMenu document.
|
|
33
40
|
########################################################################
|
|
34
|
-
def initialize( parent, opts )
|
|
41
|
+
def initialize( parent, opts ) #:nodoc:
|
|
35
42
|
@parent = parent
|
|
36
43
|
opts[:name] ||= parent.site.menu_name # default in site
|
|
37
44
|
@menu = DcMenu.find_by(name: opts[:name].to_s)
|
|
@@ -40,7 +47,7 @@ def initialize( parent, opts )
|
|
|
40
47
|
end
|
|
41
48
|
|
|
42
49
|
########################################################################
|
|
43
|
-
# Return selected topmenu level
|
|
50
|
+
# Return selected topmenu level.
|
|
44
51
|
########################################################################
|
|
45
52
|
def find_selected
|
|
46
53
|
ret = @menu.dc_menu_items.find( @parent.page.menu_id ) if @parent.page.menu_id
|
|
@@ -51,33 +58,36 @@ end
|
|
|
51
58
|
########################################################################
|
|
52
59
|
# Creates edit link if in edit mode.
|
|
53
60
|
########################################################################
|
|
54
|
-
def link_4edit(opts)
|
|
61
|
+
def link_4edit(opts) #:nodoc:
|
|
55
62
|
html = ''
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
html
|
|
63
|
+
# return html unless @opts[:edit_mode] > 1
|
|
64
|
+
|
|
65
|
+
opts.merge!( { controller: 'cmsedit', action: 'edit' } )
|
|
66
|
+
title = "#{t('drgcms.edit')}: "
|
|
67
|
+
opts[:title] = "#{title} #{opts[:title]}"
|
|
68
|
+
|
|
69
|
+
html << '<li>'+dc_link_for_edit(opts)+'</li>'
|
|
63
70
|
end
|
|
64
71
|
|
|
65
72
|
########################################################################
|
|
66
|
-
# Returns html code required
|
|
73
|
+
# Returns html code required to create single link in a menu. Subroutine of do_menu_level.
|
|
67
74
|
########################################################################
|
|
68
75
|
def link_4menu(item)
|
|
69
|
-
#
|
|
76
|
+
# link should start with '/'
|
|
70
77
|
item.link = ((item.link[0] == '/' ? '' : '/') + item.link) unless item.link.match('http')
|
|
71
78
|
target = item.target.blank? ? nil : item.target
|
|
72
|
-
|
|
79
|
+
# - in first place won't write caption text
|
|
73
80
|
caption = item.caption[0] == '-' ? '' : item.caption.to_s
|
|
74
81
|
img_title = item.caption.to_s.sub('-','')
|
|
75
|
-
|
|
76
|
-
(
|
|
82
|
+
# add picture if picture is not blank
|
|
83
|
+
(item.picture.blank? ? '' :
|
|
84
|
+
@parent.link_to( @parent.image_tag(item.picture), item.link, {title: img_title, target: target} )) +
|
|
85
|
+
(caption.blank? ? '' :
|
|
86
|
+
@parent.link_to(caption, item.link, {target: target}) )
|
|
77
87
|
end
|
|
78
88
|
|
|
79
89
|
########################################################################
|
|
80
|
-
# Creates
|
|
90
|
+
# Creates HTML code required for submenu on single level. Subroutine of default.
|
|
81
91
|
########################################################################
|
|
82
92
|
def do_menu_level(menu, options={})
|
|
83
93
|
html = '<ul>'
|
|
@@ -126,7 +136,7 @@ def default
|
|
|
126
136
|
end
|
|
127
137
|
|
|
128
138
|
########################################################################
|
|
129
|
-
#
|
|
139
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
130
140
|
########################################################################
|
|
131
141
|
def render_html
|
|
132
142
|
method = @opts[:method] || 'default'
|
|
@@ -134,7 +144,7 @@ def render_html
|
|
|
134
144
|
end
|
|
135
145
|
|
|
136
146
|
########################################################################
|
|
137
|
-
#
|
|
147
|
+
# Return CSS part of code.
|
|
138
148
|
########################################################################
|
|
139
149
|
def render_css
|
|
140
150
|
@menu.css if @menu
|