Fix nav_link support for several path options
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
f9ece12e87
commit
d2bd5e833f
2 changed files with 35 additions and 20 deletions
|
@ -28,6 +28,10 @@ module TabHelper
|
||||||
# nav_link(controller: [:tree, :refs]) { "Hello" }
|
# nav_link(controller: [:tree, :refs]) { "Hello" }
|
||||||
# # => '<li class="active">Hello</li>'
|
# # => '<li class="active">Hello</li>'
|
||||||
#
|
#
|
||||||
|
# # Several paths
|
||||||
|
# nav_link(path: ['tree#show', 'profile#show']) { "Hello" }
|
||||||
|
# # => '<li class="active">Hello</li>'
|
||||||
|
#
|
||||||
# # Shorthand path
|
# # Shorthand path
|
||||||
# nav_link(path: 'tree#show') { "Hello" }
|
# nav_link(path: 'tree#show') { "Hello" }
|
||||||
# # => '<li class="active">Hello</li>'
|
# # => '<li class="active">Hello</li>'
|
||||||
|
@ -38,25 +42,7 @@ module TabHelper
|
||||||
#
|
#
|
||||||
# Returns a list item element String
|
# Returns a list item element String
|
||||||
def nav_link(options = {}, &block)
|
def nav_link(options = {}, &block)
|
||||||
if path = options.delete(:path)
|
klass = active_nav_link?(options) ? 'active' : ''
|
||||||
if path.respond_to?(:each)
|
|
||||||
c = path.map { |p| p.split('#').first }
|
|
||||||
a = path.map { |p| p.split('#').last }
|
|
||||||
else
|
|
||||||
c, a, _ = path.split('#')
|
|
||||||
end
|
|
||||||
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
|
# 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
|
# and which may or may not already have a :class key
|
||||||
|
@ -72,6 +58,34 @@ module TabHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def active_nav_link?(options)
|
||||||
|
if path = options.delete(:path)
|
||||||
|
unless path.respond_to?(:each)
|
||||||
|
path = [path]
|
||||||
|
end
|
||||||
|
|
||||||
|
path.any? do |single_path|
|
||||||
|
current_path?(single_path)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
c = options.delete(:controller)
|
||||||
|
a = options.delete(:action)
|
||||||
|
|
||||||
|
if c && a
|
||||||
|
# When given both options, make sure BOTH are true
|
||||||
|
current_controller?(*c) && current_action?(*a)
|
||||||
|
else
|
||||||
|
# Otherwise check EITHER option
|
||||||
|
current_controller?(*c) || current_action?(*a)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_path?(path)
|
||||||
|
c, a, _ = path.split('#')
|
||||||
|
current_controller?(c) && current_action?(a)
|
||||||
|
end
|
||||||
|
|
||||||
def project_tab_class
|
def project_tab_class
|
||||||
return "active" if current_page?(controller: "/projects", action: :edit, id: @project)
|
return "active" if current_page?(controller: "/projects", action: :edit, id: @project)
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
= nav_link(path: ['profiles#applications', 'applications#edit', 'applications#show', 'applications#new']) do
|
= nav_link(path: ['profiles#applications', 'applications#edit', 'applications#show', 'applications#new']) do
|
||||||
= link_to applications_profile_path do
|
= link_to applications_profile_path do
|
||||||
%i.fa.fa-cloud
|
%i.fa.fa-cloud
|
||||||
Applications
|
%span
|
||||||
|
Applications
|
||||||
= nav_link(controller: :emails) do
|
= nav_link(controller: :emails) do
|
||||||
= link_to profile_emails_path do
|
= link_to profile_emails_path do
|
||||||
%i.fa.fa-envelope-o
|
%i.fa.fa-envelope-o
|
||||||
|
|
Loading…
Reference in a new issue