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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +49 -0
  3. data/app/assets/images/drg_cms/file_manager.png +0 -0
  4. data/app/assets/javascripts/drg_cms/drg_cms.js +8 -8
  5. data/app/assets/stylesheets/drg_cms/drg_cms.css +22 -20
  6. data/app/controllers/cmsedit_controller.rb +170 -114
  7. data/app/controllers/dc_application_controller.rb +142 -56
  8. data/app/controllers/dc_common_controller.rb +56 -34
  9. data/app/controllers/dc_main_controller.rb +1 -4
  10. data/app/controllers/drgcms_controls/dc_page_controls.rb +3 -0
  11. data/app/forms/all_options.yml +3 -0
  12. data/app/forms/cms_menu.yml +100 -117
  13. data/app/forms/dc_design.yml +1 -1
  14. data/app/forms/dc_ident.yml +37 -0
  15. data/app/forms/dc_menu_item.yml +1 -1
  16. data/app/forms/dc_permission.yml +1 -1
  17. data/app/forms/dc_site.yml +4 -0
  18. data/app/helpers/cmsedit_helper.rb +44 -80
  19. data/app/helpers/dc_ad_renderer.rb +27 -15
  20. data/app/helpers/dc_application_helper.rb +433 -196
  21. data/app/helpers/dc_big_menu_renderer.rb +40 -40
  22. data/app/helpers/dc_captcha_renderer.rb +38 -25
  23. data/app/helpers/dc_common_renderer.rb +15 -48
  24. data/app/helpers/dc_menu_renderer.rb +30 -20
  25. data/app/helpers/dc_page_renderer.rb +14 -18
  26. data/app/helpers/dc_part_renderer.rb +45 -16
  27. data/app/helpers/dc_piece_renderer.rb +23 -29
  28. data/app/helpers/dc_poll_renderer.rb +31 -20
  29. data/app/helpers/dc_renderer.rb +5 -4
  30. data/app/helpers/dc_simple_menu_renderer.rb +90 -68
  31. data/app/models/{__dc_global_data.rb → __dc_stat.rb} +20 -21
  32. data/app/models/dc_ad.rb +13 -1
  33. data/app/models/dc_ad_stat.rb +6 -0
  34. data/app/models/dc_big_menu.rb +15 -2
  35. data/app/models/dc_big_table.rb +27 -4
  36. data/app/models/dc_big_table_locale.rb +7 -0
  37. data/app/models/dc_big_table_value.rb +7 -0
  38. data/app/models/dc_category.rb +9 -3
  39. data/app/models/dc_design.rb +50 -0
  40. data/app/models/dc_dummy.rb +41 -1
  41. data/app/models/dc_folder_permission.rb +9 -2
  42. data/app/models/{dc_global_data.rb → dc_ident.rb} +20 -22
  43. data/app/models/dc_journal.rb +9 -1
  44. data/app/models/dc_key_value_store.rb +41 -4
  45. data/app/models/dc_link.rb +7 -0
  46. data/app/models/dc_menu.rb +20 -3
  47. data/app/models/dc_menu_item.rb +7 -0
  48. data/app/models/dc_page.rb +31 -12
  49. data/app/models/dc_part.rb +34 -4
  50. data/app/models/dc_permission.rb +32 -12
  51. data/app/models/dc_piece.rb +32 -4
  52. data/app/models/dc_policy.rb +17 -11
  53. data/app/models/dc_policy_role.rb +12 -7
  54. data/app/models/dc_policy_rule.rb +32 -4
  55. data/app/models/dc_poll.rb +8 -0
  56. data/app/models/dc_poll_item.rb +6 -0
  57. data/app/models/dc_simple_menu.rb +18 -3
  58. data/app/models/dc_simple_menu_item.rb +20 -2
  59. data/app/models/dc_site.rb +13 -3
  60. data/app/models/dc_stat.rb +8 -1
  61. data/app/models/dc_user.rb +18 -2
  62. data/app/models/dc_user_role.rb +7 -0
  63. data/app/models/dc_visit.rb +5 -0
  64. data/app/{helpers → models}/drgcms_form_field.rb +171 -73
  65. data/app/views/__dc_at_the_beginning/create.html.erb +9 -0
  66. data/app/views/__dc_at_the_beginning/index.html.erb +19 -0
  67. data/app/views/cmsedit/_edit_stuff.html.erb +2 -0
  68. data/app/views/cmsedit/_form.html.erb +0 -1
  69. data/app/views/dc_mail/subscribe.html.erb +0 -0
  70. data/config/initializers/kaminari_patch.rb +5 -4
  71. data/config/locales/drgcms_en.yml +4 -0
  72. data/config/locales/drgcms_sl.yml +1 -0
  73. data/config/locales/models_en.yml +14 -3
  74. data/config/locales/models_sl.yml +13 -4
  75. data/drg_cms.gemspec +4 -4
  76. data/lib/drg_cms.rb +37 -8
  77. data/lib/drg_cms/engine.rb +2 -2
  78. data/lib/drg_cms/version.rb +3 -2
  79. data/lib/tasks/at_the_beginning.yml +0 -0
  80. data/lib/tasks/dc_at_the_beginning.rake +118 -0
  81. data/lib/tasks/dc_cleanup.rake +19 -7
  82. data/lib/tasks/log_statistics.rb +66 -0
  83. data/lib/tasks/site_statistics.rake +29 -12
  84. data/test/dummy/app/controllers/application_controller.rb +1 -1
  85. data/test/dummy/app/helpers/application_helper.rb +1 -1
  86. metadata +15 -26
  87. data/README.rdoc +0 -3
  88. data/app/controllers/dc_at_the_beginning_controller.rb +0 -120
  89. data/app/controllers/dc_mail_controller.rb +0 -89
  90. data/app/forms/dc_forum_cat.yml +0 -54
  91. data/app/forms/dc_forum_forum.yml +0 -53
  92. data/app/forms/dc_forum_msg.yml +0 -124
  93. data/app/forms/dc_forum_privmsg.yml +0 -125
  94. data/app/forms/dc_forum_topic.yml +0 -131
  95. data/app/forms/dc_mail.yml +0 -88
  96. data/app/forms/dc_mail_address.yml +0 -56
  97. data/app/forms/dc_mail_list.yml +0 -44
  98. data/app/forms/dc_mail_list_member.yml +0 -42
  99. data/app/helpers/dc_mail_renderer.rb +0 -76
  100. data/app/models/dc_mail.rb +0 -64
  101. data/app/models/dc_mail_address.rb +0 -69
  102. data/app/models/dc_mail_list.rb +0 -48
  103. data/app/models/dc_mail_list_member.rb +0 -34
  104. 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
