Add active_when helper
Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/24036
This commit is contained in:
parent
1452729304
commit
0dfccd995a
17 changed files with 66 additions and 55 deletions
|
@ -296,4 +296,13 @@ module ApplicationHelper
|
|||
def page_class
|
||||
"issue-boards-page" if current_controller?(:boards)
|
||||
end
|
||||
|
||||
# Returns active css class when condition returns true
|
||||
# otherwise returns nil.
|
||||
#
|
||||
# Example:
|
||||
# %li{ class: active_when(params[:filter] == '1') }
|
||||
def active_when(condition)
|
||||
'active' if condition
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,15 +8,14 @@
|
|||
%div{ class: container_class }
|
||||
%ul.nav-links.log-tabs
|
||||
- loggers.each do |klass|
|
||||
%li{ class: (klass == Gitlab::GitLogger ? 'active' : '') }>
|
||||
%li{ class: active_when(klass == Gitlab::GitLogger) }>
|
||||
= link_to klass::file_name, "##{klass::file_name_noext}",
|
||||
'data-toggle' => 'tab'
|
||||
.row-content-block
|
||||
To prevent performance issues admin logs output the last 2000 lines
|
||||
.tab-content
|
||||
- loggers.each do |klass|
|
||||
.tab-pane{ class: (klass == Gitlab::GitLogger ? 'active' : ''),
|
||||
id: klass::file_name_noext }
|
||||
.tab-pane{ class: active_when(klass == Gitlab::GitLogger), id: klass::file_name_noext }
|
||||
.file-holder#README
|
||||
.js-file-title.file-title
|
||||
%i.fa.fa-file
|
||||
|
|
|
@ -48,13 +48,13 @@
|
|||
= link_to admin_projects_path do
|
||||
All
|
||||
|
||||
= nav_link(html_options: { class: params[:visibility_level] == Gitlab::VisibilityLevel::PRIVATE.to_s ? 'active' : '' }) do
|
||||
= nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::PRIVATE.to_s) }) do
|
||||
= link_to admin_projects_path(visibility_level: Gitlab::VisibilityLevel::PRIVATE) do
|
||||
Private
|
||||
= nav_link(html_options: { class: params[:visibility_level] == Gitlab::VisibilityLevel::INTERNAL.to_s ? 'active' : '' }) do
|
||||
= nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::INTERNAL.to_s) }) do
|
||||
= link_to admin_projects_path(visibility_level: Gitlab::VisibilityLevel::INTERNAL) do
|
||||
Internal
|
||||
= nav_link(html_options: { class: params[:visibility_level] == Gitlab::VisibilityLevel::PUBLIC.to_s ? 'active' : '' }) do
|
||||
= nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::PUBLIC.to_s) }) do
|
||||
= link_to admin_projects_path(visibility_level: Gitlab::VisibilityLevel::PUBLIC) do
|
||||
Public
|
||||
|
||||
|
|
|
@ -38,31 +38,31 @@
|
|||
.nav-block
|
||||
%ul.nav-links.wide.scrolling-tabs.white.scrolling-tabs
|
||||
.fade-left
|
||||
= nav_link(html_options: { class: ('active' unless params[:filter]) }) do
|
||||
= nav_link(html_options: { class: active_when(params[:filter].nil?) }) do
|
||||
= link_to admin_users_path do
|
||||
Active
|
||||
%small.badge= number_with_delimiter(User.active.count)
|
||||
= nav_link(html_options: { class: ('active' if params[:filter] == 'admins') }) do
|
||||
= nav_link(html_options: { class: active_when(params[:filter] == 'admins') }) do
|
||||
= link_to admin_users_path(filter: "admins") do
|
||||
Admins
|
||||
%small.badge= number_with_delimiter(User.admins.count)
|
||||
= nav_link(html_options: { class: "#{'active' if params[:filter] == 'two_factor_enabled'} filter-two-factor-enabled" }) do
|
||||
= nav_link(html_options: { class: "#{active_when(params[:filter] == 'two_factor_enabled')} filter-two-factor-enabled" }) do
|
||||
= link_to admin_users_path(filter: 'two_factor_enabled') do
|
||||
2FA Enabled
|
||||
%small.badge= number_with_delimiter(User.with_two_factor.count)
|
||||
= nav_link(html_options: { class: "#{'active' if params[:filter] == 'two_factor_disabled'} filter-two-factor-disabled" }) do
|
||||
= nav_link(html_options: { class: "#{active_when(params[:filter] == 'two_factor_disabled')} filter-two-factor-disabled" }) do
|
||||
= link_to admin_users_path(filter: 'two_factor_disabled') do
|
||||
2FA Disabled
|
||||
%small.badge= number_with_delimiter(User.without_two_factor.count)
|
||||
= nav_link(html_options: { class: ('active' if params[:filter] == 'external') }) do
|
||||
= nav_link(html_options: { class: active_when(params[:filter] == 'external') }) do
|
||||
= link_to admin_users_path(filter: 'external') do
|
||||
External
|
||||
%small.badge= number_with_delimiter(User.external.count)
|
||||
= nav_link(html_options: { class: ('active' if params[:filter] == 'blocked') }) do
|
||||
= nav_link(html_options: { class: active_when(params[:filter] == 'blocked') }) do
|
||||
= link_to admin_users_path(filter: "blocked") do
|
||||
Blocked
|
||||
%small.badge= number_with_delimiter(User.blocked.count)
|
||||
= nav_link(html_options: { class: ('active' if params[:filter] == 'wop') }) do
|
||||
= nav_link(html_options: { class: active_when(params[:filter] == 'wop') }) do
|
||||
= link_to admin_users_path(filter: "wop") do
|
||||
Without projects
|
||||
%small.badge= number_with_delimiter(User.without_projects.count)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
.top-area
|
||||
%ul.nav-links
|
||||
%li{ class: ("active" unless params[:filter]) }>
|
||||
%li{ class: active_when(params[:filter].nil?) }>
|
||||
= link_to activity_dashboard_path, class: 'shortcuts-activity', data: {placement: 'right'} do
|
||||
Your Projects
|
||||
%li{ class: ("active" if params[:filter] == 'starred') }>
|
||||
%li{ class: active_when(params[:filter] == 'starred') }>
|
||||
= link_to activity_dashboard_path(filter: 'starred'), data: {placement: 'right'} do
|
||||
Starred Projects
|
||||
|
|
|
@ -4,15 +4,13 @@
|
|||
- if current_user.todos.any?
|
||||
.top-area
|
||||
%ul.nav-links
|
||||
- todo_pending_active = ('active' if params[:state].blank? || params[:state] == 'pending')
|
||||
%li{ class: "todos-pending #{todo_pending_active}" }>
|
||||
%li.todos-pending{ class: active_when(params[:state].blank? || params[:state] == 'pending') }>
|
||||
= link_to todos_filter_path(state: 'pending') do
|
||||
%span
|
||||
To do
|
||||
%span.badge
|
||||
= number_with_delimiter(todos_pending_count)
|
||||
- todo_done_active = ('active' if params[:state] == 'done')
|
||||
%li{ class: "todos-done #{todo_done_active}" }>
|
||||
%li.todos-done{ class: active_when(params[:state] == 'done') }>
|
||||
= link_to todos_filter_path(state: 'done') do
|
||||
%span
|
||||
Done
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
.login-body
|
||||
= render 'devise/sessions/new_crowd'
|
||||
- @ldap_servers.each_with_index do |server, i|
|
||||
.login-box.tab-pane{ id: "#{server['provider_name']}", role: 'tabpanel', class: (:active if i.zero? && !crowd_enabled?) }
|
||||
.login-box.tab-pane{ id: "#{server['provider_name']}", role: 'tabpanel', class: active_when(i.zero? && !crowd_enabled?) }
|
||||
.login-body
|
||||
= render 'devise/sessions/new_ldap', server: server
|
||||
- if signin_enabled?
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
%li.active
|
||||
= link_to "Crowd", "#crowd", 'data-toggle' => 'tab'
|
||||
- @ldap_servers.each_with_index do |server, i|
|
||||
%li{ class: (:active if i.zero? && !crowd_enabled?) }
|
||||
%li{ class: active_when(i.zero? && !crowd_enabled?) }
|
||||
= link_to server['label'], "##{server['provider_name']}", 'data-toggle' => 'tab'
|
||||
- if signin_enabled?
|
||||
%li
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
= link_to filter_projects_path(visibility_level: nil) do
|
||||
Any
|
||||
- Gitlab::VisibilityLevel.values.each do |level|
|
||||
%li{ class: (level.to_s == params[:visibility_level]) ? 'active' : 'light' }
|
||||
%li{ class: active_when(level.to_s == params[:visibility_level]) || 'light' }
|
||||
= link_to filter_projects_path(visibility_level: level) do
|
||||
= visibility_level_icon(level)
|
||||
= visibility_level_label(level)
|
||||
|
@ -34,7 +34,7 @@
|
|||
Any
|
||||
|
||||
- @tags.each do |tag|
|
||||
%li{ class: (tag.name == params[:tag]) ? 'active' : 'light' }
|
||||
%li{ class: active_when(tag.name == params[:tag]) || 'light' }
|
||||
= link_to filter_projects_path(tag: tag.name) do
|
||||
= icon('tag')
|
||||
= tag.name
|
||||
|
|
|
@ -6,5 +6,5 @@
|
|||
-# total_pages: total number of pages
|
||||
-# per_page: number of items to fetch per page
|
||||
-# remote: data-remote
|
||||
%li{ class: "page#{' active' if page.current?}#{' sibling' if page.next? || page.prev?}" }
|
||||
%li.page{ class: [active_when(page.current?), ('sibling' if page.next? || page.prev?)] }
|
||||
= link_to page, url, { remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil }
|
||||
|
|
|
@ -5,23 +5,23 @@
|
|||
%div{ class: container_class }
|
||||
.top-area
|
||||
%ul.nav-links
|
||||
%li{ class: ('active' if @scope.nil?) }>
|
||||
%li{ class: active_when(@scope.nil?) }>
|
||||
= link_to project_pipelines_path(@project) do
|
||||
All
|
||||
%span.badge.js-totalbuilds-count
|
||||
= number_with_delimiter(@pipelines_count)
|
||||
|
||||
%li{ class: ('active' if @scope == 'running') }>
|
||||
%li{ class: active_when(@scope == 'running') }>
|
||||
= link_to project_pipelines_path(@project, scope: :running) do
|
||||
Running
|
||||
%span.badge.js-running-count
|
||||
= number_with_delimiter(@running_or_pending_count)
|
||||
|
||||
%li{ class: ('active' if @scope == 'branches') }>
|
||||
%li{ class: active_when(@scope == 'branches') }>
|
||||
= link_to project_pipelines_path(@project, scope: :branches) do
|
||||
Branches
|
||||
|
||||
%li{ class: ('active' if @scope == 'tags') }>
|
||||
%li{ class: active_when(@scope == 'tags') }>
|
||||
= link_to project_pipelines_path(@project, scope: :tags) do
|
||||
Tags
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
%li{ class: params[:id] == wiki_page.slug ? 'active' : '' }
|
||||
%li{ class: active_when(params[:id] == wiki_page.slug) }
|
||||
= link_to namespace_project_wiki_path(@project.namespace, @project, wiki_page) do
|
||||
= wiki_page.title.capitalize
|
||||
|
|
|
@ -1,70 +1,70 @@
|
|||
%ul.nav-links.search-filter
|
||||
- if @project
|
||||
%li{ class: ("active" if @scope == 'blobs') }
|
||||
%li{ class: active_when(@scope == 'blobs') }
|
||||
= link_to search_filter_path(scope: 'blobs') do
|
||||
Code
|
||||
%span.badge
|
||||
= @search_results.blobs_count
|
||||
%li{ class: ("active" if @scope == 'issues') }
|
||||
%li{ class: active_when(@scope == 'issues') }
|
||||
= link_to search_filter_path(scope: 'issues') do
|
||||
Issues
|
||||
%span.badge
|
||||
= @search_results.issues_count
|
||||
%li{ class: ("active" if @scope == 'merge_requests') }
|
||||
%li{ class: active_when(@scope == 'merge_requests') }
|
||||
= link_to search_filter_path(scope: 'merge_requests') do
|
||||
Merge requests
|
||||
%span.badge
|
||||
= @search_results.merge_requests_count
|
||||
%li{ class: ("active" if @scope == 'milestones') }
|
||||
%li{ class: active_when(@scope == 'milestones') }
|
||||
= link_to search_filter_path(scope: 'milestones') do
|
||||
Milestones
|
||||
%span.badge
|
||||
= @search_results.milestones_count
|
||||
%li{ class: ("active" if @scope == 'notes') }
|
||||
%li{ class: active_when(@scope == 'notes') }
|
||||
= link_to search_filter_path(scope: 'notes') do
|
||||
Comments
|
||||
%span.badge
|
||||
= @search_results.notes_count
|
||||
%li{ class: ("active" if @scope == 'wiki_blobs') }
|
||||
%li{ class: active_when(@scope == 'wiki_blobs') }
|
||||
= link_to search_filter_path(scope: 'wiki_blobs') do
|
||||
Wiki
|
||||
%span.badge
|
||||
= @search_results.wiki_blobs_count
|
||||
%li{ class: ("active" if @scope == 'commits') }
|
||||
%li{ class: active_when(@scope == 'commits') }
|
||||
= link_to search_filter_path(scope: 'commits') do
|
||||
Commits
|
||||
%span.badge
|
||||
= @search_results.commits_count
|
||||
|
||||
- elsif @show_snippets
|
||||
%li{ class: ("active" if @scope == 'snippet_blobs') }
|
||||
%li{ class: active_when(@scope == 'snippet_blobs') }
|
||||
= link_to search_filter_path(scope: 'snippet_blobs', snippets: true, group_id: nil, project_id: nil) do
|
||||
Snippet Contents
|
||||
%span.badge
|
||||
= @search_results.snippet_blobs_count
|
||||
%li{ class: ("active" if @scope == 'snippet_titles') }
|
||||
%li{ class: active_when(@scope == 'snippet_titles') }
|
||||
= link_to search_filter_path(scope: 'snippet_titles', snippets: true, group_id: nil, project_id: nil) do
|
||||
Titles and Filenames
|
||||
%span.badge
|
||||
= @search_results.snippet_titles_count
|
||||
|
||||
- else
|
||||
%li{ class: ("active" if @scope == 'projects') }
|
||||
%li{ class: active_when(@scope == 'projects') }
|
||||
= link_to search_filter_path(scope: 'projects') do
|
||||
Projects
|
||||
%span.badge
|
||||
= @search_results.projects_count
|
||||
%li{ class: ("active" if @scope == 'issues') }
|
||||
%li{ class: active_when(@scope == 'issues') }
|
||||
= link_to search_filter_path(scope: 'issues') do
|
||||
Issues
|
||||
%span.badge
|
||||
= @search_results.issues_count
|
||||
%li{ class: ("active" if @scope == 'merge_requests') }
|
||||
%li{ class: active_when(@scope == 'merge_requests') }
|
||||
= link_to search_filter_path(scope: 'merge_requests') do
|
||||
Merge requests
|
||||
%span.badge
|
||||
= @search_results.merge_requests_count
|
||||
%li{ class: ("active" if @scope == 'milestones') }
|
||||
%li{ class: active_when(@scope == 'milestones') }
|
||||
= link_to search_filter_path(scope: 'milestones') do
|
||||
Milestones
|
||||
%span.badge
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
%ul.nav-links
|
||||
%li{ class: ('active' if scope.nil?) }>
|
||||
%li{ class: active_when(scope.nil?) }>
|
||||
= link_to build_path_proc.call(nil) do
|
||||
All
|
||||
%span.badge.js-totalbuilds-count
|
||||
= number_with_delimiter(all_builds.count(:id))
|
||||
|
||||
%li{ class: ('active' if scope == 'pending') }>
|
||||
%li{ class: active_when(scope == 'pending') }>
|
||||
= link_to build_path_proc.call('pending') do
|
||||
Pending
|
||||
%span.badge
|
||||
= number_with_delimiter(all_builds.pending.count(:id))
|
||||
|
||||
%li{ class: ('active' if scope == 'running') }>
|
||||
%li{ class: active_when(scope == 'running') }>
|
||||
= link_to build_path_proc.call('running') do
|
||||
Running
|
||||
%span.badge
|
||||
= number_with_delimiter(all_builds.running.count(:id))
|
||||
|
||||
%li{ class: ('active' if scope == 'finished') }>
|
||||
%li{ class: active_when(scope == 'finished') }>
|
||||
= link_to build_path_proc.call('finished') do
|
||||
Finished
|
||||
%span.badge
|
||||
|
|
|
@ -3,23 +3,23 @@
|
|||
- issuables = @issues || @merge_requests
|
||||
|
||||
%ul.nav-links.issues-state-filters
|
||||
%li{ class: ("active" if params[:state] == 'opened') }>
|
||||
%li{ class: active_when(params[:state] == 'opened') }>
|
||||
= link_to page_filter_path(state: 'opened', label: true), id: 'state-opened', title: "Filter by #{page_context_word} that are currently opened." do
|
||||
#{issuables_state_counter_text(type, :opened)}
|
||||
|
||||
- if type == :merge_requests
|
||||
%li{ class: ("active" if params[:state] == 'merged') }>
|
||||
%li{ class: active_when(params[:state] == 'merged') }>
|
||||
= link_to page_filter_path(state: 'merged', label: true), id: 'state-merged', title: 'Filter by merge requests that are currently merged.' do
|
||||
#{issuables_state_counter_text(type, :merged)}
|
||||
|
||||
%li{ class: ("active" if params[:state] == 'closed') }>
|
||||
%li{ class: active_when(params[:state] == 'closed') }>
|
||||
= link_to page_filter_path(state: 'closed', label: true), id: 'state-closed', title: 'Filter by merge requests that are currently closed and unmerged.' do
|
||||
#{issuables_state_counter_text(type, :closed)}
|
||||
- else
|
||||
%li{ class: ("active" if params[:state] == 'closed') }>
|
||||
%li{ class: active_when(params[:state] == 'closed') }>
|
||||
= link_to page_filter_path(state: 'closed', label: true), id: 'state-all', title: 'Filter by issues that are currently closed.' do
|
||||
#{issuables_state_counter_text(type, :closed)}
|
||||
|
||||
%li{ class: ("active" if params[:state] == 'all') }>
|
||||
%li{ class: active_when(params[:state] == 'all') }>
|
||||
= link_to page_filter_path(state: 'all', label: true), id: 'state-all', title: "Show all #{page_context_word}." do
|
||||
#{issuables_state_counter_text(type, :all)}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
- include_private = local_assigns.fetch(:include_private, false)
|
||||
|
||||
.nav-links.snippet-scope-menu
|
||||
%li{ class: ("active" unless params[:scope]) }
|
||||
%li{ class: active_when(params[:scope].nil?) }
|
||||
= link_to subject_snippets_path(subject) do
|
||||
All
|
||||
%span.badge
|
||||
|
@ -12,19 +12,19 @@
|
|||
= subject.snippets.public_and_internal.count
|
||||
|
||||
- if include_private
|
||||
%li{ class: ("active" if params[:scope] == "are_private") }
|
||||
%li{ class: active_when(params[:scope] == "are_private") }
|
||||
= link_to subject_snippets_path(subject, scope: 'are_private') do
|
||||
Private
|
||||
%span.badge
|
||||
= subject.snippets.are_private.count
|
||||
|
||||
%li{ class: ("active" if params[:scope] == "are_internal") }
|
||||
%li{ class: active_when(params[:scope] == "are_internal") }
|
||||
= link_to subject_snippets_path(subject, scope: 'are_internal') do
|
||||
Internal
|
||||
%span.badge
|
||||
= subject.snippets.are_internal.count
|
||||
|
||||
%li{ class: ("active" if params[:scope] == "are_public") }
|
||||
%li{ class: active_when(params[:scope] == "are_public") }
|
||||
= link_to subject_snippets_path(subject, scope: 'are_public') do
|
||||
Public
|
||||
%span.badge
|
||||
|
|
|
@ -265,4 +265,9 @@ describe ApplicationHelper do
|
|||
expect(helper.render_markup('foo.adoc', content)).to eq('NOEL')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#active_when' do
|
||||
it { expect(helper.active_when(true)).to eq('active') }
|
||||
it { expect(helper.active_when(false)).to eq(nil) }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue