summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-09-28 08:53:10 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-09-28 08:53:10 -0700
commitafb9a3c0a95166947a16e6772be5f4031aeb1fb8 (patch)
tree5d9426268bab06e332bb422128e7b4c829c780dc
parentd13c6efc40d0e94f056dca2b0869b7443afb6b39 (diff)
downloadfreeipa.git-afb9a3c0a95166947a16e6772be5f4031aeb1fb8.tar.gz
freeipa.git-afb9a3c0a95166947a16e6772be5f4031aeb1fb8.tar.xz
freeipa.git-afb9a3c0a95166947a16e6772be5f4031aeb1fb8.zip
Refactoring to allow better member rendering.
Created a MemberDisplayInfo to hold the info needed to render a member. Changed round trip persistance to use that class. Created a single renderMemberInfo method to render the members. Changed dynamic as well as static lists to use renderMemberInfo. Lastly, render groups members in italics. Change view group to render group members in italics.
-rw-r--r--ipa-server/ipa-gui/ipagui/forms/group.py4
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupeditform.kid99
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid24
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupshow.kid14
4 files changed, 104 insertions, 37 deletions
diff --git a/ipa-server/ipa-gui/ipagui/forms/group.py b/ipa-server/ipa-gui/ipagui/forms/group.py
index d3cfda6f..5c836ec1 100644
--- a/ipa-server/ipa-gui/ipagui/forms/group.py
+++ b/ipa-server/ipa-gui/ipagui/forms/group.py
@@ -11,7 +11,7 @@ class GroupFields():
group_orig = widgets.HiddenField(name="group_orig")
member_data = widgets.HiddenField(name="member_data")
- dn_to_cn_json = widgets.HiddenField(name="dn_to_cn_json")
+ dn_to_info_json = widgets.HiddenField(name="dn_to_info_json")
class GroupNewValidator(validators.Schema):
cn = validators.String(not_empty=True)
@@ -48,7 +48,7 @@ class GroupEditForm(widgets.Form):
fields = [GroupFields.gidnumber, GroupFields.description,
GroupFields.cn_hidden, GroupFields.editprotected_hidden,
GroupFields.group_orig, GroupFields.member_data,
- GroupFields.dn_to_cn_json]
+ GroupFields.dn_to_info_json]
validator = GroupEditValidator()
diff --git a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
index 9f554966..e543b5fa 100644
--- a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
@@ -11,9 +11,21 @@ from ipagui.helpers import ipahelper
<?python searchurl = tg.url('/groupedit_search') ?>
<script type="text/javascript">
+
+ // Stored as the values in the dn_to_info_hash
+ MemberDisplayInfo = Class.create();
+ MemberDisplayInfo.prototype = {
+ initialize: function(name, descr, type) {
+ this.name = name;
+ this.descr = descr;
+ this.type = type;
+ },
+ };
+
+
// this is used for round-trip recontruction of the names.
// the hidden fields only contain dns.
- var dn_to_cn_hash = new Hash();
+ var dn_to_info_hash = new Hash();
// used to filter search results.
// records dns already in the group
@@ -41,14 +53,33 @@ from ipagui.helpers import ipahelper
}
/*
+ * Renders the information about the member into the passed in
+ * element. This is used by addmember and removemember to
+ * consistently create the dom for the member information
+ * (name, descr) and add icons/font changes correct for each type.
+ */
+ function renderMemberInfo(newdiv, info) {
+ if (info.type == "user") {
+ newdiv.appendChild(document.createTextNode(
+ info.name.escapeHTML() + " " + info.descr.escapeHTML() + " "));
+ } else if (info.type == "group") {
+ ital = document.createElement('i');
+ ital.appendChild(document.createTextNode(
+ info.name.escapeHTML() + " " +
+ info.descr.escapeHTML() + " "));
+ newdiv.appendChild(ital);
+ }
+ }
+
+ /*
* Callback used for afterFinish in scriptaculous effect
*/
function removeElement(effect) {
Element.remove(effect.element);
}
- function addmember(dn, cn) {
- dn_to_cn_hash[dn] = cn;
+ function addmember(dn, info) {
+ dn_to_info_hash[dn] = info;
if ((added_hash[dn] == 1) || (member_hash[dn] == 1)) {
return null;
@@ -56,8 +87,7 @@ from ipagui.helpers import ipahelper
added_hash[dn] = 1;
var newdiv = document.createElement('div');
- newdiv.appendChild(document.createTextNode(
- cn.escapeHTML() + " "));
+ renderMemberInfo(newdiv, info);
var undolink = document.createElement('a');
undolink.setAttribute('href', '');
@@ -80,8 +110,8 @@ from ipagui.helpers import ipahelper
return newdiv
}
- function addmemberHandler(element, dn, cn) {
- var newdiv = addmember(dn, cn)
+ function addmemberHandler(element, dn, info) {
+ var newdiv = addmember(dn, info)
if (newdiv != null) {
new Effect.Fade(Element.up(element));
new Effect.Appear(newdiv);
@@ -89,12 +119,11 @@ from ipagui.helpers import ipahelper
}
}
- function removemember(dn, cn) {
- dn_to_cn_hash[dn] = cn;
+ function removemember(dn, info) {
+ dn_to_info_hash[dn] = info;
var newdiv = document.createElement('div');
- newdiv.appendChild(document.createTextNode(
- cn.escapeHTML() + " "));
+ renderMemberInfo(newdiv, info);
orig_div_id = dn_to_member_div_id[dn];
var undolink = document.createElement('a');
@@ -118,8 +147,8 @@ from ipagui.helpers import ipahelper
return newdiv
}
- function removememberHandler(element, dn, cn) {
- var newdiv = removemember(dn, cn);
+ function removememberHandler(element, dn, info) {
+ var newdiv = removemember(dn, info);
new Effect.Fade(Element.up(element));
new Effect.Appear(newdiv);
/* Element.up(element).remove(); */
@@ -151,8 +180,8 @@ from ipagui.helpers import ipahelper
}
function preSubmit() {
- var json = dn_to_cn_hash.toJSON();
- $('form_dn_to_cn_json').value = json;
+ var json = dn_to_info_hash.toJSON();
+ $('form_dn_to_info_json').value = json;
return true;
}
</script>
@@ -225,16 +254,30 @@ from ipagui.helpers import ipahelper
member_uid = member.get('uid')
if member_uid:
- member_cn = "%s %s (%s)" % (member.get('givenName'),
- member.get('sn'),
- member.get('uid'))
+ member_name = "%s %s" % (member.get('givenName'),
+ member.get('sn'))
+ member_descr = "(%s)" % member.get('uid')
+ member_type = "user"
else:
- member_cn = "%s [group]" % member.get('cn')
- member_cn_esc = ipahelper.javascript_string_escape(member_cn)
+ member_name = member.get('cn')
+ member_descr = "[group]"
+ member_type = "group"
+ member_name_esc = ipahelper.javascript_string_escape(member_name)
+ member_descr_esc = ipahelper.javascript_string_escape(member_descr)
+ member_type_esc = ipahelper.javascript_string_escape(member_type)
?>
- ${member_cn}
+ <span id="member-info-${div_counter}"></span>
+ <script type="text/javascript">
+ renderMemberInfo($('member-info-${div_counter}'),
+ new MemberDisplayInfo('${member_name_esc}',
+ '${member_descr_esc}',
+ '${member_type_esc}'));
+ </script>
<a href="#"
- onclick="removememberHandler(this, '${member_dn_esc}', '${member_cn_esc}');
+ onclick="removememberHandler(this, '${member_dn_esc}',
+ new MemberDisplayInfo('${member_name_esc}',
+ '${member_descr_esc}',
+ '${member_type_esc}'));
return false;"
>remove</a>
<script type="text/javascript">
@@ -295,8 +338,8 @@ from ipagui.helpers import ipahelper
* This section restores the contents of the add and remove lists
* dynamically if we have to refresh the page
*/
- if ($('form_dn_to_cn_json').value != "") {
- dn_to_cn_hash = new Hash($('form_dn_to_cn_json').value.evalJSON());
+ if ($('form_dn_to_info_json').value != "") {
+ dn_to_info_hash = new Hash($('form_dn_to_info_json').value.evalJSON());
}
if ($('form_editprotected').value != "") {
@@ -320,8 +363,8 @@ from ipagui.helpers import ipahelper
dnadd_esc = ipahelper.javascript_string_escape(dnadd)
?>
var dn = "${dnadd_esc}";
- var cn = dn_to_cn_hash[dn];
- var newdiv = addmember(dn, cn);
+ var info = dn_to_info_hash[dn];
+ var newdiv = addmember(dn, info);
if (newdiv != null) {
newdiv.style.display = 'block';
}
@@ -332,8 +375,8 @@ from ipagui.helpers import ipahelper
dndel_esc = ipahelper.javascript_string_escape(dndel)
?>
var dn = "${dndel_esc}";
- var cn = dn_to_cn_hash[dn];
- var newdiv = removemember(dn, cn);
+ var info = dn_to_info_hash[dn];
+ var newdiv = removemember(dn, info);
newdiv.style.display = 'block';
orig_div_id = dn_to_member_div_id[dn]
$(orig_div_id).style.display = 'none';
diff --git a/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid b/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid
index d8c20f19..1e24cf14 100644
--- a/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid
@@ -20,11 +20,18 @@ from ipagui.helpers import ipahelper
ent_dn_esc = ipahelper.javascript_string_escape(entity.dn)
ent_uid = entity.uid
if ent_uid:
- ent_cn = "%s %s (%s)" % (entity.givenName, entity.sn, entity.uid)
+ ent_name = "%s %s" % (entity.givenName, entity.sn)
+ ent_descr = "(%s)" % entity.uid
+ ent_type = "user"
else:
- ent_cn = "%s [group]" % entity.cn
- ent_cn_esc = ipahelper.javascript_string_escape(ent_cn)
+ ent_name = entity.cn
+ ent_descr = "[group]"
+ ent_type = "group"
+ ent_name_esc = ipahelper.javascript_string_escape(ent_name)
+ ent_descr_esc = ipahelper.javascript_string_escape(ent_descr)
+ ent_type_esc = ipahelper.javascript_string_escape(ent_type)
?>
+ <span id="search-info-${search_div_counter}"></span>
<script type="text/javascript">
if ((added_hash["${ent_dn_esc}"] == 1) ||
(member_hash["${ent_dn_esc}"] == 1)) {
@@ -32,10 +39,17 @@ from ipagui.helpers import ipahelper
} else {
results_counter = results_counter + 1;
}
+
+ renderMemberInfo($('search-info-${search_div_counter}'),
+ new MemberDisplayInfo('${ent_name_esc}',
+ '${ent_descr_esc}',
+ '${ent_type_esc}'));
</script>
- ${ent_cn}
<a href=""
- onclick="addmemberHandler(this, '${ent_dn_esc}', '${ent_cn_esc}');
+ onclick="addmemberHandler(this, '${ent_dn_esc}',
+ new MemberDisplayInfo('${ent_name_esc}',
+ '${ent_descr_esc}',
+ '${ent_type_esc}'));
return false;"
>add</a>
<?python
diff --git a/ipa-server/ipa-gui/ipagui/templates/groupshow.kid b/ipa-server/ipa-gui/ipagui/templates/groupshow.kid
index 776b6395..a79f268c 100644
--- a/ipa-server/ipa-gui/ipagui/templates/groupshow.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/groupshow.kid
@@ -40,14 +40,24 @@
if member_uid:
member_cn = "%s %s" % (member.get('givenName'), member.get('sn'))
member_desc = "(%s)" % member_uid
+ member_type = "user"
view_url = tg.url('usershow', uid=member_uid)
else:
member_cn = "%s" % member.get('cn')
member_desc = "[group]"
+ member_type = "group"
view_url = tg.url('groupshow', cn=member_cn)
?>
- <a href="${view_url}"
- >${member_cn}</a> ${member_desc}
+ <span py:if='member_type == "user"'>
+ <a href="${view_url}"
+ >${member_cn}</a> ${member_desc}
+ </span>
+ <span py:if='member_type == "group"'>
+ <i>
+ <a href="${view_url}"
+ >${member_cn}</a> ${member_desc}
+ </i>
+ </span>
</div>
<br/>