- # Return selected topmenu level
46
+ # Find out which top level menu currently displayed page belongs to. Subroutine of default method.
44
47
  ########################################################################
45
- def find_selected
46
- ret = DcMenu.find( @parent.page.menu_id ) if @parent.page.menu_id
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 = DcMenu.find( ret.parent )
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 ||= DcMenu.where(dc_site_id: @site._id, parent: nil, active: true).limit(1).first
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
- c = ''
60
- if @opts[:edit_mode] > 1
61
- @opts[:editparams].merge!( { table: 'dc_simple_menu', controller: 'cmsedit', action: 'edit' } )
62
- title = "#{t('drgcms.edit')}: "
63
- @opts[:editparams].merge!( { id: @menu.id, title: "#{title}#{@menu.name}" } ) if @menu
64
- title << t('helpers.label.dc_simple_menu.tabletitle')
65
- @opts[:editparams].merge!( { action: 'index', title: title }) if @menu.nil?
66
- c << dc_link_for_edit( @opts[:editparams] )
67
- end
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
- # Renders menu as table. Thus menu is rendered evenly justified in the width defined by CSS.
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
- # Renders left menu
89
+ # Renderer for menu part displayed on left position of page.
88
90
  ########################################################################
89
91
  def left_menu
90
92
  html = ''
91
- m = DcMenu.find( @parent.page.menu_id )
93
+ m = DcBigMenu.find( @parent.page.menu_id )
92
94
  # Show menu on same level if selected has no children
93
- if DcMenu.where( parent: @parent.page.menu_id ).limit(1).to_a.size == 0
94
- m = DcMenu.find( m.parent )
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 = DcMenu.find( m.parent )
108
+ p = DcBigMenu.find( m.parent )
108
109
  html << "&#9650; #{link_4menu(p)}"
109
110
  end
110
111
  html << '&nbsp;</div>'
111
112
  end
112
113
 
113
114
  ########################################################################
114
- # Renders menu path for selected menu
115
+ # Renders menu path for currently selected page.
115
116
  ########################################################################
116
117
  def path
117
118
  html = ''
118
119
  a = []
119
- m = DcMenu.find( @parent.page.menu_id )
120
+ m = DcBigMenu.find( @parent.page.menu_id )
120
121
  a << m
121
122
  while m.parent
122
- m = DcMenu.find( m.parent )
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 = DcMenu.where(dc_site_id: @site._id, parent: nil, active: true).sort(order: 1).to_a
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 = DcMenu.where(dc_site_id: @site._id, parent: @selected.id, active: true).sort(order: 1).to_a
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 DcMenu: Method #{method} doesn't exist!"
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
- # check if result of captcha os OK
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}&nbsp;<span style="color: red;">*</span>&nbsp;#{@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 'Captcha parameter not set!' unless captcha_type
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
- 'Captcha method not defined!'
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-2013 Damjan Rems
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 : Defines renderer's class
48
- # method : Defines renderer's class method
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 are passed through @opts hash and can therefore be set on site or design or page.
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 returend GA code will not be executed. This is in
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
- # dc_render(:dc_common_renderer, method: 'google_analytics', code: 'UA-12345678-9')
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
- if @opts[:edit_mode] > 1
57
- opts.merge!( { controller: 'cmsedit', action: 'edit' } )
58
- title = "#{t('drgcms.edit')}: "
59
- opts[:title] = "#{title} #{opts[:title]}"
60
- html << '<li>'+dc_link_for_edit(opts)+'</li>'
61
- end
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 for link in a menu.
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
- # Error in early development. Throw out
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
- # - in first place won't write caption text
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
- (item.picture.blank? ? '' : @parent.link_to( @parent.image_tag(item.picture), item.link, {title: img_title, target: target} )) +
76
- ( caption.blank? ? '' : @parent.link_to(caption, item.link, {target: target}) )
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 html required for submenu on one level
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