Mercurial > kallithea
view pylons_app/templates/admin/repos/repo_edit.html @ 299:d303aacb3349
repos crud controllers - change id into repo_name for compatability, added ajax repo perm user function variuos html fixes, permissions forms and managment fixes.
Added permission fetching for each request in AuthUser instance
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 28 Jun 2010 13:54:47 +0200 |
parents | 15e96b5a2685 |
children | cec5cbc956c0 |
line wrap: on
line source
## -*- coding: utf-8 -*- <%inherit file="/base/base.html"/> <%def name="title()"> ${_('Repositories administration')} </%def> <%def name="breadcrumbs()"> ${h.link_to(u'Admin',h.url('admin_home'))} / ${_('Repos')} </%def> <%def name="page_nav()"> ${self.menu('admin')} ${self.submenu('repos')} </%def> <%def name="main()"> <div> <h2>${_('Repositories')} - ${_('edit')} "${c.repo_name}"</h2> ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='put')} <table> <tr> <td>${_('Name')}</td> <td>${h.text('repo_name',size="28")}</td> <td>${self.get_form_error('repo_name')}</td> </tr> <tr> <td>${_('Description')}</td> <td>${h.textarea('description',cols=32,rows=5)}</td> <td>${self.get_form_error('description')}</td> </tr> <tr> <td>${_('Private')}</td> <td>${h.checkbox('private',value="True")}</td> <td>${self.get_form_error('private')}</td> </tr> <tr> <td>${_('Owner')}</td> <td class='ac'> <div id="perm_ac"> ${h.text('user',class_='yui-ac-input')} <div id="owner_container"></div> </div> </td> <td>${self.get_form_error('user')}</td> </tr> <tr> <td>${_('Permissions')}</td> <td> <table> <tr> <td>${_('none')}</td> <td>${_('read')}</td> <td>${_('write')}</td> <td>${_('admin')}</td> <td>${_('user')}</td> </tr> %for r2p in c.repo_info.repo2perm: %if r2p.user.username =='default' and c.repo_info.private: <tr> <td colspan="4"> <span style="font-size: 0.8em">${_('disabled for private repository')}</span></td> <td>${r2p.user.username}</td> </tr> %else: <tr 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(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){ YAHOO.util.Dom.get(String(field_id)).innerHTML = '<td colspan="6"></td>'; }}; 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 <% if not hasattr(c,'form_errors'): d = 'display:none;' else: d='' %> <tr id="add_perm_input" style="${d}"> <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 id="perm_ac"> ${h.text('perm_new_user_name',class_='yui-ac-input')} <div id="perm_container"></div> </div> </td> <td>${self.get_form_error('perm_new_user_name')}</td> </tr> <tr> <td colspan="4"> <span id="add_perm" class="add_icon" style="cursor: pointer;"> ${_('Add another user')} </span> </td> </tr> </table> </td> </tr> <tr> <td></td> <td>${h.submit('update','update')}</td> </tr> </table> ${h.end_form()} <script type="text/javascript"> YAHOO.util.Event.onDOMReady(function(){ var D = YAHOO.util.Dom; 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> </%def>