repo_edit.html
382 lines
| 15.0 KiB
| text/html
|
HtmlLexer
r547 | ## -*- coding: utf-8 -*- | ||
<%inherit file="/base/base.html"/> | |||
<%def name="title()"> | |||
r619 | ${_('Edit repository')} ${c.repo_info.repo_name} - ${c.rhodecode_name} | ||
r547 | </%def> | ||
<%def name="breadcrumbs_links()"> | |||
${h.link_to(_('Admin'),h.url('admin_home'))} | |||
» | |||
${h.link_to(_('Repositories'),h.url('repos'))} | |||
» | |||
r1084 | ${_('edit')} » ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} | ||
r547 | </%def> | ||
<%def name="page_nav()"> | |||
${self.menu('admin')} | |||
</%def> | |||
<%def name="main()"> | |||
r699 | <div class="box box-left"> | ||
r547 | <!-- 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> | |||
r703 | <div class="input"> | ||
r699 | ${h.text('repo_name',class_="medium")} | ||
r547 | </div> | ||
r1112 | </div> | ||
<div class="field"> | |||
<div class="label"> | |||
<label for="clone_uri">${_('Clone uri')}:</label> | |||
</div> | |||
<div class="input"> | |||
${h.text('clone_uri',class_="small")} | |||
</div> | |||
</div> | |||
<div class="field"> | |||
<div class="label"> | |||
<label for="repo_group">${_('Repository group')}:</label> | |||
</div> | |||
<div class="input"> | |||
${h.select('repo_group','',c.repo_groups,class_="medium")} | |||
<span>${h.link_to(_('add new group'),h.url(''))}</span> | |||
</div> | |||
</div> | |||
r659 | <div class="field"> | ||
<div class="label"> | |||
<label for="repo_type">${_('Type')}:</label> | |||
</div> | |||
<div class="input"> | |||
r699 | ${h.select('repo_type','hg',c.backends,class_="medium")} | ||
r659 | </div> | ||
r1112 | </div> | ||
r547 | <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> | |||
r810 | <div class="field"> | ||
<div class="label label-checkbox"> | |||
<label for="enable_statistics">${_('Enable statistics')}:</label> | |||
</div> | |||
<div class="checkboxes"> | |||
${h.checkbox('enable_statistics',value="True")} | |||
</div> | |||
r962 | </div> | ||
<div class="field"> | |||
<div class="label label-checkbox"> | |||
<label for="enable_downloads">${_('Enable downloads')}:</label> | |||
</div> | |||
<div class="checkboxes"> | |||
${h.checkbox('enable_downloads',value="True")} | |||
</div> | |||
</div> | |||
r547 | <div class="field"> | ||
r581 | <div class="label"> | ||
r547 | <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"> | |||
r1015 | <%include file="repo_edit_perms.html"/> | ||
</div> | |||
r547 | |||
<div class="buttons"> | |||
r888 | ${h.submit('save','Save',class_="ui-button")} | ||
${h.reset('reset','Reset',class_="ui-button")} | |||
r547 | </div> | ||
</div> | |||
</div> | |||
</div> | |||
${h.end_form()} | |||
<script type="text/javascript"> | |||
YAHOO.util.Event.onDOMReady(function(){ | |||
var D = YAHOO.util.Dom; | |||
r1012 | if(!D.hasClass('perm_new_member_name','error')){ | ||
r547 | 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(){ | |||
r1012 | var myUsers = ${c.users_array|n}; | ||
var myGroups = ${c.users_groups_array|n}; | |||
r547 | |||
r1012 | // Define a custom search function for the DataSource of users | ||
var matchUsers = function(sQuery) { | |||
r547 | // Case insensitive matching | ||
r1012 | var query = sQuery.toLowerCase(); | ||
var i=0; | |||
var l=myUsers.length; | |||
var matches = []; | |||
r547 | |||
// Match against each name of each contact | |||
for(; i<l; i++) { | |||
r1012 | contact = myUsers[i]; | ||
r547 | 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; | |||
}; | |||
r1012 | |||
// Define a custom search function for the DataSource of usersGroups | |||
var matchGroups = function(sQuery) { | |||
// Case insensitive matching | |||
var query = sQuery.toLowerCase(); | |||
var i=0; | |||
var l=myGroups.length; | |||
var matches = []; | |||
// Match against each name of each contact | |||
for(; i<l; i++) { | |||
matched_group = myGroups[i]; | |||
if(matched_group.grname.toLowerCase().indexOf(query) > -1) { | |||
matches[matches.length] = matched_group; | |||
} | |||
} | |||
return matches; | |||
}; | |||
//match all | |||
var matchAll = function(sQuery){ | |||
u = matchUsers(sQuery); | |||
g = matchGroups(sQuery); | |||
return u.concat(g); | |||
}; | |||
// DataScheme for members | |||
var memberDS = new YAHOO.util.FunctionDataSource(matchAll); | |||
memberDS.responseSchema = { | |||
fields: ["id", "fname", "lname", "nname", "grname", "grmembers"] | |||
}; | |||
// DataScheme for owner | |||
var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); | |||
ownerDS.responseSchema = { | |||
r547 | fields: ["id", "fname", "lname", "nname"] | ||
r1012 | }; | ||
r547 | // Instantiate AutoComplete for perms | ||
r1012 | var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS); | ||
membersAC.useShadow = false; | |||
membersAC.resultTypeList = false; | |||
r547 | |||
// Instantiate AutoComplete for owner | |||
r1012 | var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS); | ||
ownerAC.useShadow = false; | |||
ownerAC.resultTypeList = false; | |||
r547 | |||
r1012 | |||
// Helper highlight function for the formatter | |||
r547 | 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); | |||
}; | |||
r1012 | |||
// Custom formatter to highlight the matching letters | |||
var custom_formatter = function(oResultData, sQuery, sResultMatch) { | |||
var query = sQuery.toLowerCase(); | |||
if (oResultData.grname != undefined){ | |||
var grname = oResultData.grname; | |||
var grmembers = oResultData.grmembers; | |||
var grnameMatchIndex = grname.toLowerCase().indexOf(query); | |||
var grprefix = "${_('Group')}: "; | |||
var grsuffix = " ("+grmembers+" ${_('members')})"; | |||
if (grnameMatchIndex > -1){ | |||
return grprefix+highlightMatch(grname,query,grnameMatchIndex)+grsuffix; | |||
} | |||
return grprefix+oResultData.grname+grsuffix; | |||
} | |||
else if(oResultData.fname != undefined){ | |||
var fname = oResultData.fname, | |||
lname = oResultData.lname, | |||
nname = oResultData.nname || "", // Guard against null value | |||
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; | |||
} | |||
else{ | |||
return ''; | |||
} | |||
}; | |||
membersAC.formatResult = custom_formatter; | |||
ownerAC.formatResult = custom_formatter; | |||
r547 | var myHandler = function(sType, aArgs) { | ||
r1012 | |||
var myAC = aArgs[0]; // reference back to the AC instance | |||
var elLI = aArgs[1]; // reference to the selected LI element | |||
r547 | var oData = aArgs[2]; // object literal of selected item's result data | ||
r1012 | |||
//fill the autocomplete with value | |||
if(oData.nname != undefined){ | |||
//users | |||
myAC.getInputEl().value = oData.nname; | |||
YUD.get('perm_new_member_type').value = 'user'; | |||
} | |||
else{ | |||
//groups | |||
myAC.getInputEl().value = oData.grname; | |||
YUD.get('perm_new_member_type').value = 'users_group'; | |||
} | |||
r547 | }; | ||
r1012 | membersAC.itemSelectEvent.subscribe(myHandler); | ||
ownerAC.itemSelectEvent.subscribe(myHandler); | |||
r547 | |||
return { | |||
r1012 | memberDS: memberDS, | ||
ownerDS: ownerDS, | |||
membersAC: membersAC, | |||
ownerAC: ownerAC, | |||
r547 | }; | ||
}(); | |||
</script> | |||
</div> | |||
r699 | |||
<div class="box box-right"> | |||
<div class="title"> | |||
<h5>${_('Administration')}</h5> | |||
</div> | |||
r708 | <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');")} | |||
r1114 | <div class="field" style="border:none"> | ||
r708 | <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()} | |||
r1114 | %if c.repo_info.clone_uri: | ||
<h3>${_('Remote')}</h3> | |||
${h.form(url('repo_pull', repo_name=c.repo_info.repo_name),method='put')} | |||
<div class="form"> | |||
<div class="fields"> | |||
${h.submit('remote_pull_%s' % c.repo_info.repo_name,_('Pull changes from remote location'),class_="pull_icon action_button",onclick="return confirm('Confirm to pull changes from remote side');")} | |||
<div class="field" style="border:none"> | |||
<ul> | |||
<li><a href="${c.repo_info.clone_uri}">${c.repo_info.clone_uri}</a></li> | |||
</ul> | |||
</div> | |||
</div> | |||
</div> | |||
${h.end_form()} | |||
%endif | |||
r708 | <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()} | |||
r699 | |||
r1085 | <h3>${_('Public journal')}</h3> | ||
${h.form(url('repo_public_journal', repo_name=c.repo_info.repo_name),method='put')} | |||
<div class="form"> | |||
<div class="fields"> | |||
${h.hidden('auth_token',str(h.get_token()))} | |||
%if c.in_public_journal: | |||
${h.submit('set_public_%s' % c.repo_info.repo_name,_('Remove from public journal'),class_="stop_following_icon action_button")} | |||
%else: | |||
${h.submit('set_public_%s' % c.repo_info.repo_name,_('Add to public journal'),class_="start_following_icon action_button")} | |||
%endif | |||
</div> | |||
</div> | |||
${h.end_form()} | |||
r699 | |||
r708 | <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()} | |||
r699 | |||
</div> | |||
r547 | </%def> |