summaryrefslogtreecommitdiff
path: root/app/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers')
-rw-r--r--app/helpers/application_helper.rb82
-rw-r--r--app/helpers/tab_helper.rb86
-rw-r--r--app/helpers/tree_helper.rb5
3 files changed, 109 insertions, 64 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 0938dc2322a..911b46c9a30 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,6 +1,35 @@
require 'digest/md5'
+
module ApplicationHelper
+ # Check if a particular controller is the current one
+ #
+ # args - One or more controller names to check
+ #
+ # Examples
+ #
+ # # On TreeController
+ # current_controller?(:tree) # => true
+ # current_controller?(:commits) # => false
+ # current_controller?(:commits, :tree) # => true
+ def current_controller?(*args)
+ args.any? { |v| v.to_s.downcase == controller.controller_name }
+ end
+
+ # Check if a partcular action is the current one
+ #
+ # args - One or more action names to check
+ #
+ # Examples
+ #
+ # # On Projects#new
+ # current_action?(:new) # => true
+ # current_action?(:create) # => false
+ # current_action?(:new, :create) # => true
+ def current_action?(*args)
+ args.any? { |v| v.to_s.downcase == action_name }
+ end
+
def gravatar_icon(user_email = '', size = 40)
if Gitlab.config.disable_gravatar? || user_email.blank?
'no_avatar.png'
@@ -31,8 +60,8 @@ module ApplicationHelper
def grouped_options_refs(destination = :tree)
options = [
- ["Branch", @project.repo.heads.map(&:name) ],
- [ "Tag", @project.tags ]
+ ["Branch", @project.branch_names ],
+ [ "Tag", @project.tag_names ]
]
# If reference is commit id -
@@ -58,11 +87,11 @@ module ApplicationHelper
if @project && !@project.new_record?
project_nav = [
- { label: "#{@project.name} / Issues", url: project_issues_path(@project) },
- { label: "#{@project.name} / Wall", url: wall_project_path(@project) },
- { label: "#{@project.name} / Tree", url: tree_project_ref_path(@project, @project.root_ref) },
- { label: "#{@project.name} / Commits", url: project_commits_path(@project) },
- { label: "#{@project.name} / Team", url: project_team_index_path(@project) }
+ { label: "#{@project.name} / Issues", url: project_issues_path(@project) },
+ { label: "#{@project.name} / Wall", url: wall_project_path(@project) },
+ { label: "#{@project.name} / Tree", url: project_tree_path(@project, @ref || @project.root_ref) },
+ { label: "#{@project.name} / Commits", url: project_commits_path(@project, @ref || @project.root_ref) },
+ { label: "#{@project.name} / Team", url: project_team_index_path(@project) }
]
end
@@ -85,45 +114,6 @@ module ApplicationHelper
event.project.merge_requests_enabled
end
- def tab_class(tab_key)
- active = case tab_key
-
- # Project Area
- when :wall; wall_tab?
- when :wiki; controller.controller_name == "wikis"
- when :issues; issues_tab?
- when :network; current_page?(controller: "projects", action: "graph", id: @project)
- when :merge_requests; controller.controller_name == "merge_requests"
-
- # Dashboard Area
- when :help; controller.controller_name == "help"
- when :search; current_page?(search_path)
- when :dash_issues; current_page?(dashboard_issues_path)
- when :dash_mr; current_page?(dashboard_merge_requests_path)
- when :root; current_page?(dashboard_path) || current_page?(root_path)
-
- # Profile Area
- when :profile; current_page?(controller: "profile", action: :show)
- when :history; current_page?(controller: "profile", action: :history)
- when :account; current_page?(controller: "profile", action: :account)
- when :token; current_page?(controller: "profile", action: :token)
- when :design; current_page?(controller: "profile", action: :design)
- when :ssh_keys; controller.controller_name == "keys"
-
- # Admin Area
- when :admin_root; controller.controller_name == "dashboard"
- when :admin_users; controller.controller_name == 'users'
- when :admin_projects; controller.controller_name == "projects"
- when :admin_hooks; controller.controller_name == 'hooks'
- when :admin_resque; controller.controller_name == 'resque'
- when :admin_logs; controller.controller_name == 'logs'
-
- else
- false
- end
- active ? "current" : nil
- end
-
def hexdigest(string)
Digest::SHA1.hexdigest string
end
diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb
index b5d7ccb7d3c..c76c1b6f83d 100644
--- a/app/helpers/tab_helper.rb
+++ b/app/helpers/tab_helper.rb
@@ -1,35 +1,85 @@
module TabHelper
- def issues_tab?
- controller.controller_name == "issues" || controller.controller_name == "milestones"
- end
+ # 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!
- def wall_tab?
- current_page?(controller: "projects", action: "wall", id: @project)
+ if block_given?
+ content_tag(:li, capture(&block), o)
+ else
+ content_tag(:li, nil, o)
+ end
end
def project_tab_class
[:show, :files, :edit, :update].each do |action|
- return "current" if current_page?(controller: "projects", action: action, id: @project)
+ return "active" if current_page?(controller: "projects", action: action, id: @project)
end
if ['snippets', 'hooks', 'deploy_keys', 'team_members'].include? controller.controller_name
- "current"
- end
- end
-
- def tree_tab_class
- controller.controller_name == "refs" ? "current" : nil
- end
-
- def commit_tab_class
- if ['commits', 'repositories', 'protected_branches'].include? controller.controller_name
- "current"
+ "active"
end
end
def branches_tab_class
if current_page?(branches_project_repository_path(@project)) ||
- controller.controller_name == "protected_branches" ||
+ current_controller?(:protected_branches) ||
current_page?(project_repository_path(@project))
'active'
end
diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb
index 2b7265ca19e..81a16989405 100644
--- a/app/helpers/tree_helper.rb
+++ b/app/helpers/tree_helper.rb
@@ -39,4 +39,9 @@ module TreeHelper
def gitlab_markdown?(filename)
filename.end_with?(*%w(.mdown .md .markdown))
end
+
+ # Simple shortcut to File.join
+ def tree_join(*args)
+ File.join(*args)
+ end
end