Skip to content

Fix mobile navbar and misc cleanups #25134

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 20 commits into from
Jun 9, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 67 additions & 78 deletions templates/base/head_navbar.tmpl
Original file line number Diff line number Diff line change
@@ -1,93 +1,88 @@
<nav class="ui container secondary stackable main menu" id="navbar" aria-label="{{.locale.Tr "aria.navbar"}}">
{{$notificationUnreadCount := 0}}
{{if .IsSigned}}
{{if .NotificationUnreadCount}}{{$notificationUnreadCount = call .NotificationUnreadCount}}{{end}}
{{end}}
<div class="item brand gt-sb">
{{$notificationUnreadCount := 0}}
{{if and .IsSigned .NotificationUnreadCount}}
{{$notificationUnreadCount = call .NotificationUnreadCount}}
{{end}}

<nav id="navbar" class="ui secondary stackable menu" aria-label="{{.locale.Tr "aria.navbar"}}">
<div class="item">
<!-- the logo -->
<a href="{{AppSubUrl}}/" aria-label="{{if .IsSigned}}{{.locale.Tr "dashboard"}}{{else}}{{.locale.Tr "home"}}{{end}}">
<img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{.locale.Tr "logo"}}" aria-hidden="true">
</a>
<div class="gt-df gt-ac">

<!-- mobile right menu, it must be here because in mobile view, each item is a flex column, the first item is a full row column -->
<div class="ui secondary menu navbar-mobile-right gt-gap-2">
{{if .IsSigned}}
<a href="{{AppSubUrl}}/notifications" class="mobile-only gt-mr-4 gt-mt-3" data-tooltip-content="{{.locale.Tr "notifications"}}" aria-label="{{.locale.Tr "notifications"}}">
<span class="fitted item">
<a class="item gt-mx-0 gt-p-3" href="{{AppSubUrl}}/notifications" data-tooltip-content="{{.locale.Tr "notifications"}}" aria-label="{{.locale.Tr "notifications"}}">
<div class="gt-relative">
{{svg "octicon-bell"}}
<span class="notification_count{{if not $notificationUnreadCount}} gt-hidden{{end}}">
{{$notificationUnreadCount}}
</span>
</span>
<span class="notification_count{{if not $notificationUnreadCount}} gt-hidden{{end}}">{{$notificationUnreadCount}}</span>
</div>
</a>
{{end}}
<button class="ui icon button mobile-only" id="navbar-expand-toggle">
{{svg "octicon-three-bars"}}
</button>
<button class="item ui icon mini button gt-p-3 gt-m-0" id="navbar-expand-toggle">{{svg "octicon-three-bars"}}</button>
</div>
</div>

<!-- navbar links -->
{{if and .IsSigned .MustChangePassword}}
{{/* No links */}}
{{else if .IsSigned}}
{{if not .UnitIssuesGlobalDisabled}}
<a class="item {{if .PageIsIssues}}active{{end}}" href="{{AppSubUrl}}/issues">{{.locale.Tr "issues"}}</a>
<a class="item{{if .PageIsIssues}} active{{end}}" href="{{AppSubUrl}}/issues">{{.locale.Tr "issues"}}</a>
{{end}}
{{if not .UnitPullsGlobalDisabled}}
<a class="item {{if .PageIsPulls}}active{{end}}" href="{{AppSubUrl}}/pulls">{{.locale.Tr "pull_requests"}}</a>
<a class="item{{if .PageIsPulls}} active{{end}}" href="{{AppSubUrl}}/pulls">{{.locale.Tr "pull_requests"}}</a>
{{end}}
{{if not (and .UnitIssuesGlobalDisabled .UnitPullsGlobalDisabled)}}
{{if .ShowMilestonesDashboardPage}}<a class="item {{if .PageIsMilestonesDashboard}}active{{end}}" href="{{AppSubUrl}}/milestones">{{.locale.Tr "milestones"}}</a>{{end}}
{{if .ShowMilestonesDashboardPage}}
<a class="item{{if .PageIsMilestonesDashboard}} active{{end}}" href="{{AppSubUrl}}/milestones">{{.locale.Tr "milestones"}}</a>
{{end}}
{{end}}
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.locale.Tr "explore"}}</a>
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.locale.Tr "explore"}}</a>
{{else if .IsLandingPageOrganizations}}
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/organizations">{{.locale.Tr "explore"}}</a>
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/organizations">{{.locale.Tr "explore"}}</a>
{{else}}
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.locale.Tr "explore"}}</a>
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.locale.Tr "explore"}}</a>
{{end}}

