Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
gitlab-ce
Commits
f064c840
Commit
f064c840
authored
Sep 26, 2012
by
Robert Speicher
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add nav_link helper to TabHelper
parent
aa0c4b77
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
112 additions
and
0 deletions
+112
-0
app/helpers/tab_helper.rb
app/helpers/tab_helper.rb
+68
-0
spec/helpers/tab_helper_spec.rb
spec/helpers/tab_helper_spec.rb
+44
-0
No files found.
app/helpers/tab_helper.rb
View file @
f064c840
module
TabHelper
module
TabHelper
# Navigation link helper
#
# Returns an `li` element with an 'active' class if the supplied
# controller(s) and/or action(s) currently active. The contents of the
# element is the value passed to the block.
#
# options - The options hash used to determine if the element is "active" (default: {})
# :controller - One or more controller names to check (optional).
# :action - One or more action names to check (optional).
# :path - A shorthand path, such as 'dashboard#index', to check (optional).
# :html_options - Extra options to be passed to the list element (optional).
# block - An optional block that will become the contents of the returned
# `li` element.
#
# When both :controller and :action are specified, BOTH must match in order
# to be marked as active. When only one is given, either can match.
#
# Examples
#
# # Assuming we're on TreeController#show
#
# # Controller matches, but action doesn't
# nav_link(controller: [:tree, :refs], action: :edit) { "Hello" }
# # => '<li>Hello</li>'
#
# # Controller matches
# nav_link(controller: [:tree, :refs]) { "Hello" }
# # => '<li class="active">Hello</li>'
#
# # Shorthand path
# nav_link(path: 'tree#show') { "Hello" }
# # => '<li class="active">Hello</li>'
#
# # Supplying custom options for the list element
# nav_link(controller: :tree, html_options: {class: 'home'}) { "Hello" }
# # => '<li class="home active">Hello</li>'
#
# Returns a list item element String
def
nav_link
(
options
=
{},
&
block
)
if
path
=
options
.
delete
(
:path
)
c
,
a
,
_
=
path
.
split
(
'#'
)
else
c
=
options
.
delete
(
:controller
)
a
=
options
.
delete
(
:action
)
end
if
c
&&
a
# When given both options, make sure BOTH are active
klass
=
current_controller?
(
*
c
)
&&
current_action?
(
*
a
)
?
'active'
:
''
else
# Otherwise check EITHER option
klass
=
current_controller?
(
*
c
)
||
current_action?
(
*
a
)
?
'active'
:
''
end
# Add our custom class into the html_options, which may or may not exist
# and which may or may not already have a :class key
o
=
options
.
delete
(
:html_options
)
||
{}
o
[
:class
]
||=
''
o
[
:class
]
+=
' '
+
klass
o
[
:class
].
strip!
if
block_given?
content_tag
(
:li
,
capture
(
&
block
),
o
)
else
content_tag
(
:li
,
nil
,
o
)
end
end
def
tab_class
(
tab_key
)
def
tab_class
(
tab_key
)
active
=
case
tab_key
active
=
case
tab_key
...
...
spec/helpers/tab_helper_spec.rb
0 → 100644
View file @
f064c840
require
'spec_helper'
describe
TabHelper
do
include
ApplicationHelper
describe
'nav_link'
do
before
do
controller
.
stub!
(
:controller_name
).
and_return
(
'foo'
)
stub!
(
:action_name
).
and_return
(
'foo'
)
end
it
"captures block output"
do
nav_link
{
"Testing Blocks"
}.
should
match
(
/Testing Blocks/
)
end
it
"performs checks on the current controller"
do
nav_link
(
controller: :foo
).
should
match
(
/<li class="active">/
)
nav_link
(
controller: :bar
).
should_not
match
(
/active/
)
nav_link
(
controller:
[
:foo
,
:bar
]).
should
match
(
/active/
)
end
it
"performs checks on the current action"
do
nav_link
(
action: :foo
).
should
match
(
/<li class="active">/
)
nav_link
(
action: :bar
).
should_not
match
(
/active/
)
nav_link
(
action:
[
:foo
,
:bar
]).
should
match
(
/active/
)
end
it
"performs checks on both controller and action when both are present"
do
nav_link
(
controller: :bar
,
action: :foo
).
should_not
match
(
/active/
)
nav_link
(
controller: :foo
,
action: :bar
).
should_not
match
(
/active/
)
nav_link
(
controller: :foo
,
action: :foo
).
should
match
(
/active/
)
end
it
"accepts a path shorthand"
do
nav_link
(
path:
'foo#bar'
).
should_not
match
(
/active/
)
nav_link
(
path:
'foo#foo'
).
should
match
(
/active/
)
end
it
"passes extra html options to the list element"
do
nav_link
(
action: :foo
,
html_options:
{
class:
'home'
}).
should
match
(
/<li class="home active">/
)
nav_link
(
html_options:
{
class:
'active'
}).
should
match
(
/<li class="active">/
)
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment