|
|
## -*- coding: utf-8 -*-
|
|
|
<%inherit file="root.html"/>
|
|
|
|
|
|
<!-- HEADER -->
|
|
|
<div id="header">
|
|
|
<div id="header-inner" class="title hover">
|
|
|
<div id="logo">
|
|
|
<h1><a href="${h.url('home')}">${c.rhodecode_name}</a></h1>
|
|
|
</div>
|
|
|
<!-- MENU -->
|
|
|
${self.page_nav()}
|
|
|
<!-- END MENU -->
|
|
|
${self.body()}
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- END HEADER -->
|
|
|
|
|
|
<!-- CONTENT -->
|
|
|
<div id="content">
|
|
|
<div class="flash_msg">
|
|
|
<% messages = h.flash.pop_messages() %>
|
|
|
% if messages:
|
|
|
<ul id="flash-messages">
|
|
|
% for message in messages:
|
|
|
<li class="${message.category}_msg">${message}</li>
|
|
|
% endfor
|
|
|
</ul>
|
|
|
% endif
|
|
|
</div>
|
|
|
<div id="main">
|
|
|
${next.main()}
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- END CONTENT -->
|
|
|
|
|
|
<!-- FOOTER -->
|
|
|
<div id="footer">
|
|
|
<div id="footer-inner" class="title">
|
|
|
<div>
|
|
|
<p class="footer-link">
|
|
|
<a href="${h.url('bugtracker')}">${_('Submit a bug')}</a>
|
|
|
</p>
|
|
|
<p class="footer-link-right">
|
|
|
<a href="${h.url('rhodecode_official')}">RhodeCode${'-%s' % c.rhodecode_instanceid if c.rhodecode_instanceid else ''}</a>
|
|
|
${c.rhodecode_version} © 2010-${h.datetime.today().year} by Marcin Kuzminski
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- END FOOTER -->
|
|
|
|
|
|
### MAKO DEFS ###
|
|
|
<%def name="page_nav()">
|
|
|
${self.menu()}
|
|
|
</%def>
|
|
|
|
|
|
<%def name="breadcrumbs()">
|
|
|
<div class="breadcrumbs">
|
|
|
${self.breadcrumbs_links()}
|
|
|
</div>
|
|
|
</%def>
|
|
|
|
|
|
<%def name="usermenu()">
|
|
|
## USER MENU
|
|
|
<li>
|
|
|
<a class="menu_link" id="quick_login_link">
|
|
|
<span class="icon" style="padding:5px 5px 0px 5px">
|
|
|
<img src="${h.gravatar_url(c.rhodecode_user.email,20)}" alt="avatar">
|
|
|
</span>
|
|
|
%if c.rhodecode_user.username != 'default':
|
|
|
<span class="menu_link_user">${c.rhodecode_user.username}</span>
|
|
|
%if c.unread_notifications != 0:
|
|
|
<span class="menu_link_notifications">${c.unread_notifications}</span>
|
|
|
%endif
|
|
|
%else:
|
|
|
<span>${_('Not logged in')}</span>
|
|
|
%endif
|
|
|
</a>
|
|
|
|
|
|
<div class="user-menu">
|
|
|
<div id="quick_login">
|
|
|
%if c.rhodecode_user.username == 'default':
|
|
|
<h4>${_('Login to your account')}</h4>
|
|
|
${h.form(h.url('login_home',came_from=h.url.current()))}
|
|
|
<div class="form">
|
|
|
<div class="fields">
|
|
|
<div class="field">
|
|
|
<div class="label">
|
|
|
<label for="username">${_('Username')}:</label>
|
|
|
</div>
|
|
|
<div class="input">
|
|
|
${h.text('username',class_='focus',size=40)}
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
<div class="field">
|
|
|
<div class="label">
|
|
|
<label for="password">${_('Password')}:</label>
|
|
|
</div>
|
|
|
<div class="input">
|
|
|
${h.password('password',class_='focus',size=40)}
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
<div class="buttons">
|
|
|
<div class="password_forgoten">${h.link_to(_('Forgot password ?'),h.url('reset_password'))}</div>
|
|
|
<div class="register">
|
|
|
%if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
|
|
|
${h.link_to(_("Don't have an account ?"),h.url('register'))}
|
|
|
%endif
|
|
|
</div>
|
|
|
<div class="submit">
|
|
|
${h.submit('sign_in',_('Log In'),class_="ui-btn xsmall")}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
${h.end_form()}
|
|
|
%else:
|
|
|
<div class="links_left">
|
|
|
<div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
|
|
|
<div class="email">${c.rhodecode_user.email}</div>
|
|
|
<div class="big_gravatar"><img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,48)}" /></div>
|
|
|
<div class="inbox"><a href="${h.url('notifications')}">${_('Inbox')}: ${c.unread_notifications}</a></div>
|
|
|
</div>
|
|
|
<div class="links_right">
|
|
|
<ol class="links">
|
|
|
<li>${h.link_to(_(u'Home'),h.url('home'))}</li>
|
|
|
<li>${h.link_to(_(u'Journal'),h.url('journal'))}</li>
|
|
|
<li>${h.link_to(_(u'My account'),h.url('admin_settings_my_account'))}</li>
|
|
|
<li class="logout">${h.link_to(_(u'Log Out'),h.url('logout_home'))}</li>
|
|
|
</ol>
|
|
|
</div>
|
|
|
%endif
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
</li>
|
|
|
</%def>
|
|
|
|
|
|
<%def name="menu(current=None)">
|
|
|
<%
|
|
|
def is_current(selected):
|
|
|
if selected == current:
|
|
|
return h.literal('class="current"')
|
|
|
%>
|
|
|
<ul id="quick">
|
|
|
<!-- repo switcher -->
|
|
|
<li>
|
|
|
<a class="menu_link" id="repo_switcher" title="${_('Switch repository')}" href="#">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/database.png')}" alt="${_('Products')}" />
|
|
|
</span>
|
|
|
<span>${_('Repositories')}</span>
|
|
|
</a>
|
|
|
<ul id="repo_switcher_list" class="repo_switcher">
|
|
|
<li>
|
|
|
<a href="#">${_('loading...')}</a>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
## we render this menu only not for those pages
|
|
|
%if current not in ['home','admin', 'search', 'journal']:
|
|
|
##REGULAR MENU
|
|
|
<li ${is_current('summary')}>
|
|
|
<a class="menu_link" title="${_('Summary')}" href="${h.url('summary_home',repo_name=c.repo_name)}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/clipboard_16.png')}" alt="${_('Summary')}" />
|
|
|
</span>
|
|
|
<span>${_('Summary')}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
<li ${is_current('changelog')}>
|
|
|
<a class="menu_link" title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=c.repo_name)}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/time.png')}" alt="${_('Changelog')}" />
|
|
|
</span>
|
|
|
<span>${_('Changelog')}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
<li ${is_current('switch_to')}>
|
|
|
<a class="menu_link" id="branch_tag_switcher" title="${_('Switch to')}" href="#">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/arrow_switch.png')}" alt="${_('Switch to')}" />
|
|
|
</span>
|
|
|
<span>${_('Switch to')}</span>
|
|
|
</a>
|
|
|
<ul id="switch_to_list" class="switch_to">
|
|
|
<li><a href="#">${_('loading...')}</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li ${is_current('files')}>
|
|
|
<a class="menu_link" title="${_('Files')}" href="${h.url('files_home',repo_name=c.repo_name)}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/file.png')}" alt="${_('Files')}" />
|
|
|
</span>
|
|
|
<span>${_('Files')}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
<li ${is_current('options')}>
|
|
|
<a class="menu_link" title="${_('Options')}" href="#">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/table_gear.png')}" alt="${_('Admin')}" />
|
|
|
</span>
|
|
|
<span>${_('Options')}</span>
|
|
|
</a>
|
|
|
<ul>
|
|
|
%if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
|
|
|
%if h.HasPermissionAll('hg.admin')('access settings on repository'):
|
|
|
<li>${h.link_to(_('repository settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}</li>
|
|
|
%else:
|
|
|
<li>${h.link_to(_('repository settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li>
|
|
|
%endif
|
|
|
%endif
|
|
|
|
|
|
<li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li>
|
|
|
%if h.is_hg(c.rhodecode_repo):
|
|
|
<li>${h.link_to(_('open new pull request'),h.url('pullrequest_home',repo_name=c.repo_name),class_='pull_request')}</li>
|
|
|
%endif
|
|
|
%if c.rhodecode_db_repo.fork:
|
|
|
<li>${h.link_to(_('compare fork'),h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref=request.GET.get('branch') or 'default',other_ref_type='branch',other_ref='default',repo=c.rhodecode_db_repo.fork.repo_name),class_='compare_request')}</li>
|
|
|
%endif
|
|
|
<li>${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}</li>
|
|
|
|
|
|
%if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
|
|
|
%if c.rhodecode_db_repo.locked[0]:
|
|
|
<li>${h.link_to(_('unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}</li>
|
|
|
%else:
|
|
|
<li>${h.link_to(_('lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li>
|
|
|
%endif
|
|
|
%endif
|
|
|
|
|
|
% if h.HasPermissionAll('hg.admin')('access admin main page'):
|
|
|
<li>
|
|
|
${h.link_to(_('admin'),h.url('admin_home'),class_='admin')}
|
|
|
<%def name="admin_menu()">
|
|
|
<ul>
|
|
|
<li>${h.link_to(_('journal'),h.url('admin_home'),class_='journal')}</li>
|
|
|
<li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
|
|
|
<li>${h.link_to(_('repositories groups'),h.url('repos_groups'),class_='repos_groups')}</li>
|
|
|
<li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
|
|
|
<li>${h.link_to(_('users groups'),h.url('users_groups'),class_='groups')}</li>
|
|
|
<li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
|
|
|
<li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li>
|
|
|
<li>${h.link_to(_('defaults'),h.url('defaults'),class_='defaults')}</li>
|
|
|
<li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
|
|
|
</ul>
|
|
|
</%def>
|
|
|
## ADMIN MENU
|
|
|
${admin_menu()}
|
|
|
</li>
|
|
|
% endif
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li>
|
|
|
<a class="menu_link" title="${_('Followers')}" href="${h.url('repo_followers_home',repo_name=c.repo_name)}">
|
|
|
<span class="icon_short">
|
|
|
<img src="${h.url('/images/icons/heart.png')}" alt="${_('Followers')}" />
|
|
|
</span>
|
|
|
<span id="current_followers_count" class="short">${c.repository_followers}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
<li>
|
|
|
<a class="menu_link" title="${_('Forks')}" href="${h.url('repo_forks_home',repo_name=c.repo_name)}">
|
|
|
<span class="icon_short">
|
|
|
<img src="${h.url('/images/icons/arrow_divide.png')}" alt="${_('Forks')}" />
|
|
|
</span>
|
|
|
<span class="short">${c.repository_forks}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
<li>
|
|
|
<a class="menu_link" title="${_('Pull requests')}" href="${h.url('pullrequest_show_all',repo_name=c.repo_name)}">
|
|
|
<span class="icon_short">
|
|
|
<img src="${h.url('/images/icons/arrow_join.png')}" alt="${_('Pull requests')}" />
|
|
|
</span>
|
|
|
<span class="short">${c.repository_pull_requests}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
${usermenu()}
|
|
|
<script type="text/javascript">
|
|
|
YUE.on('branch_tag_switcher','mouseover',function(){
|
|
|
var loaded = YUD.hasClass('branch_tag_switcher','loaded');
|
|
|
if(!loaded){
|
|
|
YUD.addClass('branch_tag_switcher','loaded');
|
|
|
ypjax("${h.url('branch_tag_switcher',repo_name=c.repo_name)}",'switch_to_list',
|
|
|
function(o){},
|
|
|
function(o){YUD.removeClass('branch_tag_switcher','loaded');}
|
|
|
,null);
|
|
|
}
|
|
|
return false;
|
|
|
});
|
|
|
</script>
|
|
|
%else:
|
|
|
##ROOT MENU
|
|
|
%if c.rhodecode_user.username != 'default':
|
|
|
<li ${is_current('journal')}>
|
|
|
<a class="menu_link" title="${_('Journal')}" href="${h.url('journal')}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/book.png')}" alt="${_('Journal')}" />
|
|
|
</span>
|
|
|
<span>${_('Journal')}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
%else:
|
|
|
<li ${is_current('journal')}>
|
|
|
<a class="menu_link" title="${_('Public journal')}" href="${h.url('public_journal')}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/book.png')}" alt="${_('Public journal')}" />
|
|
|
</span>
|
|
|
<span>${_('Public journal')}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
%endif
|
|
|
<li ${is_current('search')}>
|
|
|
<a class="menu_link" title="${_('Search')}" href="${h.url('search')}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/search_16.png')}" alt="${_('Search')}" />
|
|
|
</span>
|
|
|
<span>${_('Search')}</span>
|
|
|
</a>
|
|
|
</li>
|
|
|
%if h.HasPermissionAll('hg.admin')('access admin main page'):
|
|
|
<li ${is_current('admin')}>
|
|
|
<a class="menu_link" title="${_('Admin')}" href="${h.url('admin_home')}">
|
|
|
<span class="icon">
|
|
|
<img src="${h.url('/images/icons/cog_edit.png')}" alt="${_('Admin')}" />
|
|
|
</span>
|
|
|
<span>${_('Admin')}</span>
|
|
|
</a>
|
|
|
${admin_menu()}
|
|
|
</li>
|
|
|
%endif
|
|
|
${usermenu()}
|
|
|
%endif
|
|
|
<script type="text/javascript">
|
|
|
YUE.on('repo_switcher','mouseover',function(){
|
|
|
function qfilter(){
|
|
|
var nodes = YUQ('ul#repo_switcher_list li a.repo_name');
|
|
|
var target = 'q_filter_rs';
|
|
|
var func = function(node){
|
|
|
return node.parentNode;
|
|
|
}
|
|
|
q_filter(target,nodes,func);
|
|
|
}
|
|
|
var loaded = YUD.hasClass('repo_switcher','loaded');
|
|
|
if(!loaded){
|
|
|
YUD.addClass('repo_switcher','loaded');
|
|
|
ypjax("${h.url('repo_switcher')}",'repo_switcher_list',
|
|
|
function(o){qfilter();},
|
|
|
function(o){YUD.removeClass('repo_switcher','loaded');}
|
|
|
,null);
|
|
|
}
|
|
|
return false;
|
|
|
});
|
|
|
</script>
|
|
|
</%def>
|
|
|
|