{{template "custom/extra_links" .}}

{{/* TODO
<div class="item">
<div class="ui icon input">
<input class="searchbox" type="text" placeholder="{{.locale.Tr "search_project"}}">
<i class="icon gt-df gt-ac gt-jc">{{svg "octicon-search" 16}}</i>
</div>
</div>
*/}}

{{if not .IsSigned}}
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">{{.locale.Tr "help"}}</a>
{{end}}

{{if and .IsSigned .MustChangePassword}}
<div class="right stackable menu">
<div class="ui dropdown jump item" tabindex="-1" data-tooltip-content="{{.locale.Tr "user_profile_and_more"}}">
<span class="text">
{{avatar $.Context .SignedUser 24 "tiny"}}
<span class="sr-only">{{.locale.Tr "user_profile_and_more"}}</span>
<span class="mobile-only">{{.SignedUser.Name}}</span>
<span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down"}}</span>
<!-- the full dropdown menus -->
<div class="right menu">
{{if and .IsSigned .MustChangePassword}}
<div class="ui dropdown jump item" data-tooltip-content="{{.locale.Tr "user_profile_and_more"}}">
<span class="text gt-df gt-ac">
{{avatar $.Context .SignedUser 24 "gt-mr-2"}}
<span class="mobile-only gt-ml-2">{{.SignedUser.Name}}</span>
<span class="not-mobile">{{svg "octicon-triangle-down"}}</span>
</span>
<div class="menu user-menu" tabindex="-1">
<div class="menu user-menu">
<div class="ui header">
{{.locale.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong>
</div>

<div class="divider"></div>
<a class="item link-action" href data-url="{{AppSubUrl}}/user/logout" data-redirect="{{AppSubUrl}}/">
{{svg "octicon-sign-out"}}
{{.locale.Tr "sign_out"}}<!-- Sign Out -->
{{.locale.Tr "sign_out"}}
</a>
</div><!-- end content avatar menu -->
</div><!-- end dropdown avatar menu -->
</div>
{{else if .IsSigned}}
<div class="right stackable menu gt-mr-4">
{{else if .IsSigned}}
{{if EnableTimetracking}}
<a class="active-stopwatch-trigger item ui gt-mx-0{{if not .ActiveStopwatch}} gt-hidden{{end}}" href="{{.ActiveStopwatch.IssueLink}}">
<span class="fitted gt-relative">
<a class="active-stopwatch-trigger item ui gt-mx-0{{if not .ActiveStopwatch}} gt-hidden{{end}}" href="{{.ActiveStopwatch.IssueLink}}" title="{{.locale.Tr "active_stopwatch"}}">
<div class="gt-relative">
{{svg "octicon-stopwatch"}}
<span class="header-stopwatch-dot"></span>
<span class="sr-mobile-only">{{.locale.Tr "active_stopwatch"}}</span>
</span>
</div>
<span class="mobile-only gt-ml-2">{{.locale.Tr "active_stopwatch"}}</span>
</a>
<div class="active-stopwatch-popup tippy-target">
<div class="active-stopwatch-popup tippy-target gt-p-3">
<div class="gt-df gt-ac">
<a class="stopwatch-link gt-df gt-ac" href="{{.ActiveStopwatch.IssueLink}}">
{{svg "octicon-issue-opened" 16 "gt-mr-3"}}
@@ -100,15 +95,15 @@
{{.CsrfTokenHtml}}
<button
type="submit"
class="ui button mini compact basic icon fitted"
class="ui button mini compact basic icon"
data-tooltip-content="{{.locale.Tr "repo.issues.stop_tracking"}}"
>{{svg "octicon-square-fill"}}</button>
</form>
<form class="stopwatch-cancel" method="POST" action="{{.ActiveStopwatch.IssueLink}}/times/stopwatch/cancel">
{{.CsrfTokenHtml}}
<button
type="submit"
class="ui button mini compact basic icon fitted"
class="ui button mini compact basic icon"
data-tooltip-content="{{.locale.Tr "repo.issues.cancel_tracking"}}"
>{{svg "octicon-trash"}}</button>
</form>
@@ -117,53 +112,50 @@
{{end}}

<a href="{{AppSubUrl}}/notifications" class="item not-mobile gt-mx-0" data-tooltip-content="{{.locale.Tr "notifications"}}" aria-label="{{.locale.Tr "notifications"}}">
<span class="fitted item">
<div class="gt-relative">
{{svg "octicon-bell"}}
<span class="notification_count{{if not $notificationUnreadCount}} gt-hidden{{end}}">
{{$notificationUnreadCount}}
</span>
</span>
<span class="notification_count{{if not $notificationUnreadCount}} gt-hidden{{end}}">{{$notificationUnreadCount}}</span>
</div>
</a>

<div class="ui dropdown jump item gt-mx-0 gt-pr-3" data-tooltip-content="{{.locale.Tr "create_new"}}">
<span class="text">
<span class="fitted">{{svg "octicon-plus"}}</span>
<span class="sr-mobile-only">{{.locale.Tr "create_new"}}</span>
<span class="fitted not-mobile">{{svg "octicon-triangle-down"}}</span>
{{svg "octicon-plus"}}
<span class="not-mobile">{{svg "octicon-triangle-down"}}</span>
<span class="mobile-only">{{.locale.Tr "create_new"}}</span>
</span>
<div class="menu">
<a class="item" href="{{AppSubUrl}}/repo/create">
<span class="fitted">{{svg "octicon-plus"}}</span> {{.locale.Tr "new_repo"}}
{{svg "octicon-plus"}} {{.locale.Tr "new_repo"}}
</a>
{{if not .DisableMigrations}}
<a class="item" href="{{AppSubUrl}}/repo/migrate">
<span class="fitted">{{svg "octicon-repo-push"}}</span> {{.locale.Tr "new_migrate"}}
{{svg "octicon-repo-push"}} {{.locale.Tr "new_migrate"}}
</a>
{{end}}
{{if .SignedUser.CanCreateOrganization}}
<a class="item" href="{{AppSubUrl}}/org/create">
<span class="fitted">{{svg "octicon-organization"}}</span> {{.locale.Tr "new_org"}}
{{svg "octicon-organization"}} {{.locale.Tr "new_org"}}
</a>
{{end}}
</div><!-- end content create new menu -->
</div><!-- end dropdown menu create new -->

<div class="ui dropdown jump item gt-mx-0 gt-pr-3" data-tooltip-content="{{.locale.Tr "user_profile_and_more"}}">
<span class="text">
{{avatar $.Context .SignedUser 24 "tiny"}}
<span class="sr-only">{{.locale.Tr "user_profile_and_more"}}</span>
<span class="mobile-only">{{.SignedUser.Name}}</span>
<span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down"}}</span>
<span class="text gt-df gt-ac">
{{avatar $.Context .SignedUser 24 "gt-mr-2"}}
<span class="mobile-only gt-ml-2">{{.SignedUser.Name}}</span>
<span class="not-mobile">{{svg "octicon-triangle-down"}}</span>
</span>
<div class="menu user-menu" tabindex="-1">
<div class="menu user-menu">
<div class="ui header">
{{.locale.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong>
</div>

<div class="divider"></div>
<a class="item" href="{{.SignedUser.HomeLink}}">
{{svg "octicon-person"}}
{{.locale.Tr "your_profile"}}<!-- Your profile -->
{{.locale.Tr "your_profile"}}
</a>
{{if not .DisableStars}}
<a class="item" href="{{.SignedUser.HomeLink}}?tab=stars">
@@ -173,15 +165,15 @@
{{end}}
<a class="item" href="{{AppSubUrl}}/notifications/subscriptions">
{{svg "octicon-bell"}}
{{.locale.Tr "notification.subscriptions"}}<!-- Subscriptions -->
{{.locale.Tr "notification.subscriptions"}}
</a>
<a class="{{if .PageIsUserSettings}}active {{end}}item" href="{{AppSubUrl}}/user/settings">
{{svg "octicon-tools"}}
{{.locale.Tr "your_settings"}}<!-- Your settings -->
{{.locale.Tr "your_settings"}}
</a>
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">
{{svg "octicon-question"}}
{{.locale.Tr "help"}}<!-- Help -->
{{.locale.Tr "help"}}
</a>
{{if .IsAdmin}}
<div class="divider"></div>
@@ -199,10 +191,7 @@
</a>
</div><!-- end content avatar menu -->
</div><!-- end dropdown avatar menu -->
</div><!-- end signed user right menu -->
{{else}}
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">{{.locale.Tr "help"}}</a>
<div class="right stackable menu">
{{else}}
{{if .ShowRegistrationButton}}
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up">
{{svg "octicon-person"}} {{.locale.Tr "register"}}
@@ -211,6 +200,6 @@
<a class="item{{if .PageIsSignIn}} active{{end}}" rel="nofollow" href="{{AppSubUrl}}/user/login{{if not .PageIsSignIn}}?redirect_to={{.CurrentURL}}{{end}}">
{{svg "octicon-sign-in"}} {{.locale.Tr "sign_in"}}
</a>
</div><!-- end anonymous user right menu -->
{{end}}
{{end}}
</div><!-- end full right menu -->
</nav>
2 changes: 1 addition & 1 deletion templates/org/home.tmpl
Original file line number Diff line number Diff line change
@@ -19,7 +19,7 @@
{{if .Org.Website}}<div class="item">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer me" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}
</div>
</div>
<div class="right stackable menu">
<div class="right menu">
<form method="post" action="{{.Link}}?action={{if $.IsFollowing}}unfollow{{else}}follow{{end}}&redirect_to={{$.Link}}">
{{$.CsrfTokenHtml}}
<button type="submit" class="ui basic button gt-mr-0">
1 change: 0 additions & 1 deletion templates/repo/settings/lfs_file_find.tmpl
Original file line number Diff line number Diff line change
@@ -29,7 +29,6 @@
<a class="ui primary sha label" href="{{$.RepoLink}}/commit/{{.String}}">{{ShortSha .String}}</a>
{{end}}
{{end}}
<div class="mobile-only"></div>
{{$.locale.Tr "repo.diff.commit"}}
<a class="ui primary sha label" href="{{$.RepoLink}}/commit/{{.SHA}}">{{ShortSha .SHA}}</a>
</td>
8 changes: 5 additions & 3 deletions templates/status/500.tmpl
Original file line number Diff line number Diff line change
@@ -15,14 +15,16 @@
</head>
<body>
<div class="full height">
<nav class="ui container secondary stackable main menu" id="navbar">
<nav class="ui secondary menu gt-border-secondary-bottom">
<div class="ui container gt-df">
<div class="item brand gt-f1">
<div class="item gt-f1">
<a href="{{AppSubUrl}}/" aria-label="{{.locale.Tr "home"}}">
<img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{.locale.Tr "logo"}}" aria-hidden="true">
</a>
</div>
<button class="item ui icon button">{{svg "octicon-three-bars"}}</button>{{/* a fake button to make the UI looks better*/}}
<div class="item">
<button class="ui icon button disabled">{{svg "octicon-three-bars"}}</button>{{/* a fake button to make the UI looks better*/}}
</div>
</div>
</nav>
<div role="main" class="page-content status-page-500">
2 changes: 1 addition & 1 deletion templates/user/dashboard/navbar.tmpl
Original file line number Diff line number Diff line change
@@ -77,7 +77,7 @@
{{end}}

{{if .ContextUser.IsOrganization}}
<div class="right stackable menu">
<div class="right menu">
<a class="{{if .PageIsNews}}active {{end}}item gt-ml-auto" href="{{.ContextUser.DashboardLink}}{{if .Team}}/{{PathEscape .Team.Name}}{{end}}">
{{svg "octicon-rss"}}&nbsp;{{.locale.Tr "activities"}}
</a>
4 changes: 2 additions & 2 deletions web_src/css/admin.css
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@
width: calc(100% - 245px);
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.admin dl.admin-dl-horizontal dd {
width: calc(100% - 185px);
}
@@ -40,7 +40,7 @@
white-space: nowrap;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.admin dl.admin-dl-horizontal dt {
width: 160px;
}
178 changes: 73 additions & 105 deletions web_src/css/base.css
Original file line number Diff line number Diff line change
@@ -930,7 +930,7 @@ img.ui.avatar,
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.page-content .ui.ui.ui.container:not(.fluid) {
width: calc(100vw - 16px);
max-width: calc(100vw - 16px);
@@ -950,46 +950,91 @@ img.ui.avatar,
margin: 0 !important;
}

#navbar .column .menu {
margin-top: 0;
#navbar a.item:hover {
background: var(--color-nav-hover-bg);
}

#navbar .navbar-mobile-right {
margin-left: auto;
}

#navbar .fitted .svg {
#navbar .navbar-mobile-right a.item:hover {
background: transparent;
}

#navbar .secondary.menu > .item > .svg,
#navbar .right.menu > .item > .svg {
margin-right: 0;
vertical-align: middle;
}

#navbar .searchbox {
background-color: var(--color-input-background) !important;
@media (max-width: 767.98px) {
/* hide all items */
#navbar .item {
display: none;
}
/* show the first navbar item (logo and its mobile right items) */
#navbar > .item:first-child {
display: flex;
padding-top: 5px;
padding-bottom: 5px;
}
#navbar .navbar-mobile-right > .item {
display: flex;
}
/* show items if the navbar is open */
#navbar.navbar-menu-open .item {
display: flex;
}
#navbar.navbar-menu-open > .item:first-child {
padding-bottom: 0;
}
}

#navbar .text .svg {
width: 16px;
text-align: center;
@media (min-width: 767.98px) {
#navbar .navbar-mobile-right,
#navbar .mobile-only {
display: none;
}
#navbar .right.menu {
padding-right: 1em;
}
}

#navbar a.item:hover {
background: var(--color-nav-hover-bg);
#navbar .navbar-mobile-right .item {
width: auto !important;
}

#navbar .dropdown .avatar {
margin-right: 0 !important;
#navbar a.item .notification_count {
color: var(--color-nav-bg);
padding: 0 3.75px;
font-size: 12px;
line-height: 12px;
font-weight: var(--font-weight-bold);
}

@media (max-width: 767px) {
#navbar:not(.shown) > *:not(:first-child) {
display: none;
}
#navbar a.item:hover .notification_count,
#navbar a.item:hover .header-stopwatch-dot {
border-color: var(--color-nav-hover-bg);
}

.right.stackable.menu {
/* responsive fix: this makes sure that the right menu when the page */
/* is on mobile view will have elements stacked on top of each other. */
/* no, stackable won't work on right menus. */
margin-left: auto;
#navbar a.item .notification_count,
#navbar a.item .header-stopwatch-dot {
background: var(--color-primary);
border: 2px solid var(--color-nav-bg);
position: absolute;
left: 6px;
top: -9px;
min-width: 17px;
min-height: 17px;
border-radius: 17px;
display: flex;
align-items: inherit;
flex-direction: inherit;
align-items: center;
justify-content: center;
}

#navbar .right.menu {
width: 100%;
justify-content: flex-end;
}

.ui.pagination.menu .active.item {
@@ -1444,7 +1489,7 @@ img.ui.avatar,
line-height: 20px;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.ui.pagination.menu .item:not(.active,.navigation),
.ui.pagination.menu .item.navigation span.navigation_label {
display: none;
@@ -1518,56 +1563,13 @@ img.ui.avatar,
text-align: center;
}

/* Conditional display */
@media (min-width: 768px) {
.mobile-only,
.ui.button.mobile-only {
display: none !important;
}

/* has the same behaviour of sr-only, hiding the content for */
/* non-screenreaders, but is shown on mobile devices. */
.sr-mobile-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
/* double selector so it wins over .gt-df etc */
.not-mobile.not-mobile {
display: none !important;
}
}

/* Accessibility for screen readers */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}

.sr-only-focusable:active,
.sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
margin: 0;
overflow: visible;
clip: auto;
}

.ui.menu.new-menu {
margin-bottom: 15px;
background: var(--color-header-wrapper);
@@ -1602,7 +1604,7 @@ img.ui.avatar,
margin-bottom: 0 !important; /* reset fomantic's margin, because the active menu has special bottom border */
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.ui.menu.new-menu .item {
width: auto !important;
}
@@ -2117,40 +2119,6 @@ a.ui.basic.label:hover {
margin-top: 1rem;
}

.header-stopwatch-dot {
position: absolute;
left: 8px;
top: -8px;
width: 13px;
height: 13px;
background: var(--color-primary);
border: 2px solid var(--color-nav-bg);
border-radius: 100%;
}

.notification_count {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 6px;
top: -8px;
min-width: 17px;
min-height: 17px;
background: var(--color-primary);
border: 2px solid var(--color-nav-bg);
color: var(--color-nav-bg);
border-radius: 17px;
padding: 0 3.5px;
font-size: 12px;
line-height: 12px;
font-weight: var(--font-weight-bold);
}

#navbar a.item:hover .notification_count {
border-color: var(--color-nav-hover-bg);
}

.rss-icon {
display: inline-flex;
color: var(--color-text-light-1);
6 changes: 3 additions & 3 deletions web_src/css/dashboard.css
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@
width: 15%;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.dashboard.feeds .filter.menu .item .floating.label,
.dashboard.issues .filter.menu .item .floating.label {
top: 10px;
@@ -60,7 +60,7 @@
left: auto !important;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.dashboard.feeds .filter.menu,
.dashboard.issues .filter.menu {
width: 100%;
@@ -90,7 +90,7 @@
max-width: 100%;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.dashboard .dashboard-navbar .ui.dropdown > .menu {
position: static;
}
14 changes: 7 additions & 7 deletions web_src/css/form.css
Original file line number Diff line number Diff line change
@@ -197,7 +197,7 @@ textarea:focus,
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
#create-page-form form .optional .title {
margin-left: 15px;
}
@@ -315,7 +315,7 @@ textarea:focus,
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.user.activate form .optional .title,
.user.forgot.password form .optional .title,
.user.reset.password form .optional .title,
@@ -353,7 +353,7 @@ textarea:focus,
width: 200px;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.user.activate form .inline.field > label,
.user.forgot.password form .inline.field > label,
.user.reset.password form .inline.field > label,
@@ -449,7 +449,7 @@ textarea:focus,
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.new.repo form .optional .title,
.repository.new.migrate form .optional .title,
.repository.new.fork form .optional .title {
@@ -483,7 +483,7 @@ textarea:focus,
width: 50% !important;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.new.repo form label,
.repository.new.migrate form label,
.repository.new.fork form label,
@@ -516,7 +516,7 @@ textarea:focus,
width: 50% !important;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.new.repo .ui.form .selection.dropdown:not(.owner) {
width: 100% !important;
}
@@ -534,7 +534,7 @@ textarea:focus,
font-family: var(--fonts-monospace);
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.new.org .ui.form .field button,
.new.org .ui.form .field a {
margin-bottom: 1em;
2 changes: 1 addition & 1 deletion web_src/css/helpers.css
Original file line number Diff line number Diff line change
@@ -269,7 +269,7 @@ Gitea's private styles use `g-` prefix.
.gt-font-17 { font-size: 17px !important }
.gt-font-18 { font-size: 18px !important }

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.gt-db-small { display: block !important; }
.gt-w-100-small { width: 100% !important; }
.gt-js-small { justify-content: flex-start !important; }
2 changes: 1 addition & 1 deletion web_src/css/home.css
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
max-width: 220px;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.home .hero h1 {
font-size: 3.5em;
}
4 changes: 2 additions & 2 deletions web_src/css/modules/tippy.css
Original file line number Diff line number Diff line change
@@ -25,8 +25,8 @@
}

.tippy-box[data-theme="menu"] {
background-color: transparent;
color: var(--color-tooltip-text);
background-color: var(--color-menu);
color: var(--color-text);
}

.tippy-content {
6 changes: 3 additions & 3 deletions web_src/css/org.css
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
#create-page-form form .optional .title {
margin-left: 15px;
}
@@ -77,7 +77,7 @@
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.organization.new.org form .optional .title {
margin-left: 15px;
}
@@ -222,7 +222,7 @@
height: 60px;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.organization.teams #repo-top-segment {
height: 100px;
}
54 changes: 27 additions & 27 deletions web_src/css/repo.css
Original file line number Diff line number Diff line change
@@ -194,13 +194,13 @@
width: 320px;
}

@media (min-width: 768px) and (max-width: 991px) {
@media (min-width: 768px) and (max-width: 991.98px) {
.repository #clone-panel #repo-clone-url {
width: 200px;
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository #clone-panel #repo-clone-url {
width: 200px;
}
@@ -298,7 +298,7 @@
}
}

@media (min-width: 768px) and (max-width: 991px) {
@media (min-width: 768px) and (max-width: 991.98px) {
.repository.file.list #repo-files-table td.name {
max-width: 300px;
}
@@ -321,7 +321,7 @@
}
}

@media (min-width: 768px) and (max-width: 991px) {
@media (min-width: 768px) and (max-width: 991.98px) {
.repository.file.list #repo-files-table td.message {
max-width: 250px;
}
@@ -643,7 +643,7 @@
display: flex;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.view.issue .issue-title {
flex-direction: column;
}
@@ -939,7 +939,7 @@
border: 1px solid var(--color-light-border);
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.view.issue .comment-list .timeline-item .ui.segments {
margin-left: -2rem;
}
@@ -964,7 +964,7 @@
border-radius: var(--border-radius);
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.view.issue .comment-list .comment .content .form .button {
width: 100%;
margin: 0;
@@ -987,7 +987,7 @@
margin-bottom: -0.25rem;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.view.issue .comment-list .comment .merge-section .item-section {
align-items: flex-start;
flex-direction: column;
@@ -1133,7 +1133,7 @@
box-shadow: none;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.view.issue .comment-list {
padding: 1rem 0 !important; /* Important is required here to override existing fomantic styles. */
}
@@ -1597,7 +1597,7 @@
line-height: 30px;
}

@media (max-width: 991px) {
@media (max-width: 991.98px) {
.repository .diff-detail-box {
flex-direction: column;
align-items: flex-start;
@@ -1849,7 +1849,7 @@
}


@media (max-width: 991px) {
@media (max-width: 991.98px) {
.diff-file-box {
scroll-margin-top: 77px; /* match .repository .diff-detail-box */
}
@@ -1957,14 +1957,14 @@
display: inline-block;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.wiki .dividing.header .stackable.grid .button {
margin-top: 2px;
margin-bottom: 2px;
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.wiki #clone-panel #repo-clone-url {
width: 160px;
}
@@ -2265,7 +2265,7 @@
border-radius: 0;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository .repository-summary .segment.language-stats {
display: none;
}
@@ -2292,7 +2292,7 @@
width: 500px;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
#cite-repo-modal #citation-panel {
width: 100%;
}
@@ -2753,7 +2753,7 @@ tbody.commit-list {
display: inline-block;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
tr.commit-list {
width: 100%;
}
@@ -2766,7 +2766,7 @@ tbody.commit-list {
}
}

@media (min-width: 768px) and (max-width: 991px) {
@media (min-width: 768px) and (max-width: 991.98px) {
tr.commit-list {
width: 723px;
}
@@ -2862,7 +2862,7 @@ tbody.commit-list {
word-break: break-word;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repo-header + .container {
margin-top: 7px;
}
@@ -2876,7 +2876,7 @@ tbody.commit-list {
word-break: keep-all;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repo-buttons {
margin-top: 1em;
}
@@ -2923,7 +2923,7 @@ tbody.commit-list {
pointer-events: none !important;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repo-buttons .ui.labeled.button .svg {
display: none;
}
@@ -3021,7 +3021,7 @@ tbody.commit-list {
color: var(--color-primary);
}

@media (max-width: 991px) {
@media (max-width: 991.98px) {
#diff-file-tree {
display: none !important;
}
@@ -3098,7 +3098,7 @@ tbody.commit-list {
z-index: 7;
}

@media (max-width: 991px) {
@media (max-width: 991.98px) {
.ui.attached.header.diff-file-header.sticky-2nd-row {
top: 77px; /* match .repository .diff-detail-box */
}
@@ -3137,7 +3137,7 @@ tbody.commit-list {
overflow: hidden;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository-summary-language-stats {
height: auto;
}
@@ -3218,7 +3218,7 @@ tbody.commit-list {
box-shadow: 0 0.5rem 1rem var(--color-shadow) !important;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.file.list #repo-files-table .entry,
.repository.file.list #repo-files-table .commit-list {
align-items: center;
@@ -3340,13 +3340,13 @@ tbody.commit-list {
vertical-align: bottom !important;
}

@media (min-width: 768px) and (max-width: 991px) {
@media (min-width: 768px) and (max-width: 991.98px) {
.branch-dropdown-button {
max-width: 185px;
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.branch-dropdown-button {
max-width: 165px;
}
@@ -3380,7 +3380,7 @@ tbody.commit-list {
justify-content: flex-end;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.pr-status .status-details {
flex-direction: column;
align-items: flex-end;
2 changes: 1 addition & 1 deletion web_src/css/repo/linebutton.css
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@
position: absolute;
font-family: var(--fonts-regular);
left: 0;
transform: translateX(-70%);
transform: translateX(-50%);
cursor: pointer;
}

2 changes: 1 addition & 1 deletion web_src/css/repo/release-tag.css
Original file line number Diff line number Diff line change
@@ -119,7 +119,7 @@
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.repository.new.release .field button {
margin-bottom: 1em;
}
8 changes: 4 additions & 4 deletions web_src/css/review.css
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@
max-width: 820px;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.comment-code-cloud {
max-width: none;
padding: 0.75rem !important;
@@ -91,7 +91,7 @@
padding: 0;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.comment-code-cloud .comments .comment {
display: flex;
}
@@ -182,7 +182,7 @@
display: block;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.comment-code-cloud .button {
width: 100%;
margin: 0 !important;
@@ -252,7 +252,7 @@
scroll-margin-top: 99px;
}

@media (max-width: 991px) {
@media (max-width: 991.98px) {
.pull.files.diff .comment {
scroll-margin-top: 130px;
}
4 changes: 2 additions & 2 deletions web_src/css/user.css
Original file line number Diff line number Diff line change
@@ -48,13 +48,13 @@
height: auto;
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.user.profile .ui.card #profile-avatar img {
width: 30vw;
}
}

@media (max-width: 767px) {
@media (max-width: 767.98px) {
.user.profile .ui.card {
width: 100%;
}
2 changes: 0 additions & 2 deletions web_src/js/components/DashboardRepoList.vue
Original file line number Diff line number Diff line change
@@ -12,7 +12,6 @@
</div>
<a class="gt-df gt-ac muted" :href="subUrl + '/repo/create' + (isOrganization ? '?org=' + organizationId : '')" :data-tooltip-content="textNewRepo">
<svg-icon name="octicon-plus"/>
<span class="sr-only">{{ textNewRepo }}</span>
</a>
</h4>
<div class="ui attached segment repos-search">
@@ -121,7 +120,6 @@
</div>
<a class="gt-df gt-ac muted" v-if="canCreateOrganization" :href="subUrl + '/org/create'" :data-tooltip-content="textNewOrg">
<svg-icon name="octicon-plus"/>
<span class="sr-only">{{ textNewOrg }}</span>
</a>
</h4>
<div v-if="organizations.length" class="ui attached table segment gt-rounded-bottom">
20 changes: 8 additions & 12 deletions web_src/js/features/common-global.js
Original file line number Diff line number Diff line change
@@ -20,18 +20,14 @@ export function initGlobalFormDirtyLeaveConfirm() {
}

export function initHeadNavbarContentToggle() {
const content = $('#navbar');
const toggle = $('#navbar-expand-toggle');
let isExpanded = false;
toggle.on('click', () => {
isExpanded = !isExpanded;
if (isExpanded) {
content.addClass('shown');
toggle.addClass('active');
} else {
content.removeClass('shown');
toggle.removeClass('active');
}
const navbar = document.getElementById('navbar');
const btn = document.getElementById('navbar-expand-toggle');
if (!navbar || !btn) return;

btn.addEventListener('click', () => {
const isExpanded = btn.classList.contains('active');
navbar.classList.toggle('navbar-menu-open', !isExpanded);
btn.classList.toggle('active', !isExpanded);
});
}

7 changes: 6 additions & 1 deletion web_src/js/features/repo-code.js
Original file line number Diff line number Diff line change
@@ -108,10 +108,15 @@ function showLineButton() {

createTippy(btn, {
trigger: 'click',
hideOnClick: true,
content: menu,
placement: 'right-start',
role: 'menu',
interactive: 'true',
onShow: (tippy) => {
tippy.popper.addEventListener('click', () => {
tippy.hide();
}, {once: true});
}
});
}

1 change: 0 additions & 1 deletion web_src/js/features/repo-issue.js
Original file line number Diff line number Diff line change
@@ -469,7 +469,6 @@ export function initRepoPullRequestReview() {
content: $panel[0],
placement: 'bottom',
trigger: 'click',
role: 'menu',
maxWidth: 'none',
interactive: true,
hideOnClick: true,
4 changes: 3 additions & 1 deletion web_src/js/modules/tippy.js
Original file line number Diff line number Diff line change
@@ -27,7 +27,8 @@ export function createTippy(target, opts = {}) {
visibleInstances.add(instance);
},
arrow: `<svg width="16" height="7"><path d="m0 7 8-7 8 7Z" class="tippy-svg-arrow-outer"/><path d="m0 8 8-7 8 7Z" class="tippy-svg-arrow-inner"/></svg>`,
...(opts?.role && {theme: opts.role}),
role: 'menu', // HTML role attribute, only tooltips should use "tooltip"
theme: opts.role || 'menu', // CSS theme, we support either "tooltip" or "menu"
...opts,
});

@@ -68,6 +69,7 @@ function attachTooltip(target, content = null) {
content,
delay: 100,
role: 'tooltip',
theme: 'tooltip',
hideOnClick,
placement: target.getAttribute('data-tooltip-placement') || 'top-start',
...(target.getAttribute('data-tooltip-interactive') === 'true' ? {interactive: true, aria: {content: 'describedby', expanded: false}} : {}),