|
|
## -*- coding: utf-8 -*-
|
|
|
<%inherit file="/base/base.html"/>
|
|
|
|
|
|
<%def name="title()">
|
|
|
${_('Edit repository')} ${c.repo_info.repo_name} - ${c.rhodecode_name}
|
|
|
</%def>
|
|
|
|
|
|
<%def name="breadcrumbs_links()">
|
|
|
${h.link_to(_('Admin'),h.url('admin_home'))}
|
|
|
»
|
|
|
${h.link_to(_('Repositories'),h.url('repos'))}
|
|
|
»
|
|
|
${_('edit')} "${c.repo_name}"
|
|
|
</%def>
|
|
|
|
|
|
<%def name="page_nav()">
|
|
|
${self.menu('admin')}
|
|
|
</%def>
|
|
|
|
|
|
<%def name="main()">
|
|
|
<div class="box box-left">
|
|
|
<!-- box / title -->
|
|
|
<div class="title">
|
|
|
${self.breadcrumbs()}
|
|
|
</div>
|
|
|
${h.form(url('repo', repo_name=c.repo_info.repo_name),method='put')}
|
|
|
<div class="form">
|
|
|
<!-- fields -->
|
|
|
<div class="fields">
|
|
|
<div class="field">
|
|
|
<div class="label">
|
|
|
<label for="repo_name">${_('Name')}:</label>
|
|
|
</div>
|
|
|
<div class="input">
|
|
|
${h.text('repo_name',class_="medium")}
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="field">
|
|
|
<div class="label">
|
|
|
<label for="repo_type">${_('Type')}:</label>
|
|
|
</div>
|
|
|
<div class="input">
|
|
|
${h.select('repo_type','hg',c.backends,class_="medium")}
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="field">
|
|
|
<div class="label label-textarea">
|
|
|
<label for="description">${_('Description')}:</label>
|
|
|
</div>
|
|
|
<div class="textarea text-area editor">
|
|
|
${h.textarea('description',cols=23,rows=5)}
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="field">
|
|
|
<div class="label label-checkbox">
|
|
|
<label for="private">${_('Private')}:</label>
|
|
|
</div>
|
|
|
<div class="checkboxes">
|
|
|
${h.checkbox('private',value="True")}
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="field">
|
|
|
<div class="label">
|
|
|
<label for="user">${_('Owner')}:</label>
|
|
|
</div>
|
|
|
<div class="input input-small ac">
|
|
|
<div class="perm_ac">
|
|
|
${h.text('user',class_='yui-ac-input')}
|
|
|
<div id="owner_container"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="field">
|
|
|
<div class="label">
|
|
|
<label for="input">${_('Permissions')}:</label>
|
|
|
</div>
|
|
|
<div class="input">
|
|
|
<table id="permissions_manage">
|
|
|
<tr>
|
|
|
<td>${_('none')}</td>
|
|
|
<td>${_('read')}</td>
|
|
|
<td>${_('write')}</td>
|
|
|
<td>${_('admin')}</td>
|
|
|
<td>${_('user')}</td>
|
|
|
<td></td>
|
|
|
</tr>
|
|
|
|
|
|
%for r2p in c.repo_info.repo_to_perm:
|
|
|
%if r2p.user.username =='default' and c.repo_info.private:
|
|
|
<tr>
|
|
|
<td colspan="4">
|
|
|
<span class="private_repo_msg">
|
|
|
${_('private repository')}
|
|
|
</span>
|
|
|
</td>
|
|
|
<td class="private_repo_msg">${r2p.user.username}</td>
|
|
|
</tr>
|
|
|
%else:
|
|
|
<tr id="id${id(r2p.user.username)}">
|
|
|
<td>${h.radio('perm_%s' % r2p.user.username,'repository.none')}</td>
|
|
|
<td>${h.radio('perm_%s' % r2p.user.username,'repository.read')}</td>
|
|
|
<td>${h.radio('perm_%s' % r2p.user.username,'repository.write')}</td>
|
|
|
<td>${h.radio('perm_%s' % r2p.user.username,'repository.admin')}</td>
|
|
|
<td>${r2p.user.username}</td>
|
|
|
<td>
|
|
|
%if r2p.user.username !='default':
|
|
|
<span class="delete_icon action_button" onclick="ajaxAction(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
|
|
|
<script type="text/javascript">
|
|
|
function ajaxAction(user_id,field_id){
|
|
|
var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
|
|
|
var callback = { success:function(o){
|
|
|
var tr = YAHOO.util.Dom.get(String(field_id));
|
|
|
tr.parentNode.removeChild(tr);},failure:function(o){
|
|
|
alert("${_('Failed to remove user')}");},};
|
|
|
var postData = '_method=delete&user_id='+user_id;
|
|
|
var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);};
|
|
|
</script>
|
|
|
</span>
|
|
|
%endif
|
|
|
</td>
|
|
|
</tr>
|
|
|
%endif
|
|
|
%endfor
|
|
|
|
|
|
<tr id="add_perm_input">
|
|
|
<td>${h.radio('perm_new_user','repository.none')}</td>
|
|
|
<td>${h.radio('perm_new_user','repository.read')}</td>
|
|
|
<td>${h.radio('perm_new_user','repository.write')}</td>
|
|
|
<td>${h.radio('perm_new_user','repository.admin')}</td>
|
|
|
<td class='ac'>
|
|
|
<div class="perm_ac" id="perm_ac">
|
|
|
${h.text('perm_new_user_name',class_='yui-ac-input')}
|
|
|
<div id="perm_container"></div>
|
|
|
</div>
|
|
|
</td>
|
|
|
<td></td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td colspan="6">
|
|
|
<span id="add_perm" class="add_icon" style="cursor: pointer;">
|
|
|
${_('Add another user')}
|
|
|
</span>
|
|
|
</td>
|
|
|
</tr>
|
|
|
</table>
|
|
|
</div>
|
|
|
|
|
|
<div class="buttons">
|
|
|
${h.submit('save','Save',class_="ui-button ui-widget ui-state-default ui-corner-all")}
|
|
|
${h.reset('reset','Reset',class_="ui-button ui-widget ui-state-default ui-corner-all")}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
${h.end_form()}
|
|
|
<script type="text/javascript">
|
|
|
YAHOO.util.Event.onDOMReady(function(){
|
|
|
var D = YAHOO.util.Dom;
|
|
|
if(!D.hasClass('perm_new_user_name','error')){
|
|
|
D.setStyle('add_perm_input','display','none');
|
|
|
}
|
|
|
YAHOO.util.Event.addListener('add_perm','click',function(){
|
|
|
D.setStyle('add_perm_input','display','');
|
|
|
D.setStyle('add_perm','opacity','0.6');
|
|
|
D.setStyle('add_perm','cursor','default');
|
|
|
});
|
|
|
});
|
|
|
</script>
|
|
|
<script type="text/javascript">
|
|
|
YAHOO.example.FnMultipleFields = function(){
|
|
|
var myContacts = ${c.users_array|n}
|
|
|
|
|
|
// Define a custom search function for the DataSource
|
|
|
var matchNames = function(sQuery) {
|
|
|
// Case insensitive matching
|
|
|
var query = sQuery.toLowerCase(),
|
|
|
contact,
|
|
|
i=0,
|
|
|
l=myContacts.length,
|
|
|
matches = [];
|
|
|
|
|
|
// Match against each name of each contact
|
|
|
for(; i<l; i++) {
|
|
|
contact = myContacts[i];
|
|
|
if((contact.fname.toLowerCase().indexOf(query) > -1) ||
|
|
|
(contact.lname.toLowerCase().indexOf(query) > -1) ||
|
|
|
(contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
|
|
|
matches[matches.length] = contact;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return matches;
|
|
|
};
|
|
|
|
|
|
// Use a FunctionDataSource
|
|
|
var oDS = new YAHOO.util.FunctionDataSource(matchNames);
|
|
|
oDS.responseSchema = {
|
|
|
fields: ["id", "fname", "lname", "nname"]
|
|
|
}
|
|
|
|
|
|
// Instantiate AutoComplete for perms
|
|
|
var oAC_perms = new YAHOO.widget.AutoComplete("perm_new_user_name", "perm_container", oDS);
|
|
|
oAC_perms.useShadow = false;
|
|
|
oAC_perms.resultTypeList = false;
|
|
|
|
|
|
// Instantiate AutoComplete for owner
|
|
|
var oAC_owner = new YAHOO.widget.AutoComplete("user", "owner_container", oDS);
|
|
|
oAC_owner.useShadow = false;
|
|
|
oAC_owner.resultTypeList = false;
|
|
|
|
|
|
|
|
|
// Custom formatter to highlight the matching letters
|
|
|
var custom_formatter = function(oResultData, sQuery, sResultMatch) {
|
|
|
var query = sQuery.toLowerCase(),
|
|
|
fname = oResultData.fname,
|
|
|
lname = oResultData.lname,
|
|
|
nname = oResultData.nname || "", // Guard against null value
|
|
|
query = sQuery.toLowerCase(),
|
|
|
fnameMatchIndex = fname.toLowerCase().indexOf(query),
|
|
|
lnameMatchIndex = lname.toLowerCase().indexOf(query),
|
|
|
nnameMatchIndex = nname.toLowerCase().indexOf(query),
|
|
|
displayfname, displaylname, displaynname;
|
|
|
|
|
|
if(fnameMatchIndex > -1) {
|
|
|
displayfname = highlightMatch(fname, query, fnameMatchIndex);
|
|
|
}
|
|
|
else {
|
|
|
displayfname = fname;
|
|
|
}
|
|
|
|
|
|
if(lnameMatchIndex > -1) {
|
|
|
displaylname = highlightMatch(lname, query, lnameMatchIndex);
|
|
|
}
|
|
|
else {
|
|
|
displaylname = lname;
|
|
|
}
|
|
|
|
|
|
if(nnameMatchIndex > -1) {
|
|
|
displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
|
|
|
}
|
|
|
else {
|
|
|
displaynname = nname ? "(" + nname + ")" : "";
|
|
|
}
|
|
|
|
|
|
return displayfname + " " + displaylname + " " + displaynname;
|
|
|
|
|
|
};
|
|
|
oAC_perms.formatResult = custom_formatter;
|
|
|
oAC_owner.formatResult = custom_formatter;
|
|
|
|
|
|
// Helper function for the formatter
|
|
|
var highlightMatch = function(full, snippet, matchindex) {
|
|
|
return full.substring(0, matchindex) +
|
|
|
"<span class='match'>" +
|
|
|
full.substr(matchindex, snippet.length) +
|
|
|
"</span>" +
|
|
|
full.substring(matchindex + snippet.length);
|
|
|
};
|
|
|
|
|
|
var myHandler = function(sType, aArgs) {
|
|
|
var myAC = aArgs[0]; // reference back to the AC instance
|
|
|
var elLI = aArgs[1]; // reference to the selected LI element
|
|
|
var oData = aArgs[2]; // object literal of selected item's result data
|
|
|
myAC.getInputEl().value = oData.nname;
|
|
|
};
|
|
|
|
|
|
oAC_perms.itemSelectEvent.subscribe(myHandler);
|
|
|
oAC_owner.itemSelectEvent.subscribe(myHandler);
|
|
|
|
|
|
return {
|
|
|
oDS: oDS,
|
|
|
oAC_perms: oAC_perms,
|
|
|
oAC_owner: oAC_owner,
|
|
|
};
|
|
|
}();
|
|
|
|
|
|
</script>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="box box-right">
|
|
|
<div class="title">
|
|
|
<h5>${_('Administration')}</h5>
|
|
|
</div>
|
|
|
|
|
|
<h3>${_('Statistics')}</h3>
|
|
|
|
|
|
${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')}
|
|
|
<div class="form">
|
|
|
<div class="fields">
|
|
|
${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="refresh_icon action_button",onclick="return confirm('Confirm to remove current statistics');")}
|
|
|
|
|
|
<div class="field">
|
|
|
<ul>
|
|
|
<li>${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}</li>
|
|
|
<li>${_('Percentage of stats gathered')}: ${c.stats_percentage} %</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
${h.end_form()}
|
|
|
|
|
|
<h3>${_('Cache')}</h3>
|
|
|
${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')}
|
|
|
<div class="form">
|
|
|
<div class="fields">
|
|
|
${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="refresh_icon action_button",onclick="return confirm('Confirm to invalidate repository cache');")}
|
|
|
</div>
|
|
|
</div>
|
|
|
${h.end_form()}
|
|
|
|
|
|
|
|
|
<h3>${_('Delete')}</h3>
|
|
|
${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')}
|
|
|
<div class="form">
|
|
|
<div class="fields">
|
|
|
${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
|
|
|
</div>
|
|
|
</div>
|
|
|
${h.end_form()}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
</%def>
|