menu_helper 0.1.0 → 0.2.0
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.
- data/CHANGELOG.rdoc +4 -0
- data/Rakefile +1 -1
- data/lib/menu_helper/html_element.rb +39 -41
- data/lib/menu_helper/menu.rb +124 -126
- data/lib/menu_helper/menu_bar.rb +188 -190
- data/lib/menu_helper.rb +103 -105
- data/test/helpers/menu_helper_test.rb +1 -1
- data/test/unit/html_element_test.rb +7 -7
- data/test/unit/menu_bar_test.rb +22 -22
- data/test/unit/menu_test.rb +53 -53
- metadata +14 -14
data/lib/menu_helper/menu_bar.rb
CHANGED
@@ -1,205 +1,203 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
class
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
module MenuHelper
|
2
|
+
# Represents a group of menus. A menu bar can either be the main menu bar
|
3
|
+
# or a menu bar nested within a menu.
|
4
|
+
class MenuBar < HtmlElement
|
5
|
+
# The css class to apply for all menu bars
|
6
|
+
cattr_accessor :menu_bar_class
|
7
|
+
@@menu_bar_class = 'menubar'
|
8
|
+
|
9
|
+
# The css class to apply when a sub-menu bar is selected
|
10
|
+
cattr_accessor :selected_class
|
11
|
+
@@selected_class = 'menubar-selected'
|
12
|
+
|
13
|
+
# The request context in which this menu bar is being rendered
|
14
|
+
attr_reader :request_controller
|
15
|
+
|
16
|
+
# The menus within this menu bar
|
17
|
+
attr_reader :menus
|
18
|
+
|
19
|
+
# The configuration options for this menu bar
|
20
|
+
attr_reader :options
|
21
|
+
|
22
|
+
def initialize(request_controller, options = {}, html_options = {}) #:nodoc:
|
23
|
+
super(html_options)
|
9
24
|
|
10
|
-
#
|
11
|
-
|
12
|
-
|
25
|
+
# Set up default options
|
26
|
+
options.assert_valid_keys(:parent_menu, :auto_set_ids, :attach_active_submenus, :content_for)
|
27
|
+
options.reverse_merge!(:auto_set_ids => true, :attach_active_submenus => true, :content_for => 'menu_bar')
|
28
|
+
@options = options
|
13
29
|
|
14
|
-
#
|
15
|
-
|
30
|
+
# Set context of the menu bar (the request and any parent)
|
31
|
+
@request_controller = request_controller
|
16
32
|
|
17
|
-
#
|
18
|
-
|
33
|
+
# No menus initially associated
|
34
|
+
@menus = []
|
19
35
|
|
20
|
-
#
|
21
|
-
|
36
|
+
# Set up default html options
|
37
|
+
self[:class] = "#{self[:class]} #{menu_bar_class} #{menu_bar_class}-#{level}".strip
|
22
38
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# Set context of the menu bar (the request and any parent)
|
32
|
-
@request_controller = request_controller
|
33
|
-
|
34
|
-
# No menus initially associated
|
35
|
-
@menus = []
|
36
|
-
|
37
|
-
# Set up default html options
|
38
|
-
self[:class] = "#{self[:class]} #{menu_bar_class} #{menu_bar_class}-#{level}".strip
|
39
|
+
yield self if block_given?
|
40
|
+
end
|
41
|
+
|
42
|
+
# Gets the nesting level of this menu bar. The top-level menu bar will
|
43
|
+
# always have a nesting level of 1.
|
44
|
+
def level
|
45
|
+
@level ||= begin
|
46
|
+
level = 1
|
39
47
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
def level
|
46
|
-
@level ||= begin
|
47
|
-
level = 1
|
48
|
-
|
49
|
-
# Keep walking up the tree, until first-level menus are encountered
|
50
|
-
menu = parent_menu
|
51
|
-
while menu
|
52
|
-
level += 1
|
53
|
-
menu = menu.parent_menu
|
54
|
-
end
|
55
|
-
|
56
|
-
level
|
48
|
+
# Keep walking up the tree, until first-level menus are encountered
|
49
|
+
menu = parent_menu
|
50
|
+
while menu
|
51
|
+
level += 1
|
52
|
+
menu = menu.parent_menu
|
57
53
|
end
|
54
|
+
|
55
|
+
level
|
58
56
|
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# The menu in which this menu bar is being displayed. This will be nil if
|
60
|
+
# this is the main menu bar.
|
61
|
+
def parent_menu
|
62
|
+
@options[:parent_menu]
|
63
|
+
end
|
64
|
+
|
65
|
+
# Shoulds elements have default ids automatically applied to them?
|
66
|
+
def auto_set_ids?
|
67
|
+
@options[:auto_set_ids]
|
68
|
+
end
|
69
|
+
|
70
|
+
# Should menu bars in sub-menus be attached to this menu bar?
|
71
|
+
def attach_active_submenus?
|
72
|
+
@options[:attach_active_submenus]
|
73
|
+
end
|
74
|
+
|
75
|
+
# The instance variable to use when rendering the current active sub-menu
|
76
|
+
# bar
|
77
|
+
def content_for_variable
|
78
|
+
"@content_for_#{@options[:content_for]}_level_#{level}"
|
79
|
+
end
|
80
|
+
|
81
|
+
# Is this menu bar selected? A menu bar is considered selected if it has
|
82
|
+
# a parent menu and that parent menu is selected.
|
83
|
+
def selected?
|
84
|
+
parent_menu && menus.any? {|menu| menu.selected?}
|
85
|
+
end
|
86
|
+
|
87
|
+
# Creates a new menu in this bar with the given id. The content
|
88
|
+
# within the menu is, by default, set to a humanized version of the id.
|
89
|
+
#
|
90
|
+
# == URLs with routes
|
91
|
+
#
|
92
|
+
# If you have named routes set up in the application, the menu attempts
|
93
|
+
# to automatically figure out what URL you're trying to link to. It
|
94
|
+
# does this by looking at the id of the menu and the id of its parent.
|
95
|
+
#
|
96
|
+
# For example, a menu bar with the id 'home' and a menu with the id
|
97
|
+
# 'contact_us' will attempt to look for the following named routes as
|
98
|
+
# the URL to link to (in order of priority):
|
99
|
+
# 1. home_contact_us_url
|
100
|
+
# 2. contact_us_url
|
101
|
+
#
|
102
|
+
# Example routes.rb:
|
103
|
+
#
|
104
|
+
# ActionController::Routing::Routes.draw do |map|
|
105
|
+
# map.with_options(:controller => 'home') do |home|
|
106
|
+
# home.home '', :action => 'index'
|
107
|
+
# home.home_search 'search', :action => 'search'
|
108
|
+
# end
|
109
|
+
#
|
110
|
+
# map.with_options(:controller => 'about_us') do |about_us|
|
111
|
+
# about_us.about_us 'about_us', :action => 'index'
|
112
|
+
# end
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# Example menu bar:
|
116
|
+
#
|
117
|
+
# menu_bar :home do |home|
|
118
|
+
# home.menu :about_us # => Links to about_us_url
|
119
|
+
# home.menu :search # => Links to home_search_url
|
120
|
+
# end
|
121
|
+
#
|
122
|
+
# == URLs with url_for
|
123
|
+
#
|
124
|
+
# If neither of these named routes are being used, the url will be based
|
125
|
+
# on the options passed into the menu. The url_options takes the same
|
126
|
+
# values as +url_for+. By default, the name of the controller will be
|
127
|
+
# guessed in the following order:
|
128
|
+
# 1. The id of the menu ('contact_us' => ContactUsController)
|
129
|
+
# 2. The controller of the parent menu/menu bar
|
130
|
+
# 3. The request controller
|
131
|
+
#
|
132
|
+
# To override the default controller being linked to, you can explicitly
|
133
|
+
# define it like so:
|
134
|
+
# menu :contact, 'Contact Us', :controller => 'about_us'
|
135
|
+
#
|
136
|
+
# Examples:
|
137
|
+
#
|
138
|
+
# menu :home do |home|
|
139
|
+
# home.menu :about, 'About Us', :action => 'about_us' # => Links to {:controller => 'home', :action => 'about_us'}
|
140
|
+
# home.menu :who_we_are # => Links to {:controller => 'home', :action => 'who_we_are'}
|
141
|
+
# home.menu :contact_us, :controller => 'contact', :action => 'index' # => Links to {:controller => 'contact', :action => 'index'}
|
142
|
+
# home.menu :search # => Links to {:controller => 'search'}
|
143
|
+
# end
|
144
|
+
#
|
145
|
+
# You can also link to an explicit URL like so:
|
146
|
+
#
|
147
|
+
# home.menu :search, 'http://www.google.com'
|
148
|
+
#
|
149
|
+
# == Turning off links
|
150
|
+
#
|
151
|
+
# If you don't want a menu to link to a URL, you can turn off linking like
|
152
|
+
# so:
|
153
|
+
#
|
154
|
+
# home.menu :contact_us, {}, :link => false
|
155
|
+
#
|
156
|
+
# == Defining content and html attributes
|
157
|
+
#
|
158
|
+
# By default, the content within a menu will be set as a humanized
|
159
|
+
# version of the menu's id. Examples of menus which customize the
|
160
|
+
# content and/or html attributes are below:
|
161
|
+
#
|
162
|
+
# home.menu :contact # => <li id="contact"><a href="/contact">Contact</a></li>
|
163
|
+
# home.menu :contact, 'Contact Us' # => <li id="contact"><a href="/contact">Contact Us</a></li>
|
164
|
+
# home.menu :contact, {}, :class => 'pretty' # => <li id="contact" class="pretty"><a href="/contact">Contact</a></li>
|
165
|
+
# home.menu :contact, 'Get in touch!', {}, :class => 'pretty' # => <li id="contact" class="pretty"><a href="/contact">Contact Us</a></li>
|
166
|
+
#
|
167
|
+
# == Sub-menus
|
168
|
+
#
|
169
|
+
# Menus can also have their own sub-menus by passing in a block. You can
|
170
|
+
# create sub-menus in the same manner that the main menus are created.
|
171
|
+
# For example,
|
172
|
+
#
|
173
|
+
# home.menu :about do |about|
|
174
|
+
# about.menu :who_we_are
|
175
|
+
# about.menu :contact_us
|
176
|
+
# end
|
177
|
+
def menu(id, content = nil, url_options = {}, html_options = {}, &block)
|
178
|
+
menu = Menu.new(self, id, content, url_options, html_options, &block)
|
179
|
+
@menus << menu
|
59
180
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
def auto_set_ids?
|
68
|
-
@options[:auto_set_ids]
|
69
|
-
end
|
70
|
-
|
71
|
-
# Should menu bars in sub-menus be attached to this menu bar?
|
72
|
-
def attach_active_submenus?
|
73
|
-
@options[:attach_active_submenus]
|
74
|
-
end
|
75
|
-
|
76
|
-
# The instance variable to use when rendering the current active sub-menu
|
77
|
-
# bar
|
78
|
-
def content_for_variable
|
79
|
-
"@content_for_#{@options[:content_for]}_level_#{level}"
|
80
|
-
end
|
81
|
-
|
82
|
-
# Is this menu bar selected? A menu bar is considered selected if it has
|
83
|
-
# a parent menu and that parent menu is selected.
|
84
|
-
def selected?
|
85
|
-
parent_menu && menus.any? {|menu| menu.selected?}
|
86
|
-
end
|
181
|
+
menu
|
182
|
+
end
|
183
|
+
|
184
|
+
# Builds the actual html of the menu bar
|
185
|
+
def html
|
186
|
+
html_options = @html_options.dup
|
187
|
+
html_options[:class] = "#{html_options[:class]} #{selected_class}".strip if selected?
|
87
188
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
|
94
|
-
|
95
|
-
# does this by looking at the id of the menu and the id of its parent.
|
96
|
-
#
|
97
|
-
# For example, a menu bar with the id 'home' and a menu with the id
|
98
|
-
# 'contact_us' will attempt to look for the following named routes as
|
99
|
-
# the URL to link to (in order of priority):
|
100
|
-
# 1. home_contact_us_url
|
101
|
-
# 2. contact_us_url
|
102
|
-
#
|
103
|
-
# Example routes.rb:
|
104
|
-
#
|
105
|
-
# ActionController::Routing::Routes.draw do |map|
|
106
|
-
# map.with_options(:controller => 'home') do |home|
|
107
|
-
# home.home '', :action => 'index'
|
108
|
-
# home.home_search 'search', :action => 'search'
|
109
|
-
# end
|
110
|
-
#
|
111
|
-
# map.with_options(:controller => 'about_us') do |about_us|
|
112
|
-
# about_us.about_us 'about_us', :action => 'index'
|
113
|
-
# end
|
114
|
-
# end
|
115
|
-
#
|
116
|
-
# Example menu bar:
|
117
|
-
#
|
118
|
-
# menu_bar :home do |home|
|
119
|
-
# home.menu :about_us # => Links to about_us_url
|
120
|
-
# home.menu :search # => Links to home_search_url
|
121
|
-
# end
|
122
|
-
#
|
123
|
-
# == URLs with url_for
|
124
|
-
#
|
125
|
-
# If neither of these named routes are being used, the url will be based
|
126
|
-
# on the options passed into the menu. The url_options takes the same
|
127
|
-
# values as +url_for+. By default, the name of the controller will be
|
128
|
-
# guessed in the following order:
|
129
|
-
# 1. The id of the menu ('contact_us' => ContactUsController)
|
130
|
-
# 2. The controller of the parent menu/menu bar
|
131
|
-
# 3. The request controller
|
132
|
-
#
|
133
|
-
# To override the default controller being linked to, you can explicitly
|
134
|
-
# define it like so:
|
135
|
-
# menu :contact, 'Contact Us', :controller => 'about_us'
|
136
|
-
#
|
137
|
-
# Examples:
|
138
|
-
#
|
139
|
-
# menu :home do |home|
|
140
|
-
# home.menu :about, 'About Us', :action => 'about_us' # => Links to {:controller => 'home', :action => 'about_us'}
|
141
|
-
# home.menu :who_we_are # => Links to {:controller => 'home', :action => 'who_we_are'}
|
142
|
-
# home.menu :contact_us, :controller => 'contact', :action => 'index' # => Links to {:controller => 'contact', :action => 'index'}
|
143
|
-
# home.menu :search # => Links to {:controller => 'search'}
|
144
|
-
# end
|
145
|
-
#
|
146
|
-
# You can also link to an explicit URL like so:
|
147
|
-
#
|
148
|
-
# home.menu :search, 'http://www.google.com'
|
149
|
-
#
|
150
|
-
# == Turning off links
|
151
|
-
#
|
152
|
-
# If you don't want a menu to link to a URL, you can turn off linking like
|
153
|
-
# so:
|
154
|
-
#
|
155
|
-
# home.menu :contact_us, {}, :link => false
|
156
|
-
#
|
157
|
-
# == Defining content and html attributes
|
158
|
-
#
|
159
|
-
# By default, the content within a menu will be set as a humanized
|
160
|
-
# version of the menu's id. Examples of menus which customize the
|
161
|
-
# content and/or html attributes are below:
|
162
|
-
#
|
163
|
-
# home.menu :contact # => <li id="contact"><a href="/contact">Contact</a></li>
|
164
|
-
# home.menu :contact, 'Contact Us' # => <li id="contact"><a href="/contact">Contact Us</a></li>
|
165
|
-
# home.menu :contact, {}, :class => 'pretty' # => <li id="contact" class="pretty"><a href="/contact">Contact</a></li>
|
166
|
-
# home.menu :contact, 'Get in touch!', {}, :class => 'pretty' # => <li id="contact" class="pretty"><a href="/contact">Contact Us</a></li>
|
167
|
-
#
|
168
|
-
# == Sub-menus
|
169
|
-
#
|
170
|
-
# Menus can also have their own sub-menus by passing in a block. You can
|
171
|
-
# create sub-menus in the same manner that the main menus are created.
|
172
|
-
# For example,
|
173
|
-
#
|
174
|
-
# home.menu :about do |about|
|
175
|
-
# about.menu :who_we_are
|
176
|
-
# about.menu :contact_us
|
177
|
-
# end
|
178
|
-
def menu(id, content = nil, url_options = {}, html_options = {}, &block)
|
179
|
-
menu = Menu.new(self, id, content, url_options, html_options, &block)
|
180
|
-
@menus << menu
|
181
|
-
|
182
|
-
menu
|
189
|
+
content_tag(tag_name, content, html_options)
|
190
|
+
end
|
191
|
+
|
192
|
+
private
|
193
|
+
# Unordered list
|
194
|
+
def tag_name
|
195
|
+
'ul'
|
183
196
|
end
|
184
197
|
|
185
|
-
#
|
186
|
-
def
|
187
|
-
|
188
|
-
html_options[:class] = "#{html_options[:class]} #{selected_class}".strip if selected?
|
189
|
-
|
190
|
-
content_tag(tag_name, content, html_options)
|
198
|
+
# Generate the html for the menu bar
|
199
|
+
def content
|
200
|
+
@menus.inject('') {|html, menu| html << menu.html(@menus.last == menu)}
|
191
201
|
end
|
192
|
-
|
193
|
-
private
|
194
|
-
# Unordered list
|
195
|
-
def tag_name
|
196
|
-
'ul'
|
197
|
-
end
|
198
|
-
|
199
|
-
# Generate the html for the menu bar
|
200
|
-
def content
|
201
|
-
@menus.inject('') {|html, menu| html << menu.html(@menus.last == menu)}
|
202
|
-
end
|
203
|
-
end
|
204
202
|
end
|
205
203
|
end
|
data/lib/menu_helper.rb
CHANGED
@@ -2,113 +2,111 @@ require 'menu_helper/html_element'
|
|
2
2
|
require 'menu_helper/menu_bar'
|
3
3
|
require 'menu_helper/menu'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
MenuBar.new(@controller, options, html_options, &block).html
|
108
|
-
end
|
5
|
+
# Provides a builder for generating html menu bars. The structure of the
|
6
|
+
# menus/menu bars is based on lists and should be styled using css.
|
7
|
+
module MenuHelper
|
8
|
+
# Creates a new first-level menu bar. This takes the configuration options
|
9
|
+
# for the menu bar, followed by html options. Both of these parameters are
|
10
|
+
# optional.
|
11
|
+
#
|
12
|
+
# Configuration options:
|
13
|
+
# * +auto_set_ids+ - Whether or not to automatically add ids to each menu/menu bar. Default is true.
|
14
|
+
# * +attach_active_submenus+ - Whether any active sub-menu bar should be rendered as part of its parent menu. Default is true.
|
15
|
+
# * +content_for+ - The base block name to use when detaching active submenus. Default is "menu_bar". For example, this will render sub-menu bars to menu_bar_level_2
|
16
|
+
#
|
17
|
+
# == Examples
|
18
|
+
#
|
19
|
+
# menu_bar({}, :id => 'nav', :class => 'pretty') do |main|
|
20
|
+
# main.menu :home
|
21
|
+
# main.menu :about_us do |about_us|
|
22
|
+
# about_us.menu :who_we_are
|
23
|
+
# about_us.menu :what_we_do
|
24
|
+
# about_us.menu :where_we_are
|
25
|
+
# about_us.menu :contact, 'Contact', 'mailto:contact@us.com'
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# ...generates the following html if +about_us+ is selected...
|
30
|
+
#
|
31
|
+
# <ul id="nav" class="pretty menubar menubar-1">
|
32
|
+
# <li id="nav-home"><a href="/"><span>Home</span></a></li>
|
33
|
+
# <li id="nav-about_us" class="menubar-selected"><a href="/about_us"><span>About Us</span></a>
|
34
|
+
# <ul class="menubar menubar-2" class="menubar-selected">
|
35
|
+
# <li id="nav-about_us-who_we_are"><a href="/about_us/who_we_are"><span>Who We Are</span></a></li>
|
36
|
+
# <li id="nav-about_us-what_we_do"><a href="/about_us/what_we_do"><span>What We Do</span></a></li>
|
37
|
+
# <li id="nav-about_us-contact"><a href="mailto:contact@us.com"><span>Contact</span></a></li>
|
38
|
+
# </ul>
|
39
|
+
# </li>
|
40
|
+
# </ul>
|
41
|
+
#
|
42
|
+
# Submenus can be detached from the original parent menu for greater control
|
43
|
+
# over layout. For example,
|
44
|
+
#
|
45
|
+
# menu_bar({:attach_active_submenus => false}, :id => 'nav') do |main|
|
46
|
+
# main.menu :home
|
47
|
+
# main.menu :about_us do |about_us|
|
48
|
+
# about_us.menu :who_we_are
|
49
|
+
# about_us.menu :what_we_do
|
50
|
+
# about_us.menu :where_we_are
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
#
|
54
|
+
# <div id="subnav">
|
55
|
+
# <%= yield :menu_bar_level_2 %>
|
56
|
+
# </div>
|
57
|
+
#
|
58
|
+
# ...generates the following html if +about_us+ is selected...
|
59
|
+
#
|
60
|
+
# <ul id="nav" class="menubar menubar-1">
|
61
|
+
# <li id="nav-home"><a href="/"><span>Home</span></a></li>
|
62
|
+
# <li id="nav-about_us" class="menubar-selected"><a href="/about_us"><span>About Us</span></a></li>
|
63
|
+
# </ul>
|
64
|
+
#
|
65
|
+
# <div id="subnav">
|
66
|
+
# <ul class="menubar menubar-2 menubar-selected">
|
67
|
+
# <li id="nav-about_us-who_we_are"><a href="/about_us/who_we_are"><span>Who We Are</span></a></li>
|
68
|
+
# <li id="nav-about_us-what_we_do"><a href="/about_us/what_we_do"><span>What We Do</span></a></li>
|
69
|
+
# <li id="nav-about_us-contact"><a href="mailto:contact@us.com"><span>Contact</span></a></li>
|
70
|
+
# </ul>
|
71
|
+
# </div>
|
72
|
+
#
|
73
|
+
# == Menu Selection
|
74
|
+
#
|
75
|
+
# The currently selected menu is based on the current page that is displayed
|
76
|
+
# to the user. If the url that the menu links to is the same as the
|
77
|
+
# current page, then that menu will be selected. This menu uses
|
78
|
+
# ActionView::Helpers::UrlHelper#current_page? to determine whether or not
|
79
|
+
# it is the currently selected menu.
|
80
|
+
#
|
81
|
+
# If the menu that is selected is nested within another menu, then those
|
82
|
+
# menus will be selected as well.
|
83
|
+
#
|
84
|
+
# A "selected" menu/menu bar is indicated by an additional css class that is
|
85
|
+
# added to the element.
|
86
|
+
#
|
87
|
+
# For example, if a sub-menu like +who_we_are+ is selected, the html
|
88
|
+
# generated from the above full example would look like so:
|
89
|
+
#
|
90
|
+
# <ul id="nav" class="pretty menubar menubar-1">
|
91
|
+
# <li id="nav-home"><a href="/"><span>Home</span></a></li>
|
92
|
+
# <li id="nav-about_us" class="menubar-selected"><span>About Us</span>
|
93
|
+
# <ul class="menubar menubar-2 menubar-selected">
|
94
|
+
# <li id="nav-about_us-who_we_are" class="menubar-selected"><a href="/about_us/who_we_are"><span>Who We Are</span></a></li>
|
95
|
+
# <li id="nav-about_us-what_we_do"><a href="/about_us/what_we_do"><span>What We Do</span></a></li>
|
96
|
+
# <li id="nav-about_us-contact"><a href="mailto:contact@us.com"><span>Contact</span></a></li>
|
97
|
+
# </ul>
|
98
|
+
# </li>
|
99
|
+
# </ul>
|
100
|
+
#
|
101
|
+
# == Menu Creation
|
102
|
+
#
|
103
|
+
# For more information about how menus are created, see the documentation
|
104
|
+
# for MenuHelper::MenuBar#menu.
|
105
|
+
def menu_bar(options = {}, html_options = {}, &block)
|
106
|
+
MenuBar.new(@controller, options, html_options, &block).html
|
109
107
|
end
|
110
108
|
end
|
111
109
|
|
112
110
|
ActionController::Base.class_eval do
|
113
|
-
helper
|
111
|
+
helper MenuHelper
|
114
112
|
end
|