diff options
Diffstat (limited to 'ipa-server/ipa-gui/ipagui')
-rw-r--r-- | ipa-server/ipa-gui/ipagui/forms/group.py | 4 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/groupeditform.kid | 99 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid | 24 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/groupshow.kid | 14 |
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 d3cfda6fc..5c836ec17 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 9f5549669..e543b5fa5 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 d8c20f191..1e24cf14e 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 776b63959..a79f268cc 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/> |