overleaf-cep/services/web/app/views/layout/navbar-marketing-bootstrap-5.pug
Rebeka Dekany 7c97cbbfe4 Improve landmarks on the Project dashboard and Editor pages (#27401)
* Improve landmarks for the Project Dasbhboard

* Improve landmarks for the IDE page

* Improve landmarks for the new redesigned IDE page

* Sort locales

* Fix typo OlButtonToolbar -> OLButtonToolbar

* Update project navbar translation

* Update labels

* Redundant main landmark

* Fix failing test

* Descriptive name for the rails tab

* Header should not be in a button

* Update translation to Account and help

* Update translation to Project categories and tags

* Add explanations

* Show landmark for the survey widget when it's rendered

* Suggestions for nav stretch/scroll/borders

* Source format

---------

Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>
GitOrigin-RevId: d05a738e782d2edb229529aadf92b9004dfd973a
2025-07-29 08:05:16 +00:00

212 lines
8 KiB
Text

include ../_mixins/navbar
include ../_mixins/material_symbol
nav.navbar.navbar-default.navbar-main.navbar-expand-lg(
class={
'website-redesign-navbar': isWebsiteRedesign,
}
aria-label=translate('primary')
)
.container-fluid.navbar-container
.navbar-header
if settings.nav.custom_logo
a.navbar-brand(
href='/'
aria-label=settings.appName
style='background-image:url("' + settings.nav.custom_logo + '")'
)
else if nav.title
a.navbar-title(href='/' aria-label=settings.appName) #{nav.title}
else
a.navbar-brand(href='/' aria-label=settings.appName)
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on')
if enableUpgradeButton
a.btn.btn-primary.me-2.d-md-none(
href='/user/subscription/plans'
event-tracking='upgrade-button-click'
event-tracking-mb='true'
event-tracking-label='upgrade'
event-tracking-trigger='click'
event-segmentation={source: 'dashboard-top', projectDashboardReact: 'enabled', isDashboardSidebarHidden: 'true', isScreenWidthLessThan768px: 'true'}
) #{translate("upgrade")}
- var canDisplayAdminMenu = hasAdminAccess()
- var canDisplayAdminRedirect = canRedirectToAdminDomain()
- var canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || (getSessionUser() && getSessionUser().staffAccess && (getSessionUser().staffAccess.splitTestMetrics || getSessionUser().staffAccess.splitTestManagement)))
- var canDisplaySurveyMenu = hasFeature('saas') && canDisplayAdminMenu
- var canDisplayScriptLogMenu = hasFeature('saas') && canDisplayAdminMenu
if typeof suppressNavbarRight === 'undefined'
button#navbar-toggle-btn.navbar-toggler.collapsed(
type='button'
data-bs-toggle='collapse'
data-bs-target='#navbar-main-collapse'
aria-controls='navbar-main-collapse'
aria-expanded='false'
aria-label='Toggle ' + translate('navigation')
)
+material-symbol('menu')
#navbar-main-collapse.navbar-collapse.collapse
ul.nav.navbar-nav.navbar-right.ms-auto(role='menubar')
if canDisplayAdminMenu || canDisplayAdminRedirect || canDisplaySplitTestMenu
+nav-item.dropdown.subdued
button.dropdown-toggle(
aria-haspopup='true'
aria-expanded='false'
data-bs-toggle='dropdown'
role='menuitem'
event-tracking='menu-expand'
event-tracking-mb='true'
event-tracking-trigger='click'
event-segmentation={item: 'admin', location: 'top-menu'}
)
| Admin
+dropdown-menu.dropdown-menu-end
if canDisplayAdminMenu
+dropdown-menu-link-item(href='/admin') Manage Site
+dropdown-menu-link-item(href='/admin/user') Manage Users
+dropdown-menu-link-item(href='/admin/project') Project URL Lookup
if canDisplayAdminRedirect
+dropdown-menu-link-item(href=settings.adminUrl) Switch to Admin
if canDisplaySplitTestMenu
+dropdown-menu-link-item(href='/admin/split-test') Manage Feature Flags
if canDisplaySurveyMenu
+dropdown-menu-link-item(href='/admin/survey') Manage Surveys
if canDisplayScriptLogMenu
+dropdown-menu-link-item(href='/admin/script-logs') View Script Logs
// loop over header_extras
each item in nav.header_extras
-
if ((item.only_when_logged_in && getSessionUser())
|| (item.only_when_logged_out && (!getSessionUser()))
|| (!item.only_when_logged_out && !item.only_when_logged_in && !item.only_content_pages)
|| (item.only_content_pages && (typeof suppressNavContentLinks === "undefined" || !suppressNavContentLinks))
){
var showNavItem = true
} else {
var showNavItem = false
}
if showNavItem
if item.dropdown
+nav-item.dropdown(class=item.class)
button.dropdown-toggle(
aria-haspopup='true'
aria-expanded='false'
data-bs-toggle='dropdown'
role='menuitem'
event-tracking='menu-expand'
event-tracking-mb='true'
event-tracking-trigger='click'
event-segmentation={item: item.trackingKey, location: 'top-menu'}
)
| !{translate(item.text)}
+dropdown-menu.dropdown-menu-end
each child in item.dropdown
if child.divider
+dropdown-menu-divider
else if child.isContactUs
+dropdown-menu-link-item(
data-ol-open-contact-form-modal='contact-us'
data-bs-target='#contactUsModal'
href
data-bs-toggle='modal'
event-tracking='menu-click'
event-tracking-mb='true'
event-tracking-trigger='click'
event-segmentation={item: 'contact', location: 'top-menu'}
)
span
| #{translate("contact_us")}
else
if child.url
+dropdown-menu-link-item(
href=child.url
class=child.class
event-tracking='menu-click'
event-tracking-mb='true'
event-tracking-trigger='click'
event-segmentation={item: child.trackingKey, location: 'top-menu'}
) !{translate(child.text)}
else
+dropdown-menu-item
| !{translate(child.text)}
else
+nav-item(class=item.class)
if item.url
+nav-link(
href=item.url
class=item.class
event-tracking='menu-click'
event-tracking-mb='true'
event-tracking-trigger='click'
event-segmentation={item: item.trackingKey, location: 'top-menu'}
) !{translate(item.text)}
else
| !{translate(item.text)}
// logged out
if !getSessionUser()
// register link
if hasFeature('registration-page')
+nav-item.primary
+nav-link(
href='/register'
event-tracking='menu-click'
event-tracking-action='clicked'
event-tracking-trigger='click'
event-tracking-mb='true'
event-segmentation={page: currentUrl, item: 'register', location: 'top-menu'}
) #{translate('sign_up')}
// login link
+nav-item
+nav-link(
href='/login'
event-tracking='menu-click'
event-tracking-action='clicked'
event-tracking-trigger='click'
event-tracking-mb='true'
event-segmentation={page: currentUrl, item: 'login', location: 'top-menu'}
) #{translate('log_in')}
// projects link and account menu
if getSessionUser()
+nav-item
+nav-link(href='/project') #{translate('Projects')}
+nav-item.dropdown
button.dropdown-toggle(
aria-haspopup='true'
aria-expanded='false'
data-bs-toggle='dropdown'
role='menuitem'
event-tracking='menu-expand'
event-tracking-mb='true'
event-tracking-trigger='click'
event-segmentation={item: 'account', location: 'top-menu'}
)
| #{translate('Account')}
+dropdown-menu.dropdown-menu-end
+dropdown-menu-item
.disabled.dropdown-item #{getSessionUser().email}
+dropdown-menu-divider
+dropdown-menu-link-item(href='/user/settings') #{translate('account_settings')}
if nav.showSubscriptionLink
+dropdown-menu-link-item(href='/user/subscription') #{translate('subscription')}
+dropdown-menu-divider
+dropdown-menu-item
//-
The button is outside the form but still belongs to it via the form attribute. The reason to do
this is that if the button is inside the form, screen readers will not count it in the total
number of menu items.
button.btn-link.text-left.dropdown-menu-button.dropdown-item(
role='menuitem'
tabindex='-1'
form='logOutForm'
)
| #{translate('log_out')}
form(method='POST' action='/logout' id='logOutForm')
input(name='_csrf' type='hidden' value=csrfToken)