repo_edit.html
274 lines
| 11.8 KiB
| text/html
|
HtmlLexer
r216 | ## -*- coding: utf-8 -*- | ||
<%inherit file="/base/base.html"/> | |||
r127 | <%def name="title()"> | ||
r216 | ${_('Repositories administration')} | ||
r127 | </%def> | ||
r362 | |||
<%def name="breadcrumbs_links()"> | |||
${h.link_to(_('Admin'),h.url('admin_home'))} | |||
» | |||
${h.link_to(_('Repositories'),h.url('repos'))} | |||
» | |||
${_('edit')} "${c.repo_name}" | |||
r127 | </%def> | ||
r362 | |||
r127 | <%def name="page_nav()"> | ||
r182 | ${self.menu('admin')} | ||
r127 | </%def> | ||
r362 | |||
r127 | <%def name="main()"> | ||
r362 | <div class="box"> | ||
<!-- 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 input-medium"> | |||
${h.text('repo_name')} | |||
</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-checkbox"> | |||
<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> | |||
r399 | %for r2p in c.repo_info.repo_to_perm: | ||
r362 | %if r2p.user.username =='default' and c.repo_info.private: | ||
<tr> | |||
r366 | <td colspan="4"> | ||
r362 | <span class="private_repo_msg"> | ||
r366 | ${_('private repository')} | ||
r362 | </span> | ||
</td> | |||
r366 | <td class="private_repo_msg">${r2p.user.username}</td> | ||
r362 | </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)); | |||
r366 | tr.parentNode.removeChild(tr);},failure:function(o){ | ||
alert("${_('Failed to remove user')}");},}; | |||
r362 | 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 | |||
r296 | |||
r366 | <tr id="add_perm_input"> | ||
r362 | <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")} | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
${h.end_form()} | |||
r296 | <script type="text/javascript"> | ||
r362 | 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'); | |||
}); | |||
r296 | }); | ||
</script> | |||
r362 | <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; | |||
}; | |||
r298 | |||
r362 | oAC_perms.itemSelectEvent.subscribe(myHandler); | ||
oAC_owner.itemSelectEvent.subscribe(myHandler); | |||
return { | |||
oDS: oDS, | |||
oAC_perms: oAC_perms, | |||
oAC_owner: oAC_owner, | |||
}; | |||
}(); | |||
</script> | |||
</div> | |||
</%def> |