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
|
@@ -22,6 +22,15 @@
|
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
24
|
########################################################################
|
|
25
|
+
# Page renderer renders data from dc_page collection documents. This renderer will
|
|
26
|
+
# almost certainly be replaced by your own renderer so example here shows just basic code
|
|
27
|
+
# which just checks if user is allowed to view data and if so returns document body content
|
|
28
|
+
# otherwise returns error message defined in site policy.
|
|
29
|
+
#
|
|
30
|
+
# Example:
|
|
31
|
+
# <div id="page">
|
|
32
|
+
# <%= dc_render(:dc_page) %>
|
|
33
|
+
# </div>
|
|
25
34
|
#
|
|
26
35
|
########################################################################
|
|
27
36
|
class DcPageRenderer
|
|
@@ -29,29 +38,16 @@ class DcPageRenderer
|
|
|
29
38
|
include DcApplicationHelper
|
|
30
39
|
|
|
31
40
|
########################################################################
|
|
32
|
-
#
|
|
41
|
+
# Object initialization.
|
|
33
42
|
########################################################################
|
|
34
|
-
def initialize( parent, opts={} )
|
|
43
|
+
def initialize( parent, opts={} ) #:nodoc:
|
|
35
44
|
@parent = parent
|
|
36
45
|
@opts = opts
|
|
37
46
|
@page = @parent.page
|
|
38
47
|
end
|
|
39
48
|
|
|
40
|
-
=begin
|
|
41
|
-
#########################################################################
|
|
42
|
-
# Return code for editing this piece.
|
|
43
|
-
########################################################################
|
|
44
|
-
def link_4edit()
|
|
45
|
-
html = ''
|
|
46
|
-
if @opts[:edit_mode] > 1
|
|
47
|
-
html << dc_page_edit_menu() # @opts[:editparams] )
|
|
48
|
-
end
|
|
49
|
-
html
|
|
50
|
-
end
|
|
51
|
-
=end
|
|
52
|
-
|
|
53
49
|
#########################################################################
|
|
54
|
-
#
|
|
50
|
+
# Default DcPage render method
|
|
55
51
|
#########################################################################
|
|
56
52
|
def default
|
|
57
53
|
can_view, msg = dc_user_can_view(@parent, @page)
|
|
@@ -63,7 +59,7 @@ def default
|
|
|
63
59
|
end
|
|
64
60
|
|
|
65
61
|
#########################################################################
|
|
66
|
-
#
|
|
62
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
67
63
|
########################################################################
|
|
68
64
|
def render_html
|
|
69
65
|
method = @opts[:method] || 'default'
|
|
@@ -71,7 +67,7 @@ def render_html
|
|
|
71
67
|
end
|
|
72
68
|
|
|
73
69
|
########################################################################
|
|
74
|
-
#
|
|
70
|
+
# Return CSS part of code.
|
|
75
71
|
########################################################################
|
|
76
72
|
def render_css
|
|
77
73
|
@page.css
|
|
@@ -22,16 +22,31 @@
|
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
24
|
########################################################################
|
|
25
|
-
#
|
|
25
|
+
# Renders one or multiple parts grouped by div_id field.
|
|
26
|
+
# Parts are scoped from design, page and dc_pieces documents.
|
|
27
|
+
#
|
|
28
|
+
# Example (as used in design):
|
|
29
|
+
# <div id='div-main'>
|
|
30
|
+
# <div id='div-left'> <%= dc_render(:dc_part, position: 'left') %></div>
|
|
31
|
+
# <div id='page'> <%= dc_render(:dc_page) %></div>
|
|
32
|
+
# <div id='div-right'>
|
|
33
|
+
# <%= dc_render(:dc_part, method: 'in_page', name: 'welcome')
|
|
34
|
+
# <%= dc_render(:dc_part, position: 'right')</div>
|
|
35
|
+
# </div>
|
|
36
|
+
# </div>
|
|
37
|
+
#
|
|
38
|
+
# Main page division in example is divided into 3 divisions. div-left, page and div-right.
|
|
39
|
+
# div-left and div-right are populated with parts containing 'left' and 'right' div_id value.
|
|
40
|
+
# In addition part with name 'welcome' is located above 'right' parts.
|
|
26
41
|
########################################################################
|
|
27
42
|
class DcPartRenderer
|
|
28
43
|
|
|
29
44
|
include DcApplicationHelper
|
|
30
45
|
|
|
31
46
|
########################################################################
|
|
32
|
-
#
|
|
47
|
+
# Object initialization.
|
|
33
48
|
########################################################################
|
|
34
|
-
def initialize( parent, opts={} )
|
|
49
|
+
def initialize( parent, opts={} ) #:nodoc:
|
|
35
50
|
@parent = parent
|
|
36
51
|
@opts = opts
|
|
37
52
|
@part_css = ''
|
|
@@ -39,7 +54,8 @@ def initialize( parent, opts={} )
|
|
|
39
54
|
end
|
|
40
55
|
|
|
41
56
|
########################################################################
|
|
42
|
-
#
|
|
57
|
+
# Method returns output from single part(icle). It checks if policy allows part to
|
|
58
|
+
# be viewed on page and ads links for editing when in edit mode.
|
|
43
59
|
########################################################################
|
|
44
60
|
def render_particle(particle, opts)
|
|
45
61
|
# Check if policy allows to view page
|
|
@@ -64,9 +80,10 @@ def render_particle(particle, opts)
|
|
|
64
80
|
end
|
|
65
81
|
|
|
66
82
|
########################################################################
|
|
67
|
-
# Load parts defined in design, page or
|
|
83
|
+
# Load all parts defined in design, page or piece collection into memory.
|
|
84
|
+
# Subroutine of default method.
|
|
68
85
|
########################################################################
|
|
69
|
-
def load_parts
|
|
86
|
+
def load_parts #:nodoc:
|
|
70
87
|
@parent.parts = []
|
|
71
88
|
# Start with parts in design. Collect to array and add values needed for editing
|
|
72
89
|
if @parent.design
|
|
@@ -87,15 +104,26 @@ def load_parts
|
|
|
87
104
|
end
|
|
88
105
|
|
|
89
106
|
########################################################################
|
|
90
|
-
# Default
|
|
91
|
-
#
|
|
107
|
+
# Default method collects all parts with the div_id field value defined by position option.
|
|
108
|
+
# If more then one parts have same div_id they will be sorted by order field. Method
|
|
109
|
+
# also loads all parts from design, page and pieces collections and cache them for
|
|
110
|
+
# consecutive calls.
|
|
111
|
+
#
|
|
112
|
+
# Options:
|
|
113
|
+
# [position] String. Position (value of div_id) where parts will be rendered.
|
|
114
|
+
#
|
|
115
|
+
# Example (as used in design):
|
|
116
|
+
# <div id='div-right'>
|
|
117
|
+
# <%= dc_render(:dc_part, position: 'right')
|
|
118
|
+
# </div>
|
|
92
119
|
########################################################################
|
|
93
120
|
def default
|
|
94
121
|
html = ''
|
|
95
122
|
# Load all parts only once per call
|
|
96
123
|
load_parts if @parent.parts.nil?
|
|
97
124
|
p 'DcPart: Parameter location will be deprecated! Please use position keyword.' if @opts['location']
|
|
98
|
-
|
|
125
|
+
|
|
126
|
+
@opts[:position] ||= @opts['position'] # symbols are not strings. Ensure that it works.
|
|
99
127
|
# Select parts
|
|
100
128
|
parts = []
|
|
101
129
|
@parent.parts.each { |v| parts << v if v[0].div_id == @opts[:position] }
|
|
@@ -113,13 +141,14 @@ def default
|
|
|
113
141
|
end
|
|
114
142
|
|
|
115
143
|
########################################################################
|
|
116
|
-
# This method will search and render single part defined in
|
|
117
|
-
# be defined in current page or in any page in
|
|
144
|
+
# This method will search and render single part defined in pages file. Part may
|
|
145
|
+
# be defined in current page document or in any page document in found in pages file. Parameters
|
|
146
|
+
# are send through options hash.
|
|
118
147
|
#
|
|
119
148
|
# Options:
|
|
120
|
-
#
|
|
121
|
-
#
|
|
122
|
-
#
|
|
149
|
+
# [name] String. dc_parts name.
|
|
150
|
+
# [page_id] String. Page document _id where part document is saved. Defaults to current page.
|
|
151
|
+
# [page_link] String. Page may alternatively be found by subject_link field.
|
|
123
152
|
########################################################################
|
|
124
153
|
def in_page
|
|
125
154
|
# Part is in page with id
|
|
@@ -145,7 +174,7 @@ def in_page
|
|
|
145
174
|
end
|
|
146
175
|
|
|
147
176
|
########################################################################
|
|
148
|
-
#
|
|
177
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
149
178
|
########################################################################
|
|
150
179
|
def render_html
|
|
151
180
|
method = @opts[:method] || 'default'
|
|
@@ -153,7 +182,7 @@ def render_html
|
|
|
153
182
|
end
|
|
154
183
|
|
|
155
184
|
########################################################################
|
|
156
|
-
#
|
|
185
|
+
# Return CSS part of code.
|
|
157
186
|
########################################################################
|
|
158
187
|
def render_css
|
|
159
188
|
@part_css
|
|
@@ -22,6 +22,12 @@
|
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
24
|
########################################################################
|
|
25
|
+
# Piece renderer renders data from dc_piece collection documents.
|
|
26
|
+
#
|
|
27
|
+
# Example:
|
|
28
|
+
# <div id="page">
|
|
29
|
+
# <%= dc_render(:dc_piece, :name => 'some_piece') %>
|
|
30
|
+
# </div>
|
|
25
31
|
#
|
|
26
32
|
########################################################################
|
|
27
33
|
class DcPieceRenderer
|
|
@@ -29,9 +35,9 @@ class DcPieceRenderer
|
|
|
29
35
|
include DcApplicationHelper
|
|
30
36
|
|
|
31
37
|
########################################################################
|
|
32
|
-
#
|
|
38
|
+
# Object initialization. It also loads requested dc_piece document.
|
|
33
39
|
########################################################################
|
|
34
|
-
def initialize( parent, opts={} )
|
|
40
|
+
def initialize( parent, opts={} ) #:nodoc:
|
|
35
41
|
@parent = parent
|
|
36
42
|
@opts = opts
|
|
37
43
|
@piece = DcPiece.find(opts[:id]) if opts[:id]
|
|
@@ -46,36 +52,24 @@ def initialize( parent, opts={} )
|
|
|
46
52
|
end
|
|
47
53
|
|
|
48
54
|
#########################################################################
|
|
49
|
-
# Return code for editing this piece.
|
|
55
|
+
# Return link code for editing this piece.
|
|
50
56
|
########################################################################
|
|
51
57
|
def link_4edit()
|
|
52
58
|
html = ''
|
|
53
|
-
if @opts[:edit_mode]
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
end
|
|
61
|
-
html
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
########################################################################
|
|
65
|
-
# script renderer expects rails erb code (view) in the script field.
|
|
66
|
-
#
|
|
67
|
-
# Usefull when you have many designs which have lots pieces of code in common.
|
|
68
|
-
########################################################################
|
|
69
|
-
def script
|
|
70
|
-
html = link_4edit()
|
|
71
|
-
html << @parent.render(inline: @piece.script, layout: @opts[:layout])
|
|
59
|
+
return html if @opts[:edit_mode] < 2
|
|
60
|
+
@opts[:editparams].merge!( { table: 'dc_piece',
|
|
61
|
+
controller: 'cmsedit',
|
|
62
|
+
action: 'edit',
|
|
63
|
+
id: @piece.id,
|
|
64
|
+
title: "#{t('drgcms.edit')}: #{@piece.name}" } )
|
|
65
|
+
html << dc_link_for_edit( @opts[:editparams] )
|
|
72
66
|
end
|
|
73
67
|
|
|
74
68
|
########################################################################
|
|
75
|
-
#
|
|
76
|
-
# Used for designs with common code and one part which is different.
|
|
77
|
-
# It
|
|
78
|
-
#
|
|
69
|
+
# Script renderer method expects rails erb code (view) in the script field.
|
|
70
|
+
# Used for designs with common code which can be shared and one part which is different.
|
|
71
|
+
# It's functionality can be replaced with dc_replace_in_design method with 'piece' option
|
|
72
|
+
# specified.
|
|
79
73
|
#
|
|
80
74
|
# Example: As used in design. Backslashing < and % is important \<\%
|
|
81
75
|
# <% part = "<div class='some-class'>\<\%= dc_render(:my_renderer, method: 'render_method') \%\></div>" %>
|
|
@@ -98,7 +92,7 @@ def script
|
|
|
98
92
|
end
|
|
99
93
|
|
|
100
94
|
#########################################################################
|
|
101
|
-
#
|
|
95
|
+
# Default DcPiece render method.
|
|
102
96
|
########################################################################
|
|
103
97
|
def default
|
|
104
98
|
html = link_4edit()
|
|
@@ -106,7 +100,7 @@ def default
|
|
|
106
100
|
end
|
|
107
101
|
|
|
108
102
|
#########################################################################
|
|
109
|
-
#
|
|
103
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
110
104
|
########################################################################
|
|
111
105
|
def render_html
|
|
112
106
|
return "DcPiece #{@opts[:id]} #{@opts[:name]} not found!" unless @piece
|
|
@@ -115,7 +109,7 @@ def render_html
|
|
|
115
109
|
end
|
|
116
110
|
|
|
117
111
|
########################################################################
|
|
118
|
-
#
|
|
112
|
+
# Return CSS part of code.
|
|
119
113
|
########################################################################
|
|
120
114
|
def render_css
|
|
121
115
|
@piece ? "#{@piece.css}" : ''
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
24
|
########################################################################
|
|
25
|
-
#
|
|
25
|
+
# Renders code for displaying a poll. Polls may replace forms when user interaction
|
|
26
|
+
# is required in browser.
|
|
26
27
|
########################################################################
|
|
27
28
|
class DcPollRenderer
|
|
28
29
|
|
|
@@ -32,9 +33,9 @@ include ActionView::Helpers::FormHelper # for form hepers
|
|
|
32
33
|
include ActionView::Helpers::FormOptionsHelper # for select helper
|
|
33
34
|
|
|
34
35
|
########################################################################
|
|
35
|
-
#
|
|
36
|
+
# Object initialization.
|
|
36
37
|
########################################################################
|
|
37
|
-
def initialize( parent, opts={} )
|
|
38
|
+
def initialize( parent, opts={} ) #:nodoc:
|
|
38
39
|
@parent = parent
|
|
39
40
|
@opts = opts
|
|
40
41
|
@part_css = ''
|
|
@@ -42,14 +43,14 @@ def initialize( parent, opts={} )
|
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
########################################################################
|
|
45
|
-
# Dummy params method
|
|
46
|
+
# Dummy params method for accesing session params object from form.
|
|
46
47
|
########################################################################
|
|
47
48
|
def params
|
|
48
49
|
@parent.params
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
########################################################################
|
|
52
|
-
#
|
|
53
|
+
# Outputs code required for poll item. Subroutine of default method.
|
|
53
54
|
########################################################################
|
|
54
55
|
def do_one_item(poll, yaml)
|
|
55
56
|
html = ''
|
|
@@ -118,9 +119,9 @@ def do_one_item(poll, yaml)
|
|
|
118
119
|
end
|
|
119
120
|
|
|
120
121
|
########################################################################
|
|
121
|
-
#
|
|
122
|
+
# Default poll renderer method. Renders data for specified pool.
|
|
122
123
|
########################################################################
|
|
123
|
-
def
|
|
124
|
+
def default
|
|
124
125
|
# poll_id may be defined in params or opts
|
|
125
126
|
poll_id = @parent.params[:poll_id] || @opts[:poll_id]
|
|
126
127
|
return '<br>Poll id is not defined?<br>' if poll_id.nil?
|
|
@@ -182,35 +183,45 @@ def render_html
|
|
|
182
183
|
items.each do |item|
|
|
183
184
|
next unless item.active # disabled items
|
|
184
185
|
# convert options to yaml
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
(
|
|
190
|
-
|
|
191
|
-
|
|
186
|
+
yaml = YAML.load(item.options) || {}
|
|
187
|
+
yaml['name'] = item.name
|
|
188
|
+
yaml['html'] ||= {}
|
|
189
|
+
yaml['html']['size'] = item.size
|
|
190
|
+
(yaml['html']['class'] ||= 'poll-submit') if item.type == 'submit_tag'
|
|
191
|
+
yaml['text'] = item.text
|
|
192
|
+
yaml['mandatory'] = item.mandatory
|
|
192
193
|
# y['options'] = item.options
|
|
193
|
-
|
|
194
|
-
html << do_one_item(poll,
|
|
194
|
+
yaml['type'] = item.type
|
|
195
|
+
html << do_one_item(poll, yaml)
|
|
195
196
|
end
|
|
196
197
|
# Form. Just call do_one_item for each form item
|
|
197
198
|
else
|
|
198
|
-
|
|
199
|
+
yaml = YAML.load(poll.form.gsub(' ',' ')) # very annoying. They come with copy&paste ;-)
|
|
199
200
|
# if entered without numbering yaml is returned as Hash otherwise as Array
|
|
200
|
-
|
|
201
|
+
yaml.each { |i| html << do_one_item(poll, (i.class == Hash ? i : i.last)) } #
|
|
201
202
|
end
|
|
202
203
|
# hide some fields usefull as parameters
|
|
203
|
-
|
|
204
|
+
# was html << @parent.hidden_field_tag('return_to', @opts[:return_to] || @parent.params[:return_to] || '/')
|
|
205
|
+
html << @parent.hidden_field_tag('return_to', @opts[:return_to] || @parent.params[:return_to] || @parent.request.url)
|
|
204
206
|
html << @parent.hidden_field_tag('return_to_error', @parent.request.url )
|
|
205
207
|
html << @parent.hidden_field_tag('poll_id', poll_id )
|
|
206
208
|
html << @parent.hidden_field_tag('page_id', @parent.page.id )
|
|
207
209
|
html << "</form><br /></div>"
|
|
210
|
+
|
|
208
211
|
@part_css = poll.css
|
|
209
212
|
html
|
|
210
213
|
end
|
|
211
214
|
|
|
212
215
|
########################################################################
|
|
213
|
-
#
|
|
216
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
217
|
+
########################################################################
|
|
218
|
+
def render_html
|
|
219
|
+
method = @opts[:method] || 'default'
|
|
220
|
+
respond_to?(method) ? send(method) : "Error DcPoll: Method #{method} doesn't exist!"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
########################################################################
|
|
224
|
+
# Return CSS part of code.
|
|
214
225
|
########################################################################
|
|
215
226
|
def render_css
|
|
216
227
|
@part_css
|
data/app/helpers/dc_renderer.rb
CHANGED
|
@@ -22,12 +22,13 @@
|
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
24
|
########################################################################
|
|
25
|
-
#
|
|
25
|
+
# This is abstract renderer class definition which can be reused by other
|
|
26
|
+
# renders.
|
|
26
27
|
########################################################################
|
|
27
28
|
class DcRenderer
|
|
28
29
|
|
|
29
30
|
########################################################################
|
|
30
|
-
#
|
|
31
|
+
# Object initialization.
|
|
31
32
|
########################################################################
|
|
32
33
|
def initialize( parent, opts={} )
|
|
33
34
|
@parent = parent
|
|
@@ -37,7 +38,7 @@ def initialize( parent, opts={} )
|
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
########################################################################
|
|
40
|
-
#
|
|
41
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
41
42
|
########################################################################
|
|
42
43
|
def render_html
|
|
43
44
|
can_view, msg = @parent.dc_user_can_view(@parent, @parent.page)
|
|
@@ -47,7 +48,7 @@ def render_html
|
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
########################################################################
|
|
50
|
-
#
|
|
51
|
+
# Return CSS part of code.
|
|
51
52
|
########################################################################
|
|
52
53
|
def render_css
|
|
53
54
|
@css
|
|
@@ -23,13 +23,19 @@
|
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
25
|
########################################################################
|
|
26
|
-
#
|
|
26
|
+
# Before dc_menu dc_simple_menu was the way to provide menu system. Renderer
|
|
27
|
+
# provides 3 different renderer methods: default, as_dropdown, as_table.
|
|
28
|
+
#
|
|
29
|
+
# Example (as used in design):
|
|
30
|
+
# dc_render(:dc_simple_menu, name: 'my_menu', method: 'as_table')
|
|
31
|
+
#
|
|
32
|
+
# If name parameter is omitted it must be provided in site document menu_name field.
|
|
27
33
|
########################################################################
|
|
28
34
|
class DcSimpleMenuRenderer
|
|
29
35
|
|
|
30
36
|
include DcApplicationHelper
|
|
31
37
|
########################################################################
|
|
32
|
-
#
|
|
38
|
+
# Object initialization.
|
|
33
39
|
########################################################################
|
|
34
40
|
def initialize( parent, opts )
|
|
35
41
|
@parent = parent
|
|
@@ -40,35 +46,40 @@ def initialize( parent, opts )
|
|
|
40
46
|
end
|
|
41
47
|
|
|
42
48
|
########################################################################
|
|
43
|
-
# Return selected
|
|
49
|
+
# Return selected top level menu document. Subroutine of menu renders.
|
|
44
50
|
########################################################################
|
|
45
|
-
def find_selected
|
|
51
|
+
def find_selected #:nodoc:
|
|
46
52
|
ret = @menu.dc_simple_menu_items.find( @parent.page.menu_id ) if @parent.page.menu_id
|
|
47
53
|
# return first if not found (something is wrong)
|
|
48
54
|
ret ||= @menu.dc_simple_menu_items[0]
|
|
49
55
|
end
|
|
50
56
|
|
|
51
57
|
########################################################################
|
|
52
|
-
# Creates edit
|
|
58
|
+
# Creates edit icon for menu if in edit mode.
|
|
53
59
|
########################################################################
|
|
54
|
-
def link_4edit
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
def link_4edit() #:nodoc:
|
|
61
|
+
html = ''
|
|
62
|
+
return html unless @opts[:edit_mode] > 1
|
|
63
|
+
#
|
|
64
|
+
@opts[:editparams].merge!( { table: 'dc_simple_menu', controller: 'cmsedit', action: 'edit' } )
|
|
65
|
+
title = "#{t('drgcms.edit')}: "
|
|
66
|
+
if @menu # edit, when menu exists
|
|
67
|
+
@opts[:editparams].merge!( { id: @menu.id, title: "#{title}#{@menu.name}" } )
|
|
68
|
+
else # list available menus when menu does not yet exist
|
|
60
69
|
title << t('helpers.label.dc_simple_menu.tabletitle')
|
|
61
|
-
@opts[:editparams].merge!( { action: 'index', title: title })
|
|
62
|
-
c << dc_link_for_edit( @opts[:editparams] )
|
|
70
|
+
@opts[:editparams].merge!( { action: 'index', title: title })
|
|
63
71
|
end
|
|
64
|
-
|
|
72
|
+
html << dc_link_for_edit( @opts[:editparams] )
|
|
65
73
|
end
|
|
66
74
|
|
|
67
75
|
########################################################################
|
|
68
|
-
# Returns html code required for link in a menu.
|
|
76
|
+
# Returns html code required for creating one link in a menu.
|
|
77
|
+
#
|
|
78
|
+
# Parameters:
|
|
79
|
+
# [item] SimpleMenuItem.
|
|
69
80
|
########################################################################
|
|
70
81
|
def link_4menu(item)
|
|
71
|
-
#
|
|
82
|
+
# Link should start with /
|
|
72
83
|
item.link = ((item.link[0,1] == '/' ? '' : '/') + item.link) unless item.link.match('http:')
|
|
73
84
|
target = item.target.blank? ? nil : item.target
|
|
74
85
|
if item.caption.match('pic:')
|
|
@@ -84,54 +95,59 @@ def link_4menu(item)
|
|
|
84
95
|
end
|
|
85
96
|
|
|
86
97
|
########################################################################
|
|
87
|
-
# Renders menu as table.
|
|
98
|
+
# Renders menu as table. This is single level menu only and uses table elements to
|
|
99
|
+
# display menu options evenly justified.
|
|
88
100
|
########################################################################
|
|
89
101
|
def as_table
|
|
90
|
-
|
|
91
|
-
return "#{
|
|
102
|
+
html = link_4edit
|
|
103
|
+
return "#{html}#{@opts[:name]}<br>Menu not found!" if @menu.nil?
|
|
92
104
|
#
|
|
93
105
|
@selected = find_selected
|
|
94
|
-
|
|
106
|
+
# use div_name if specified otherwise menu.name
|
|
107
|
+
div_name = (@menu.div_name.to_s.size > 2 ? @menu.div_name : @menu.name).downcase
|
|
108
|
+
html << "<table class=\"#{div_name}\"><tr>"
|
|
95
109
|
# sort items acording to :order
|
|
96
|
-
items = @menu.dc_simple_menu_items.sort {|a,b| a.order <=> b.order}
|
|
110
|
+
# items = @menu.dc_simple_menu_items.sort {|a,b| a.order <=> b.order}
|
|
111
|
+
items = @menu.dc_simple_menu_items.where(active: true).order(order: 1)
|
|
97
112
|
items.each do |item|
|
|
98
|
-
next unless item.active
|
|
99
113
|
# menu can be hidden from user
|
|
100
114
|
can_view, msg = dc_user_can_view(@parent, item)
|
|
101
115
|
next unless can_view
|
|
102
116
|
|
|
103
|
-
klas = item.id == @selected.id ? "#{
|
|
104
|
-
|
|
117
|
+
klas = item.id == @selected.id ? "#{div_name}-selected" : "#{div_name}-item"
|
|
118
|
+
html << "<td class=\"td-#{klas}\">#{ link_4menu(item) }</td>" #
|
|
105
119
|
end
|
|
106
|
-
|
|
120
|
+
html << "</table>"
|
|
107
121
|
end
|
|
108
122
|
|
|
109
123
|
########################################################################
|
|
110
|
-
# Creates menu with single level dropdown menu
|
|
124
|
+
# Creates menu with single level dropdown menu. This is older version of method which
|
|
125
|
+
# also provided select field for selecting menu if mobile device is beeing detected.
|
|
111
126
|
########################################################################
|
|
112
127
|
def as_dropdown_old
|
|
113
|
-
|
|
114
|
-
return "#{
|
|
128
|
+
html = link_4edit
|
|
129
|
+
return "#{html}#{@opts[:name]}<br>Menu not found!" if @menu.nil?
|
|
115
130
|
#
|
|
116
131
|
items = @menu.dc_simple_menu_items.sort {|a,b| a.order <=> b.order}
|
|
117
132
|
# CSS dropdown-s don't work very well on mobiles. Create simple select menu instead
|
|
118
133
|
if @parent.session[:is_mobile] == 1
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
134
|
+
html << "<div class=\"#{@menu.name.downcase}-mobile\">\n"
|
|
135
|
+
html << '<select onchange="window.location.href=this.options[this.selectedIndex].value">'
|
|
136
|
+
html << "<option value=\"\">#{t('drgcms.simple_menu_mobile_menu_text',' M E N U ')}</option>"
|
|
137
|
+
#
|
|
122
138
|
items.each do |item|
|
|
123
139
|
next unless item.active
|
|
124
140
|
# menu can be hidden from user
|
|
125
141
|
can_view, msg = dc_user_can_view(@parent, item)
|
|
126
142
|
next unless can_view
|
|
127
|
-
|
|
143
|
+
html << "<option value=\"#{item.link}\">#{item.caption}</option>"
|
|
128
144
|
y = YAML.load(item.submenu) || {}
|
|
129
|
-
y.each { |k,v|
|
|
145
|
+
y.each { |k,v| html << "<option value=\"#{v['link']}\">--#{v['title']}</option>" }
|
|
130
146
|
end
|
|
131
|
-
|
|
147
|
+
html << "</select>\n</div>\n"
|
|
132
148
|
else
|
|
133
149
|
@selected = find_selected
|
|
134
|
-
|
|
150
|
+
html << "<table class=\"#{@menu.name.downcase}\"><tr>"
|
|
135
151
|
# sort items acording to :order
|
|
136
152
|
items.each do |item|
|
|
137
153
|
next unless item.active
|
|
@@ -141,33 +157,33 @@ def as_dropdown_old
|
|
|
141
157
|
|
|
142
158
|
klas = item.id == @selected.id ? 'menu-selected' : 'menu-item'
|
|
143
159
|
# caption = item.caption.match('pic:') ? @parent.image_tag(item.caption.sub('pic:','')) : item.caption
|
|
144
|
-
|
|
160
|
+
html << "<td class=\"td-#{klas}\">#{ link_4menu(item) }"
|
|
145
161
|
y = YAML.load(item.submenu) || {}
|
|
146
162
|
if y.size > 0
|
|
147
|
-
|
|
163
|
+
html << '<ul>'
|
|
148
164
|
y.each do |k,v|
|
|
149
|
-
|
|
165
|
+
html << "<li>#{@parent.link_to(v['title'], v['link'], {target: v['target']})}</li>"
|
|
150
166
|
end
|
|
151
|
-
|
|
167
|
+
html << '</ul>'
|
|
152
168
|
end
|
|
153
|
-
|
|
169
|
+
html << '</td>'
|
|
154
170
|
end
|
|
155
|
-
|
|
171
|
+
html << '</tr></table>'
|
|
156
172
|
end
|
|
157
173
|
end
|
|
158
174
|
|
|
159
175
|
########################################################################
|
|
160
|
-
# Creates menu with single level dropdown menu
|
|
176
|
+
# Creates menu with single level dropdown menu.
|
|
161
177
|
########################################################################
|
|
162
178
|
def as_dropdown
|
|
163
|
-
|
|
164
|
-
return "#{
|
|
179
|
+
html = link_4edit
|
|
180
|
+
return "#{html}#{@opts[:name]}<br>Menu not found!" if @menu.nil?
|
|
165
181
|
#
|
|
166
182
|
items = @menu.dc_simple_menu_items.sort {|a,b| a.order <=> b.order}
|
|
167
183
|
@selected = find_selected
|
|
168
184
|
|
|
169
|
-
|
|
170
|
-
|
|
185
|
+
html << "<div id='#{@menu.div_name}'>" unless @menu.div_name.blank?
|
|
186
|
+
html << '<table><tr>'
|
|
171
187
|
# sort items acording to :order
|
|
172
188
|
items.each do |item|
|
|
173
189
|
next unless item.active
|
|
@@ -176,33 +192,39 @@ def as_dropdown
|
|
|
176
192
|
next unless can_view
|
|
177
193
|
#
|
|
178
194
|
selector = item.id == @selected.id ? 'th' : 'td'
|
|
179
|
-
|
|
195
|
+
html << "<#{selector}>#{ link_4menu(item) }"
|
|
180
196
|
y = YAML.load(item.submenu) || {}
|
|
181
197
|
if y.size > 0
|
|
182
|
-
|
|
198
|
+
html << '<ul>'
|
|
183
199
|
y.each do |k,v|
|
|
184
|
-
|
|
200
|
+
html << "<li>#{@parent.link_to(v['title'], v['link'], {target: v['target']})}</li>"
|
|
185
201
|
end
|
|
186
|
-
|
|
202
|
+
html << '</ul>'
|
|
187
203
|
end
|
|
188
|
-
|
|
204
|
+
html << "</#{selector}>"
|
|
189
205
|
|
|
190
206
|
end
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
207
|
+
html << '</tr></table>'
|
|
208
|
+
html << '</div>' unless @menu.div_name.blank?
|
|
209
|
+
html
|
|
194
210
|
end
|
|
195
211
|
|
|
196
212
|
########################################################################
|
|
197
|
-
#
|
|
213
|
+
# Default renderer provides top menu menu with submenu items displayed in a line (div) below.
|
|
214
|
+
#
|
|
215
|
+
# Top menu and submenu items are styled separately. If div_name is specified in
|
|
216
|
+
# menu document it will be used in div, ul and li CSS names of generated HTML code.
|
|
217
|
+
# If div_name is not defined then document name will be used.
|
|
198
218
|
########################################################################
|
|
199
219
|
def default
|
|
200
|
-
|
|
201
|
-
return "#{
|
|
220
|
+
html = link_4edit
|
|
221
|
+
return "#{html}#{@opts[:name]}<br>Menu not found!" if @menu.nil?
|
|
202
222
|
#
|
|
203
223
|
@selected = find_selected
|
|
204
|
-
|
|
205
|
-
|
|
224
|
+
# use div_name if specified otherwise menu.name
|
|
225
|
+
div_name = (@menu.div_name.to_s.size > 2 ? @menu.div_name : @menu.name).downcase
|
|
226
|
+
html << "<div class=\"#{div_name}\">"
|
|
227
|
+
html << "<ul class=\"ul-#{div_name}\">"
|
|
206
228
|
# sort items acording to :order
|
|
207
229
|
items = @menu.dc_simple_menu_items.sort {|a,b| a.order <=> b.order}
|
|
208
230
|
items.each do |item|
|
|
@@ -211,23 +233,23 @@ def default
|
|
|
211
233
|
can_view, msg = dc_user_can_view(@parent, item)
|
|
212
234
|
next unless can_view
|
|
213
235
|
|
|
214
|
-
klas = item.id == @selected.id ? "#{
|
|
215
|
-
|
|
236
|
+
klas = item.id == @selected.id ? "#{div_name}-selected" : "#{div_name}-item"
|
|
237
|
+
html << "<li class=\"li-#{klas}\">#{ link_4menu(item) }</li>"
|
|
216
238
|
end
|
|
217
|
-
|
|
239
|
+
html << "</ul></div>"
|
|
218
240
|
# submenu
|
|
219
|
-
|
|
220
|
-
<ul class=\"ul-sub-#{
|
|
241
|
+
html << "<div class=\"sub-#{div_name}\">
|
|
242
|
+
<ul class=\"ul-sub-#{div_name}\">"
|
|
221
243
|
y = YAML.load(@selected.submenu) || {}
|
|
222
244
|
y.each do |k,v|
|
|
223
|
-
|
|
245
|
+
html << "<li class=\"li-sub-#{div_name}\">#{@parent.link_to(v['title'], v['link'])}</li>"
|
|
224
246
|
end
|
|
225
|
-
|
|
247
|
+
html << '</ul></div>'
|
|
226
248
|
end
|
|
227
249
|
|
|
228
250
|
|
|
229
251
|
########################################################################
|
|
230
|
-
#
|
|
252
|
+
# Renderer dispatcher. Method returns HTML part of code.
|
|
231
253
|
########################################################################
|
|
232
254
|
def render_html
|
|
233
255
|
method = @opts[:method] || 'default'
|
|
@@ -235,7 +257,7 @@ def render_html
|
|
|
235
257
|
end
|
|
236
258
|
|
|
237
259
|
########################################################################
|
|
238
|
-
#
|
|
260
|
+
# Return CSS part of code.
|
|
239
261
|
########################################################################
|
|
240
262
|
def render_css
|
|
241
263
|
@menu ? "#{@menu.css}\n #{@selected ? @selected.css : ''}\n" : ''
|