From b06fba31c6adeb9c48653f2c041d4078e40fd4e2 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 19 Feb 2015 14:26:19 +0100 Subject: [PATCH] OO-1297: in flexi table, make toggling of the multiselection checkbox reflects with ajax to the server model --- .../table/FlexiTableClassicRenderer.java | 6 +++- .../elements/table/FlexiTableElementImpl.java | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java index 961867b2d62..819cfd493f7 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java @@ -134,6 +134,7 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); FlexiTableColumnModel columnsModel = ftE.getTableDataModel().getTableColumnModel(); int numOfCols = columnsModel.getColumnCount(); + Form theForm = ftE.getRootForm(); // use alternating css class int numOfColumns = 0; @@ -142,7 +143,10 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co if(ftE.isMultiSelect()) { target.append("<td>") - .append("<input type='checkbox' name='tb_ms' value='").append(rowIdPrefix).append(row).append("'"); + .append("<input type='checkbox' name='tb_ms' value='").append(rowIdPrefix).append(row).append("'") + .append(" onclick=\"javascript:") + .append(FormJSHelper.getXHRFnCallFor(theForm, ftC.getFormDispatchId(), 1, new NameValuePair("chkbox", Integer.toString(row)))) + .append("\""); if(ftE.isMultiSelectedIndex(row)) { target.append(" checked='checked'"); } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java index 2f0271c0fb6..e50f08f1560 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java @@ -686,8 +686,11 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle String sort = form.getRequestParameter("sort"); String filter = form.getRequestParameter("filter"); String pagesize = form.getRequestParameter("pagesize"); + String checkbox = form.getRequestParameter("chkbox"); if("undefined".equals(dispatchuri)) { evalSearchRequest(ureq); + } else if(StringHelper.containsNonWhitespace(checkbox)) { + toogleSelectIndex(checkbox); } else if(StringHelper.containsNonWhitespace(page)) { int p = Integer.parseInt(page); setPage(p); @@ -1222,6 +1225,31 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle return multiSelectedIndex != null && multiSelectedIndex.contains(new Integer(index)); } + protected void toogleSelectIndex(String selection) { + if(multiSelectedIndex == null) { + multiSelectedIndex = new HashSet<Integer>(); + } + + String rowStr; + int index = selection.lastIndexOf('-'); + if(index > 0 && index+1 < selection.length()) { + rowStr = selection.substring(index+1); + } else { + rowStr = selection; + } + + try { + Integer row = new Integer(rowStr); + if(multiSelectedIndex.contains(row)) { + multiSelectedIndex.remove(row); + } else { + multiSelectedIndex.add(row); + } + } catch (NumberFormatException e) { + //can happen + } + } + protected void setMultiSelectIndex(String[] selections) { if(multiSelectedIndex == null) { multiSelectedIndex = new HashSet<Integer>(); -- GitLab