drg_cms 0.4.39 → 0.4.53

Sign up to get free protection for your applications and to get access to all the features.
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