java/code/src/com/redhat/rhn/frontend/taglibs/list/SelectableColumnTag.java | 59 +++++++---
web/html/javascript/check_all.js | 32 ++++-
2 files changed, 70 insertions(+), 21 deletions(-)
New commits:
commit 4c408bbafd329524cded32459d4b683fee3eb336
Author: Partha Aji <paji(a)redhat.com>
Date: Fri Apr 30 17:06:24 2010 -0400
Added code to get checkbox grouping to work
diff --git a/java/code/src/com/redhat/rhn/frontend/taglibs/list/SelectableColumnTag.java b/java/code/src/com/redhat/rhn/frontend/taglibs/list/SelectableColumnTag.java
index 768ea63..4f9cabd 100644
--- a/java/code/src/com/redhat/rhn/frontend/taglibs/list/SelectableColumnTag.java
+++ b/java/code/src/com/redhat/rhn/frontend/taglibs/list/SelectableColumnTag.java
@@ -15,6 +15,8 @@
package com.redhat.rhn.frontend.taglibs.list;
import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.frontend.struts.Expandable;
+import com.redhat.rhn.frontend.taglibs.RhnListTagFunctions;
import org.apache.commons.lang.StringUtils;
@@ -31,7 +33,8 @@ import javax.servlet.jsp.tagext.TagSupport;
public class SelectableColumnTag extends TagSupport {
private static final long serialVersionUID = 2749189931275777440L;
-
+ private static final String CHECKBOX_CLICKED_SCRIPT =
+ "process_checkbox_clicked(this,'%s', this.form.%s, %s)";
private String valueExpr;
private String selectExpr;
private String disabledExpr;
@@ -196,6 +199,7 @@ public class SelectableColumnTag extends TagSupport {
ListTagUtil.write(pageContext, "this.form." +
ListTagUtil.makeSelectedItemsName(listName));
ListTagUtil.write(pageContext, ", this.checked)");
+
ListTagUtil.write(pageContext, "\" />");
}
private void renderCheckbox() throws JspException {
@@ -204,8 +208,7 @@ public class SelectableColumnTag extends TagSupport {
private void render(String value) throws JspException {
writeStartingTd();
- String counterName = "list_sel_" + listName;
- Long id = ListTagUtil.incrementPersistentCounter(pageContext, counterName);
+ String id = ListTagHelper.getObjectId(getCurrent());
renderHiddenItem(id, value);
ListTagUtil.write(pageContext, "<input type=\"checkbox\" ");
if (isSelected()) {
@@ -222,9 +225,8 @@ public class SelectableColumnTag extends TagSupport {
ListTagUtil.write(pageContext, "value=\"");
ListTagUtil.write(pageContext, value);
ListTagUtil.write(pageContext, "\" ");
- if (rhnSet != null) {
- renderRhnSetOnClick();
- }
+ renderOnClick();
+
ListTagUtil.write(pageContext, "/>");
}
@@ -232,7 +234,7 @@ public class SelectableColumnTag extends TagSupport {
return "list_" + listName + "_sel_all";
}
- private String makeCheckboxId(Long id) {
+ private String makeCheckboxId(String id) {
return "list_" + listName + "_" + id;
}
/**
@@ -240,15 +242,38 @@ public class SelectableColumnTag extends TagSupport {
* //onclick="checkbox_clicked(this, '$rhnSet')"
*
*/
- private void renderRhnSetOnClick() throws JspException {
- ListTagUtil.write(pageContext, " onclick=\"process_checkbox_clicked(this,'");
- ListTagUtil.write(pageContext, rhnSet);
- ListTagUtil.write(pageContext, "',");
- ListTagUtil.write(pageContext, "this.form." + makeSelectAllCheckboxName());
- ListTagUtil.write(pageContext, ")\" ");
+ private void renderOnClick() throws JspException {
+ if (!StringUtils.isBlank(rhnSet)) {
+ ListTagUtil.write(pageContext, " onclick=\"");
+ ListTagUtil.write(pageContext, String.format(CHECKBOX_CLICKED_SCRIPT,
+ rhnSet, makeSelectAllCheckboxName(), getChildIds()));
+ ListTagUtil.write(pageContext, "\" ");
+ }
}
- private void renderHiddenItem(Long listId, String value) throws JspException {
+ private String getChildIds() {
+ Object current = getCurrent();
+ if (RhnListTagFunctions.isExpandable(current)) {
+ StringBuilder buf = new StringBuilder();
+ for (Object child : ((Expandable)current).expand()) {
+ if (buf.length() > 0) {
+ buf.append(",");
+ }
+ buf.append("'");
+ buf.append(makeCheckboxId(ListTagHelper.getObjectId(child)));
+ buf.append("'");
+ }
+
+ buf.insert(0, "[");
+ buf.append("]");
+
+ return buf.toString();
+ }
+ return "[]";
+
+ }
+
+ private void renderHiddenItem(String listId, String value) throws JspException {
ListTagUtil.write(pageContext, "<input type=\"hidden\" ");
ListTagUtil.write(pageContext, "id=\"");
ListTagUtil.write(pageContext, "list_items_" + listName + "_" + listId);
@@ -296,4 +321,10 @@ public class SelectableColumnTag extends TagSupport {
}
ListTagUtil.write(pageContext, ">");
}
+
+ private Object getCurrent() {
+ ListTag parent = (ListTag)
+ BodyTagSupport.findAncestorWithClass(this, ListTag.class);
+ return parent.getCurrentObject();
+ }
}
diff --git a/web/html/javascript/check_all.js b/web/html/javascript/check_all.js
index 62fce00..e4b8281 100644
--- a/web/html/javascript/check_all.js
+++ b/web/html/javascript/check_all.js
@@ -29,6 +29,10 @@ function check_all_on_page(form, set_label) {
}
function process_check_all(set_label, cboxes, flag) {
+ update_server_set("ids", set_label, flag, process_group(set_label, cboxes, flag));
+}
+
+function process_group(set_label, cboxes, flag) {
var i;
var changed = new Array();
@@ -49,8 +53,7 @@ function process_check_all(set_label, cboxes, flag) {
}
cboxes.checked = flag;
}
-
- update_server_set("ids", set_label, flag, changed);
+ return changed;
}
function checkbox_clicked(thebox, set_label) {
@@ -59,10 +62,27 @@ function checkbox_clicked(thebox, set_label) {
form_name = thebox.form.id;
}
var checkall = eval("document.forms['" + form_name + "'].checkall");
- process_checkbox_clicked(thebox, set_label, checkall);
+ process_checkbox_clicked(thebox, set_label, checkall, []);
}
-function process_checkbox_clicked(thebox, set_label, checkall) {
+function process_checkbox_clicked(thebox, set_label, checkall, children) {
+ process_single_checkbox(thebox, set_label, checkall);
+ var a = new Array();
+ a.push(thebox.value);
+
+ var checkboxes = new Array();
+ for (var i = 0; i < children.length; i++) {
+ var checkbox = document.getElementById(children[i]);
+ checkboxes.push(checkbox);
+ a.push(checkbox.value);
+ }
+ if (checkboxes.length > 0) {
+ process_group(set_label, checkboxes, thebox.checked);
+ }
+ update_server_set("ids", set_label, thebox.checked, a);
+}
+
+function process_single_checkbox(thebox, set_label, checkall) {
var form_name = thebox.form.name;
if (form_name == "") {
form_name = thebox.form.id;
@@ -88,15 +108,13 @@ function process_checkbox_clicked(thebox, set_label, checkall) {
all_checked = true;
}
}
- var a = new Array();
- a[0] = thebox.value;
if (checkall) {
checkall.checked = all_checked;
}
- update_server_set("ids", set_label, thebox.checked, a);
}
+
function update_server_set(variable, set_label, checked, values) {
var url = "/rhn/SetItemSelected.do";
body = "set_label=" + set_label + "&";