Files @ e7d7f05217c1
Branch filter:

Location: kallithea/rhodecode/templates/admin/repos/repo_edit.html

Marcin Kuzminski
replaced all decode('utf-8') instances with .decode('utf-8','replace') for more error prof setup,
this way rhodecode could handle displaying non utf8 encoded file paths. This is still an invalid path, but this way we could at least show those paths without errors
## -*- 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'))} 
    &raquo; 
    ${h.link_to(_('Repositories'),h.url('repos'))} 
    &raquo;
    ${_('edit')} &raquo; ${h.link_to(c.repo_name,h.url('summary_home',repo_name=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-checkbox">
                    <label for="enable_statistics">${_('Enable statistics')}:</label>
                </div>
                <div class="checkboxes">
                    ${h.checkbox('enable_statistics',value="True")}
                </div>
            </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>                      
            <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">
                    <%include file="repo_edit_perms.html"/>
                </div>
             
            <div class="buttons">
              ${h.submit('save','Save',class_="ui-button")}
              ${h.reset('reset','Reset',class_="ui-button")}
            </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_member_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 myUsers = ${c.users_array|n};
        	var myGroups = ${c.users_groups_array|n};
            
            // Define a custom search function for the DataSource of users
            var matchUsers = function(sQuery) {
                // Case insensitive matching
                var query = sQuery.toLowerCase();
                var i=0;
                var l=myUsers.length;
                var matches = [];
                
                // Match against each name of each contact
                for(; i<l; i++) {
                    contact = myUsers[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;
            };

            // 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 = {
                fields: ["id", "fname", "lname", "nname"]
            };          
            
            // Instantiate AutoComplete for perms
            var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS);
            membersAC.useShadow = false;
            membersAC.resultTypeList = false;
            
            // Instantiate AutoComplete for owner
            var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS);
            ownerAC.useShadow = false;
            ownerAC.resultTypeList = false;
            

            // Helper highlight 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);
            };
            
            // 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;
                            
            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
                
                //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';
                }
                
            };

            membersAC.itemSelectEvent.subscribe(myHandler);
            ownerAC.itemSelectEvent.subscribe(myHandler);
            
            return {
                memberDS: memberDS,
                ownerDS:  ownerDS,
                membersAC: membersAC,
                ownerAC: ownerAC, 
            };
        }();
            
        </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>${_('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()}
        
        <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>