repo_edit_perms.html
280 lines
| 10.7 KiB
| text/html
|
HtmlLexer
r1015 | <table id="permissions_manage"> | ||
<tr> | |||
<td>${_('none')}</td> | |||
<td>${_('read')}</td> | |||
<td>${_('write')}</td> | |||
<td>${_('admin')}</td> | |||
<td>${_('member')}</td> | |||
<td></td> | |||
</tr> | |||
r1455 | ## USERS | ||
r1015 | %for r2p in c.repo_info.repo_to_perm: | ||
%if r2p.user.username =='default' and c.repo_info.private: | |||
<tr> | |||
<td colspan="4"> | |||
<span class="private_repo_msg"> | |||
${_('private repository')} | |||
</span> | |||
</td> | |||
r1051 | <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url("/images/icons/user.png")}"/>${r2p.user.username}</td> | ||
r1015 | </tr> | ||
%else: | |||
<tr id="id${id(r2p.user.username)}"> | |||
<td>${h.radio('u_perm_%s' % r2p.user.username,'repository.none')}</td> | |||
<td>${h.radio('u_perm_%s' % r2p.user.username,'repository.read')}</td> | |||
<td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td> | |||
<td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td> | |||
r1455 | <td style="white-space: nowrap;"> | ||
<img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username} | |||
</td> | |||
r1015 | <td> | ||
%if r2p.user.username !='default': | |||
<span class="delete_icon action_button" onclick="ajaxActionUser(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')"> | |||
r1378 | ${_('revoke')} | ||
r1015 | </span> | ||
%endif | |||
</td> | |||
</tr> | |||
%endif | |||
%endfor | |||
r1455 | ## USERS GROUPS | ||
r1015 | %for g2p in c.repo_info.users_group_to_perm: | ||
<tr id="id${id(g2p.users_group.users_group_name)}"> | |||
<td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.none')}</td> | |||
<td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.read')}</td> | |||
<td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.write')}</td> | |||
<td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.admin')}</td> | |||
r1455 | <td style="white-space: nowrap;"> | ||
<img style="vertical-align:bottom" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name} | |||
</td> | |||
r1015 | <td> | ||
<span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')"> | |||
r1378 | ${_('revoke')} | ||
r1015 | </span> | ||
</td> | |||
</tr> | |||
%endfor | |||
<tr id="add_perm_input"> | |||
<td>${h.radio('perm_new_member','repository.none')}</td> | |||
<td>${h.radio('perm_new_member','repository.read')}</td> | |||
<td>${h.radio('perm_new_member','repository.write')}</td> | |||
<td>${h.radio('perm_new_member','repository.admin')}</td> | |||
<td class='ac'> | |||
<div class="perm_ac" id="perm_ac"> | |||
${h.text('perm_new_member_name',class_='yui-ac-input')} | |||
${h.hidden('perm_new_member_type')} | |||
<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 member')} | |||
</span> | |||
</td> | |||
</tr> | |||
r1455 | </table> | ||
<script type="text/javascript"> | |||
function ajaxActionUser(user_id, field_id) { | |||
var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}"; | |||
var callback = { | |||
success: function (o) { | |||
var tr = YUD.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); | |||
}; | |||
function ajaxActionUsersGroup(users_group_id,field_id){ | |||
var sUrl = "${h.url('delete_repo_users_group',repo_name=c.repo_name)}"; | |||
var callback = { | |||
success:function(o){ | |||
var tr = YUD.get(String(field_id)); | |||
tr.parentNode.removeChild(tr); | |||
}, | |||
failure:function(o){ | |||
alert("${_('Failed to remove users group')}"); | |||
}, | |||
}; | |||
var postData = '_method=delete&users_group_id='+users_group_id; | |||
var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); | |||
}; | |||
YUE.onDOMReady(function () { | |||
if (!YUD.hasClass('perm_new_member_name', 'error')) { | |||
YUD.setStyle('add_perm_input', 'display', 'none'); | |||
} | |||
YAHOO.util.Event.addListener('add_perm', 'click', function () { | |||
YUD.setStyle('add_perm_input', 'display', ''); | |||
YUD.setStyle('add_perm', 'opacity', '0.6'); | |||
YUD.setStyle('add_perm', 'cursor', 'default'); | |||
}); | |||
}); | |||
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); | |||
if(ownerAC.itemSelectEvent){ | |||
ownerAC.itemSelectEvent.subscribe(myHandler); | |||
} | |||
return { | |||
memberDS: memberDS, | |||
ownerDS: ownerDS, | |||
membersAC: membersAC, | |||
ownerAC: ownerAC, | |||
}; | |||
}(); | |||
</script> |