[Freeipa-devel] [PATCH] group refinements
Kevin McCarthy
kmccarth at redhat.com
Mon Sep 17 22:34:57 UTC 2007
This patch continues the refinements to group editing:
- prevent double adds
- search indication while in progress
- filter exising entries from search results
- correct calculation of result counter after filtering
-Kevin
-------------- next part --------------
# HG changeset patch
# User Kevin McCarthy <kmccarth at redhat.com>
# Date 1190067851 25200
# Node ID a2db36c1fc6c85bc41ab0fab14aa0b3c0757012f
# Parent 9a39b5ad527aeaae93a0359bd1ca89ae5652bc3c
Prevent members from being added added twice.
Display search message while in progress.
Correctly calculate number of search results after filtering.
diff -r 9a39b5ad527a -r a2db36c1fc6c ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
--- a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid Mon Sep 17 11:46:48 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid Mon Sep 17 15:24:11 2007 -0700
@@ -10,6 +10,15 @@
// this is used for round-trip recontruction of the names.
// the hidden fields only contain uids.
var uid_to_cn_hash = new Hash();
+
+ // used to filter search results.
+ // records uids already in the group
+ var member_hash = new Hash();
+
+ // used to prevent double adding
+ // records uid to be added
+ var added_hash = new Hash();
+
function toggleProtectedFields(checkbox) {
var gidnumberField = $('form_gidnumber');
@@ -30,6 +39,11 @@
function adduser(uid, cn) {
uid_to_cn_hash[uid] = cn;
+ if ((added_hash[uid] == 1) || (member_hash[uid] == 1)) {
+ return null;
+ }
+ added_hash[uid] = 1;
+
var newdiv = document.createElement('div');
newdiv.appendChild(document.createTextNode(
cn.escapeHTML() + " (" + uid.escapeHTML() + ") "));
@@ -38,6 +52,7 @@
undolink.setAttribute('href', '');
undolink.setAttribute('onclick',
'new Effect.Fade(Element.up(this), {afterFinish: removeElement});' +
+ 'added_hash.remove("' + uid + '");' +
'return false;');
undolink.appendChild(document.createTextNode("undo"));
newdiv.appendChild(undolink);
@@ -56,9 +71,11 @@
function adduserHandler(element, uid, cn) {
var newdiv = adduser(uid, cn)
- new Effect.Fade(Element.up(element));
- new Effect.Appear(newdiv);
- /* Element.up(element).remove(); */
+ if (newdiv != null) {
+ new Effect.Fade(Element.up(element));
+ new Effect.Appear(newdiv);
+ /* Element.up(element).remove(); */
+ }
}
function removeuser(uid, cn) {
@@ -112,10 +129,12 @@
}
function doSearch() {
+ $('searchresults').update("Searching...");
new Ajax.Updater('searchresults',
'${searchurl}',
{ asynchronous:true,
- parameters: { uid: $('uid').value } });
+ parameters: { uid: $('uid').value },
+ evalScripts: true });
return false;
}
@@ -192,11 +211,14 @@
member_name = "%s %s" % (member.get('givenname', ''),
member.get('sn', ''))
?>
- ${member_name}
+ ${member_name} (${member_uid})
<a href="#"
onclick="removeuserHandler(this, '${member_uid}', '${member_name}');
return false;"
>remove</a>
+ <script type="text/javascript">
+ member_hash["${member_uid}"] = 1;
+ </script>
</div>
</div>
@@ -267,7 +289,9 @@
var uid = "${uidadd}";
var cn = uid_to_cn_hash[uid];
var newdiv = adduser(uid, cn);
- newdiv.style.display = 'block';
+ if (newdiv != null) {
+ newdiv.style.display = 'block';
+ }
</script>
<script py:for="uiddel in uiddels">
diff -r 9a39b5ad527a -r a2db36c1fc6c ipa-server/ipa-gui/ipagui/templates/userlistajax.kid
--- a/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid Mon Sep 17 11:46:48 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid Mon Sep 17 15:24:11 2007 -0700
@@ -1,14 +1,33 @@
<div xmlns:py="http://purl.org/kid/ns#">
+ <div id="search-results-count">
+ </div>
+ <script type="text/javascript">
+ search_string = "${uid}";
+ results_counter = 0;
+ </script>
<div py:if='(users != None) and (len(users) > 0)'>
- <div>${len(users)} results returned:</div>
- <div py:for="user in users">
+ <div py:for="user in users" id="search-${user.uid}">
+ <script type="text/javascript">
+ if ((added_hash["${user.uid}"] == 1) ||
+ (member_hash["${user.uid}"] == 1)) {
+ $("search-${user.uid}").style.display = 'none';
+ } else {
+ results_counter = results_counter + 1;
+ }
+ </script>
${user.givenName} ${user.sn} (${user.uid})
<a href=""
onclick="adduserHandler(this, '${user.uid}', '${user.cn}'); return false;"
>add</a>
</div>
</div>
- <div py:if='(users != None) and (len(users) == 0)'>
- No results found for "${uid}"
- </div>
+ <script type="text/javascript">
+ if (results_counter == 0) {
+ $('search-results-count').appendChild(document.createTextNode(
+ "No results found for " + search_string));
+ } else {
+ $('search-results-count').appendChild(document.createTextNode(
+ "" + results_counter + " results found:"));
+ }
+ </script>
</div>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 2228 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20070917/8a129d1d/attachment.bin>
More information about the Freeipa-devel
mailing list