Add consistent left nav sidebar across all pages

Convert repo_menu from hidden horizontal context bar to sidebar sections.
Add Navigate section with global links (Repos, Activity, Gists, Search,
My Account, PRs, Notifications, Admin). Sidebar now shows for all users
including anonymous.
This commit is contained in:
russell@unturf.com 2026-03-04 18:24:27 -05:00
parent ad02337045
commit ec33c57d29

View file

@ -34,15 +34,9 @@
<rhodecode-toast id="notifications"></rhodecode-toast> <rhodecode-toast id="notifications"></rhodecode-toast>
<div class="main page-with-sidebar"> <div class="main page-with-sidebar">
<%
not_anon = c.rhodecode_user.username != h.DEFAULT_USER
has_sidebar = hasattr(next, 'page_sidebar') or not_anon
%>
% if has_sidebar:
<nav class="page-sidebar" id="page-sidebar"> <nav class="page-sidebar" id="page-sidebar">
${self.page_sidebar()} ${self.page_sidebar()}
</nav> </nav>
% endif
<div class="page-content"> <div class="page-content">
${next.main()} ${next.main()}
</div> </div>
@ -123,6 +117,24 @@ can_create_repos = c.is_super_admin or c.can_create_repo
can_create_repo_groups = c.is_super_admin or c.can_create_repo_group can_create_repo_groups = c.is_super_admin or c.can_create_repo_group
%> %>
<div class="sidebar-section">
<h4 class="sidebar-heading">${_('Navigate')}</h4>
<ul class="sidebar-nav">
<li><a href="${h.route_path('home')}"><i class="icon-database"></i> ${_('Repositories')}</a></li>
<li><a href="${h.route_path('journal' if not_anon else 'journal_public')}"><i class="icon-file-text"></i> ${_('Activity')}</a></li>
<li><a href="${h.route_path('gists_show')}"><i class="icon-clipboard"></i> ${_('Gists')}</a></li>
<li><a href="${h.route_path('search')}"><i class="icon-search"></i> ${_('Search')}</a></li>
% if not_anon:
<li><a href="${h.route_path('my_account_profile')}"><i class="icon-user"></i> ${_('My Account')}</a></li>
<li><a href="${h.route_path('my_account_pullrequests')}"><i class="icon-request-pull"></i> ${_('Pull Requests')}</a></li>
<li><a href="${h.route_path('my_account_notifications')}"><i class="icon-comment"></i> ${_('Notifications')}</a></li>
% endif
% if c.is_super_admin or c.is_delegated_admin:
<li><a href="${h.route_path('admin_home')}"><i class="icon-cog"></i> ${_('Admin')}</a></li>
% endif
</ul>
</div>
% if not_anon: % if not_anon:
<div class="sidebar-section"> <div class="sidebar-section">
<h4 class="sidebar-heading">${_('Create')}</h4> <h4 class="sidebar-heading">${_('Create')}</h4>
@ -411,10 +423,7 @@ ${self.menu_bar_subnav()}
<%def name="repo_menu(active=None)"> <%def name="repo_menu(active=None)">
<% <%
## determine if we have "any" option available
can_lock = h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking can_lock = h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking
has_actions = can_lock
%> %>
% if c.rhodecode_db_repo.archived: % if c.rhodecode_db_repo.archived:
<div class="alert alert-warning text-center"> <div class="alert alert-warning text-center">
@ -422,66 +431,35 @@ ${self.menu_bar_subnav()}
</div> </div>
% endif % endif
<!--- REPO CONTEXT BAR --> <div class="sidebar-section">
<div id="context-bar"> <h4 class="sidebar-heading">${c.repo_name}</h4>
<div class="wrapper"> <ul class="sidebar-nav">
<li class="${h.is_active('summary', active)}"><a href="${h.route_path('repo_summary_explicit', repo_name=c.repo_name)}"><i class="icon-home"></i> ${_('Summary')}</a></li>
<div class="title"> <li class="${h.is_active('commits', active)}"><a href="${h.route_path('repo_commits', repo_name=c.repo_name)}"><i class="icon-history"></i> ${_('Commits')}</a></li>
${self.repo_page_title(c.rhodecode_db_repo)} <li class="${h.is_active('files', active)}"><a href="${h.repo_files_by_ref_url(c.repo_name, c.rhodecode_db_repo.repo_type, f_path='', ref_name=c.rhodecode_db_repo.landing_ref_name, commit_id='tip', query={'at':c.rhodecode_db_repo.landing_ref_name})}"><i class="icon-file-text"></i> ${_('Files')}</a></li>
</div> <li class="${h.is_active('compare', active)}"><a href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><i class="icon-loop"></i> ${_('Compare')}</a></li>
<ul id="context-pages" class="navigation horizontal-list">
<li class="${h.is_active('summary', active)}"><a class="menulink" href="${h.route_path('repo_summary_explicit', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
<li class="${h.is_active('commits', active)}"><a class="menulink" href="${h.route_path('repo_commits', repo_name=c.repo_name)}"><div class="menulabel">${_('Commits')}</div></a></li>
<li class="${h.is_active('files', active)}"><a class="menulink" href="${h.repo_files_by_ref_url(c.repo_name, c.rhodecode_db_repo.repo_type, f_path='', ref_name=c.rhodecode_db_repo.landing_ref_name, commit_id='tip', query={'at':c.rhodecode_db_repo.landing_ref_name})}"><div class="menulabel">${_('Files')}</div></a></li>
<li class="${h.is_active('compare', active)}"><a class="menulink" href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a></li>
## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
%if c.rhodecode_db_repo.repo_type in ['git','hg']: %if c.rhodecode_db_repo.repo_type in ['git','hg']:
<li class="${h.is_active('showpullrequest', active)}"> <li class="${h.is_active('showpullrequest', active)}"><a href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}"><i class="icon-request-pull"></i> ${_('Pull Requests')} <span class="badge">${c.repository_pull_requests}</span></a></li>
<a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
<div class="menulabel">
${_('Pull Requests')} <span class="menulink-counter">${c.repository_pull_requests}</span>
</div>
</a>
</li>
%endif %endif
<li class="${h.is_active('artifacts', active)}"><a href="${h.route_path('repo_artifacts_list',repo_name=c.repo_name)}"><i class="icon-archive"></i> ${_('Artifacts')} <span class="badge">${c.repository_artifacts}</span></a></li>
<li class="${h.is_active('artifacts', active)}">
<a class="menulink" href="${h.route_path('repo_artifacts_list',repo_name=c.repo_name)}">
<div class="menulabel">
${_('Artifacts')} <span class="menulink-counter">${c.repository_artifacts}</span>
</div>
</a>
</li>
%if not c.rhodecode_db_repo.archived and h.HasRepoPermissionAll('repository.admin')(c.repo_name): %if not c.rhodecode_db_repo.archived and h.HasRepoPermissionAll('repository.admin')(c.repo_name):
<li class="${h.is_active('settings', active)}"><a class="menulink" href="${h.route_path('edit_repo',repo_name=c.repo_name)}"><div class="menulabel">${_('Repository Settings')}</div></a></li> <li class="${h.is_active('settings', active)}"><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}"><i class="icon-cog"></i> ${_('Settings')}</a></li>
%endif %endif
</ul>
</div>
<li class="${h.is_active('options', active)}"> % if can_lock:
% if has_actions: <div class="sidebar-section">
<a class="menulink dropdown"> <h4 class="sidebar-heading">${_('Quick Actions')}</h4>
<div class="menulabel">${_('Quick Actions')}<div class="show_more"></div></div> <ul class="sidebar-nav">
</a> %if c.rhodecode_db_repo.locked[0]:
<ul class="submenu"> <li><a href="${h.route_path('repo_settings_quick_actions',repo_name=c.repo_name, _query={'action': 'toggle-lock', 'set_unlock': 1})}"><i class="icon-lock"></i> ${_('Unlock Repository')}</a></li>
%if can_lock: %else:
%if c.rhodecode_db_repo.locked[0]: <li><a href="${h.route_path('repo_settings_quick_actions',repo_name=c.repo_name, _query={'action': 'toggle-lock', 'set_lock': 1})}"><i class="icon-lock"></i> ${_('Lock Repository')}</a></li>
<li><a class="locking_del" href="${h.route_path('repo_settings_quick_actions',repo_name=c.repo_name, _query={'action': 'toggle-lock', 'set_unlock': 1})}">${_('Unlock Repository')}</a></li> %endif
%else: </ul>
<li><a class="locking_add" href="${h.route_path('repo_settings_quick_actions',repo_name=c.repo_name, _query={'action': 'toggle-lock', 'set_lock': 1})}">${_('Lock Repository')}</a></li> </div>
%endif % endif
%endif
</ul>
% endif
</li>
</ul>
</div>
<div class="clear"></div>
</div>
<!--- REPO END CONTEXT BAR -->
</%def> </%def>