Merge branch 'scrollable-secondary-tabs' into 'master'
Fixed inner page tabs not being scrollable Closes #18853 See merge request !10204
This commit is contained in:
commit
ac67ce854f
11 changed files with 182 additions and 115 deletions
|
@ -11,8 +11,9 @@
|
|||
});
|
||||
};
|
||||
|
||||
$(function() {
|
||||
var $scrollingTabs = $('.scrolling-tabs');
|
||||
$(document).on('init.scrolling-tabs', () => {
|
||||
const $scrollingTabs = $('.scrolling-tabs').not('.is-initialized');
|
||||
$scrollingTabs.addClass('is-initialized');
|
||||
|
||||
hideEndFade($scrollingTabs);
|
||||
$(window).off('resize.nav').on('resize.nav', function() {
|
||||
|
|
|
@ -370,4 +370,6 @@ $(function () {
|
|||
new Aside();
|
||||
|
||||
gl.utils.initTimeagoTimeout();
|
||||
|
||||
$(document).trigger('init.scrolling-tabs');
|
||||
});
|
||||
|
|
|
@ -16,8 +16,12 @@ export default {
|
|||
},
|
||||
},
|
||||
|
||||
mounted() {
|
||||
$(document).trigger('init.scrolling-tabs');
|
||||
},
|
||||
|
||||
template: `
|
||||
<ul class="nav-links">
|
||||
<ul class="nav-links scrolling-tabs">
|
||||
<li
|
||||
class="js-pipelines-tab-all"
|
||||
:class="{ 'active': scope === 'all'}">
|
||||
|
|
|
@ -182,8 +182,14 @@ export default {
|
|||
<div :class="cssClass">
|
||||
|
||||
<div
|
||||
class="top-area"
|
||||
class="top-area scrolling-tabs-container inner-page-scroll-tabs"
|
||||
v-if="!isLoading && !shouldRenderEmptyState">
|
||||
<div class="fade-left">
|
||||
<i class="fa fa-angle-left" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="fade-right">
|
||||
<i class="fa fa-angle-right" aria-hidden="true"></i>
|
||||
</div>
|
||||
<navigation-tabs
|
||||
:scope="scope"
|
||||
:count="state.count"
|
||||
|
|
|
@ -476,3 +476,40 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.inner-page-scroll-tabs {
|
||||
position: relative;
|
||||
|
||||
.fade-right {
|
||||
@include fade(left, $white-light);
|
||||
right: 0;
|
||||
text-align: right;
|
||||
|
||||
.fa {
|
||||
right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.fade-left {
|
||||
@include fade(right, $white-light);
|
||||
left: 0;
|
||||
text-align: left;
|
||||
|
||||
.fa {
|
||||
left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.fade-right,
|
||||
.fade-left {
|
||||
top: 16px;
|
||||
bottom: auto;
|
||||
}
|
||||
|
||||
&.is-smaller {
|
||||
.fade-right,
|
||||
.fade-left {
|
||||
top: 11px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
= content_for :flash_message do
|
||||
= render 'shared/project_limit'
|
||||
.top-area
|
||||
%ul.nav-links
|
||||
.top-area.scrolling-tabs-container.inner-page-scroll-tabs
|
||||
.fade-left= icon('angle-left')
|
||||
.fade-right= icon('angle-right')
|
||||
%ul.nav-links.scrolling-tabs
|
||||
= nav_link(page: [dashboard_projects_path, root_path]) do
|
||||
= link_to dashboard_projects_path, title: 'Home', class: 'shortcuts-activity', data: {placement: 'right'} do
|
||||
Your projects
|
||||
|
|
|
@ -52,8 +52,10 @@
|
|||
= render 'award_emoji/awards_block', awardable: @merge_request, inline: true
|
||||
|
||||
.merge-request-tabs-holder{ class: ("js-tabs-affix" unless ENV['RAILS_ENV'] == 'test') }
|
||||
.merge-request-tabs-container
|
||||
%ul.merge-request-tabs.nav-links.no-top.no-bottom
|
||||
.merge-request-tabs-container.scrolling-tabs-container.inner-page-scroll-tabs
|
||||
.fade-left= icon('angle-left')
|
||||
.fade-right= icon('angle-right')
|
||||
%ul.merge-request-tabs.nav-links.scrolling-tabs
|
||||
%li.notes-tab
|
||||
= link_to namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: { target: 'div#notes', action: 'notes', toggle: 'tab' } do
|
||||
Discussion
|
||||
|
|
|
@ -1,71 +1,74 @@
|
|||
%ul.nav-links.search-filter
|
||||
- if @project
|
||||
%li{ class: active_when(@scope == 'blobs') }
|
||||
= link_to search_filter_path(scope: 'blobs') do
|
||||
Code
|
||||
%span.badge
|
||||
= @search_results.blobs_count
|
||||
%li{ class: active_when(@scope == 'issues') }
|
||||
= link_to search_filter_path(scope: 'issues') do
|
||||
Issues
|
||||
%span.badge
|
||||
= @search_results.issues_count
|
||||
%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_when(@scope == 'milestones') }
|
||||
= link_to search_filter_path(scope: 'milestones') do
|
||||
Milestones
|
||||
%span.badge
|
||||
= @search_results.milestones_count
|
||||
%li{ class: active_when(@scope == 'notes') }
|
||||
= link_to search_filter_path(scope: 'notes') do
|
||||
Comments
|
||||
%span.badge
|
||||
= @search_results.notes_count
|
||||
%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_when(@scope == 'commits') }
|
||||
= link_to search_filter_path(scope: 'commits') do
|
||||
Commits
|
||||
%span.badge
|
||||
= @search_results.commits_count
|
||||
.scrolling-tabs-container.inner-page-scroll-tabs.is-smaller
|
||||
.fade-left= icon('angle-left')
|
||||
.fade-right= icon('angle-right')
|
||||
%ul.nav-links.search-filter.scrolling-tabs
|
||||
- if @project
|
||||
%li{ class: active_when(@scope == 'blobs') }
|
||||
= link_to search_filter_path(scope: 'blobs') do
|
||||
Code
|
||||
%span.badge
|
||||
= @search_results.blobs_count
|
||||
%li{ class: active_when(@scope == 'issues') }
|
||||
= link_to search_filter_path(scope: 'issues') do
|
||||
Issues
|
||||
%span.badge
|
||||
= @search_results.issues_count
|
||||
%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_when(@scope == 'milestones') }
|
||||
= link_to search_filter_path(scope: 'milestones') do
|
||||
Milestones
|
||||
%span.badge
|
||||
= @search_results.milestones_count
|
||||
%li{ class: active_when(@scope == 'notes') }
|
||||
= link_to search_filter_path(scope: 'notes') do
|
||||
Comments
|
||||
%span.badge
|
||||
= @search_results.notes_count
|
||||
%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_when(@scope == 'commits') }
|
||||
= link_to search_filter_path(scope: 'commits') do
|
||||
Commits
|
||||
%span.badge
|
||||
= @search_results.commits_count
|
||||
|
||||
- elsif @show_snippets
|
||||
%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_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
|
||||
- elsif @show_snippets
|
||||
%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_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_when(@scope == 'projects') }
|
||||
= link_to search_filter_path(scope: 'projects') do
|
||||
Projects
|
||||
%span.badge
|
||||
= @search_results.projects_count
|
||||
%li{ class: active_when(@scope == 'issues') }
|
||||
= link_to search_filter_path(scope: 'issues') do
|
||||
Issues
|
||||
%span.badge
|
||||
= @search_results.issues_count
|
||||
%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_when(@scope == 'milestones') }
|
||||
= link_to search_filter_path(scope: 'milestones') do
|
||||
Milestones
|
||||
%span.badge
|
||||
= @search_results.milestones_count
|
||||
- else
|
||||
%li{ class: active_when(@scope == 'projects') }
|
||||
= link_to search_filter_path(scope: 'projects') do
|
||||
Projects
|
||||
%span.badge
|
||||
= @search_results.projects_count
|
||||
%li{ class: active_when(@scope == 'issues') }
|
||||
= link_to search_filter_path(scope: 'issues') do
|
||||
Issues
|
||||
%span.badge
|
||||
= @search_results.issues_count
|
||||
%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_when(@scope == 'milestones') }
|
||||
= link_to search_filter_path(scope: 'milestones') do
|
||||
Milestones
|
||||
%span.badge
|
||||
= @search_results.milestones_count
|
||||
|
|
|
@ -1,26 +1,29 @@
|
|||
%ul.nav-links.no-top.no-bottom
|
||||
- if milestone.is_a?(GlobalMilestone) || can?(current_user, :read_issue, @project)
|
||||
%li.active
|
||||
= link_to '#tab-issues', 'data-toggle' => 'tab', 'data-show' => '.tab-issues-buttons' do
|
||||
Issues
|
||||
%span.badge= milestone.issues_visible_to_user(current_user).size
|
||||
.scrolling-tabs-container.inner-page-scroll-tabs.is-smaller
|
||||
.fade-left= icon('angle-left')
|
||||
.fade-right= icon('angle-right')
|
||||
%ul.nav-links.scrolling-tabs
|
||||
- if milestone.is_a?(GlobalMilestone) || can?(current_user, :read_issue, @project)
|
||||
%li.active
|
||||
= link_to '#tab-issues', 'data-toggle' => 'tab', 'data-show' => '.tab-issues-buttons' do
|
||||
Issues
|
||||
%span.badge= milestone.issues_visible_to_user(current_user).size
|
||||
%li
|
||||
= link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do
|
||||
Merge Requests
|
||||
%span.badge= milestone.merge_requests.size
|
||||
- else
|
||||
%li.active
|
||||
= link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do
|
||||
Merge Requests
|
||||
%span.badge= milestone.merge_requests.size
|
||||
%li
|
||||
= link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do
|
||||
Merge Requests
|
||||
%span.badge= milestone.merge_requests.size
|
||||
- else
|
||||
%li.active
|
||||
= link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do
|
||||
Merge Requests
|
||||
%span.badge= milestone.merge_requests.size
|
||||
%li
|
||||
= link_to '#tab-participants', 'data-toggle' => 'tab' do
|
||||
Participants
|
||||
%span.badge= milestone.participants.count
|
||||
%li
|
||||
= link_to '#tab-labels', 'data-toggle' => 'tab' do
|
||||
Labels
|
||||
%span.badge= milestone.labels.count
|
||||
= link_to '#tab-participants', 'data-toggle' => 'tab' do
|
||||
Participants
|
||||
%span.badge= milestone.participants.count
|
||||
%li
|
||||
= link_to '#tab-labels', 'data-toggle' => 'tab' do
|
||||
Labels
|
||||
%span.badge= milestone.labels.count
|
||||
|
||||
- show_project_name = local_assigns.fetch(:show_project_name, false)
|
||||
- show_full_project_name = local_assigns.fetch(:show_full_project_name, false)
|
||||
|
|
|
@ -79,22 +79,25 @@
|
|||
%p.profile-user-bio
|
||||
= @user.bio
|
||||
|
||||
%ul.nav-links.center.user-profile-nav
|
||||
%li.js-activity-tab
|
||||
= link_to user_path, data: {target: 'div#activity', action: 'activity', toggle: 'tab'} do
|
||||
Activity
|
||||
%li.js-groups-tab
|
||||
= link_to user_groups_path, data: {target: 'div#groups', action: 'groups', toggle: 'tab'} do
|
||||
Groups
|
||||
%li.js-contributed-tab
|
||||
= link_to user_contributed_projects_path, data: {target: 'div#contributed', action: 'contributed', toggle: 'tab'} do
|
||||
Contributed projects
|
||||
%li.js-projects-tab
|
||||
= link_to user_projects_path, data: {target: 'div#projects', action: 'projects', toggle: 'tab'} do
|
||||
Personal projects
|
||||
%li.js-snippets-tab
|
||||
= link_to user_snippets_path, data: {target: 'div#snippets', action: 'snippets', toggle: 'tab'} do
|
||||
Snippets
|
||||
.scrolling-tabs-container
|
||||
.fade-left= icon('angle-left')
|
||||
.fade-right= icon('angle-right')
|
||||
%ul.nav-links.center.user-profile-nav.scrolling-tabs
|
||||
%li.js-activity-tab
|
||||
= link_to user_path, data: {target: 'div#activity', action: 'activity', toggle: 'tab'} do
|
||||
Activity
|
||||
%li.js-groups-tab
|
||||
= link_to user_groups_path, data: {target: 'div#groups', action: 'groups', toggle: 'tab'} do
|
||||
Groups
|
||||
%li.js-contributed-tab
|
||||
= link_to user_contributed_projects_path, data: {target: 'div#contributed', action: 'contributed', toggle: 'tab'} do
|
||||
Contributed projects
|
||||
%li.js-projects-tab
|
||||
= link_to user_projects_path, data: {target: 'div#projects', action: 'projects', toggle: 'tab'} do
|
||||
Personal projects
|
||||
%li.js-snippets-tab
|
||||
= link_to user_snippets_path, data: {target: 'div#snippets', action: 'snippets', toggle: 'tab'} do
|
||||
Snippets
|
||||
|
||||
%div{ class: container_class }
|
||||
- if @user == current_user && !show_user_callout?
|
||||
|
|
4
changelogs/unreleased/scrollable-secondary-tabs.yml
Normal file
4
changelogs/unreleased/scrollable-secondary-tabs.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Fixed tabs not scrolling on mobile
|
||||
merge_request:
|
||||
author:
|
Loading…
Reference in a new issue