Files @ 0f35fa0f4eb8
Branch filter:

Location: kallithea/pylons_app/templates/settings/repo_settings.html - annotation

Marcin Kuzminski
fixed some html and styles, added owner into admin repo list
added alert message when using ajax remove user command in permissions
05b212954275
05b212954275
05b212954275
05b212954275
558eb7c5028f
05b212954275
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
05b212954275
05b212954275
558eb7c5028f
05b212954275
05b212954275
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
05b212954275
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
05b212954275
558eb7c5028f
558eb7c5028f
0f35fa0f4eb8
0f35fa0f4eb8
0f35fa0f4eb8
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
05b212954275
05b212954275
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
05b212954275
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
558eb7c5028f
## -*- coding: utf-8 -*-
<%inherit file="/base/base.html"/>

<%def name="title()">
    ${_('Repositories administration')}
</%def>

<%def name="breadcrumbs_links()">
    ${h.link_to(c.repo_info.repo_name,h.url('summary_home',repo_name=c.repo_info.repo_name))} 
    &raquo; 
    ${_('Settings')} 
    
</%def>
<%def name="page_nav()">
    ${self.menu('settings')}
</%def>
<%def name="main()">
<div class="box">
    <!-- box / title -->
    <div class="title">
        ${self.breadcrumbs()}      
    </div>
    ${h.form(url('repo_settings_update', 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 for="">${_('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.repo2perm:
                            %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('update','update',class_="ui-button ui-widget ui-state-default ui-corner-all")}
            </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>
</%def>