Author: konstantin.mishin
Date: 2010-05-20 12:21:07 -0400 (Thu, 20 May 2010)
New Revision: 17166
Modified:
root/examples-sandbox/trunk/components/tables/src/main/java/org/richfaces/demo/DataBean.java
root/examples-sandbox/trunk/components/tables/src/main/webapp/extendedtable.xhtml
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.css
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.js
root/ui-sandbox/tables/trunk/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java
Log:
RF-8659
Modified:
root/examples-sandbox/trunk/components/tables/src/main/java/org/richfaces/demo/DataBean.java
===================================================================
---
root/examples-sandbox/trunk/components/tables/src/main/java/org/richfaces/demo/DataBean.java 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/examples-sandbox/trunk/components/tables/src/main/java/org/richfaces/demo/DataBean.java 2010-05-20
16:21:07 UTC (rev 17166)
@@ -29,6 +29,7 @@
private String operation = "operation";
+ private boolean rendered = true;
public String getTarget() {
return target;
@@ -117,4 +118,12 @@
public Date getDate() {
return new Date();
}
+
+ public void setRendered(boolean rendered) {
+ this.rendered = rendered;
+ }
+
+ public boolean isRendered() {
+ return rendered;
+ }
}
Modified:
root/examples-sandbox/trunk/components/tables/src/main/webapp/extendedtable.xhtml
===================================================================
---
root/examples-sandbox/trunk/components/tables/src/main/webapp/extendedtable.xhtml 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/examples-sandbox/trunk/components/tables/src/main/webapp/extendedtable.xhtml 2010-05-20
16:21:07 UTC (rev 17166)
@@ -4,6 +4,7 @@
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich">
<!--
@@ -48,6 +49,11 @@
<f:ajax render="extendedDataTable" />
</h:selectBooleanCheckbox>
<br />
+ <h:outputText value="Render footer" />
+ <h:selectBooleanCheckbox value="#{dataBean.rendered}">
+ <f:ajax render="extendedDataTable" />
+ </h:selectBooleanCheckbox>
+ <br />
JS API
<script type="text/javascript">
<!--
@@ -73,30 +79,36 @@
<f:facet name="noData">
<h:outputText value="There isn't data." style="border: solid
black 1px;"/>
</f:facet>
- <rich:column >
+ <rich:column id="rkv">
<f:facet name="header">
<h:outputText value="Index"/>
</f:facet>
<h:outputText value="#{rkv}" />
- <f:facet name="footer">
- <h:outputText value="index"/>
- </f:facet>
+ <c:if test="#{dataBean.rendered}">
+ <f:facet name="footer">
+ <h:outputText id="footerFacet" value="index"/>
+ </f:facet>
+ </c:if>
</rich:column>
<rich:column id="column_name"
filterExpression="#{fn:containsIgnoreCase(record.name, fv)}"
sortBy="#{record.name}">
<f:facet name="header">
<h:outputText id="columnHeader1" value="Column Header
Facet"/>
</f:facet>
<h:outputText value="#{record.name}" />
- <f:facet name="footer">
- <h:outputText id="columnFooter1" value="Column Footer
Facet"/>
- </f:facet>
+ <c:if test="#{dataBean.rendered}">
+ <f:facet name="footer">
+ <h:outputText id="columnFooter1" value="Column Footer
Facet"/>
+ </f:facet>
+ </c:if>
</rich:column>
<rich:column id="column_title" width="200px"
sortBy="#{record.title}">
<h:outputText value="#{record.title}" />
- <f:facet name="footer">
- <h:outputText id="columnFooter2" value="Column Footer
Facet2"/>
- </f:facet>
+ <c:if test="#{dataBean.rendered}">
+ <f:facet name="footer">
+ <h:outputText id="columnFooter2" value="Column Footer
Facet2"/>
+ </f:facet>
+ </c:if>
</rich:column>
<rich:column id="column_email" width="300px">
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2010-05-20
16:21:07 UTC (rev 17166)
@@ -112,7 +112,10 @@
boolean result = false;
while (columns.hasNext() && !result) {
UIComponent component = columns.next();
- result = (component.isRendered() && null !=
component.getFacet(facetName));
+ if (component.isRendered()) {
+ UIComponent facet = component.getFacet(facetName);
+ result = facet != null && facet.isRendered();
+ }
}
return result;
}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-05-20
16:21:07 UTC (rev 17166)
@@ -201,6 +201,18 @@
}
+ private void encodeEmptyFooterCell(FacesContext context, ResponseWriter writer,
UIComponent column)
+ throws IOException {
+ if (column.isRendered()) {
+ writer.startElement(HTML.TD_ELEM, column);
+ writer.startElement(HTML.DIV_ELEM, column);
+ writer.writeAttribute(HTML.CLASS_ATTRIBUTE,
"rich-extable-empty-footer-cell rich-extable-cell-width-"
+ + column.getId(), null);
+ writer.endElement(HTML.DIV_ELEM);
+ writer.endElement(HTML.TD_ELEM);
+ }
+ }
+
private void encodeHeaderOrFooterCell(FacesContext context, ResponseWriter writer,
UIComponent column,
String facetName) throws IOException {
if (column.isRendered()) {
@@ -237,7 +249,8 @@
FacesContext context = state.getContext();
ResponseWriter writer = context.getResponseWriter();
UIDataTableBase table = state.getRow();
- if (table.isColumnFacetPresent(name)) {
+ boolean columnFacetPresent = table.isColumnFacetPresent(name);
+ if (columnFacetPresent || "footer".equals(name)) {
writer.startElement(HTML.DIV_ELEM, table);
writer.writeAttribute(HTML.CLASS_ATTRIBUTE,
HtmlUtil.concatClasses("rich-extable-" + name, (String) table
.getAttributes().get(name + "Class")), null);
@@ -278,7 +291,11 @@
writer.startElement(HTML.TBOBY_ELEMENT, table);
writer.startElement(HTML.TR_ELEMENT, table);
while (columns.hasNext()) {
- encodeHeaderOrFooterCell(context, writer, columns.next(), name);
+ if(columnFacetPresent) {
+ encodeHeaderOrFooterCell(context, writer, columns.next(),
name);
+ } else {
+ encodeEmptyFooterCell(context, writer, columns.next());
+ }
}
writer.endElement(HTML.TR_ELEMENT);
writer.endElement(HTML.TBOBY_ELEMENT);
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.css
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.css 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.css 2010-05-20
16:21:07 UTC (rev 17166)
@@ -103,6 +103,11 @@
border-right: 1px solid #C4C0C9;
}
+.rich-extable-empty-footer-cell{
+ border-right: 1px solid #C4C0C9;
+ height: 1px;
+}
+
.rich-extable-cell-content, .rich-extable-header-cell-content,
.rich-extable-footer-cell-content{
padding: 2px;
}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.js
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.js 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/ui-sandbox/tables/trunk/ui/src/main/resources/META-INF/resources/extendedDataTable.js 2010-05-20
16:21:07 UTC (rev 17166)
@@ -37,7 +37,6 @@
richfaces.ExtendedDataTable = function(id, rowCount, ajaxFunction, ajaxParameters) {
var WIDTH_CLASS_NAME_BASE = "rich-extable-cell-width-";
var MIN_WIDTH = 20;
- var idSuffixs = [":header", ":footer"]; //TODO Not use idSuffixs
var element = document.getElementById(id);
var bodyElement = document.getElementById(id + ":b");
@@ -54,11 +53,13 @@
var frozenColumnCount = frozenHeaderPartElement ?
frozenHeaderPartElement.firstChild.rows[0].cells.length : 0;//TODO
Richfaces.firstDescendant;
if (contentElement) {
- idSuffixs[idSuffixs.length] = ":body";
var spacerElement = contentElement.firstChild;//TODO this.marginElement =
Richfaces.firstDescendant(this.contentElement);
var dataTableElement = contentElement.lastChild;//TODO this.dataTableElement =
Richfaces.lastDescendant(this.contentElement);
var rows = document.getElementById(id +
":body").firstChild.rows.length;//TODO Richfaces.firstDescendant;
}
+
+ var parts = jQuery(element).find(".rich-extable-part");
+
var scrollElement = document.getElementById(id + ":footer");
var resizeData = {};
@@ -79,9 +80,15 @@
var updateLayout = function() {
var offsetWidth = frozenHeaderPartElement ? frozenHeaderPartElement.offsetWidth : 0;
var width = Math.max(0, element.clientWidth - offsetWidth);
- if (width && scrollElement) {
+ if (width) {
normalPartStyle.width = width + "px";
- normalPartStyle.display = "";
+ normalPartStyle.display = "block";
+ if (scrollElement.clientWidth < scrollElement.scrollWidth
+ && scrollElement.clientHeight == scrollElement.offsetHeight) {
+ scrollElement.style.overflowX = "scroll";
+ } else {
+ scrollElement.style.overflowX = "";
+ }
var delta = scrollElement.firstChild.offsetHeight - scrollElement.clientHeight;
if (delta) {
scrollElement.style.height = scrollElement.offsetHeight + delta;
@@ -101,7 +108,7 @@
};
var adjustResizers = function() {
- var scrollLeft = scrollElement ? scrollElement.scrollLeft : 0;
+ var scrollLeft = scrollElement.scrollLeft;
var clientWidth = element.clientWidth - 3;
var i = 0;
for (; i < frozenColumnCount; i++) {
@@ -137,16 +144,13 @@
}
};
- if (scrollElement) {
- var updateScrollPosition = function() {
- var scrollLeft = scrollElement.scrollLeft;
- for (var i = 0; i < idSuffixs.length; i++) {
- document.getElementById(id + idSuffixs[i]).scrollLeft = scrollLeft;//TODO Not use
getElementById here
- }
- adjustResizers();
- };
- jQuery(scrollElement).bind("scroll", updateScrollPosition);
- }
+ var updateScrollPosition = function() {
+ var scrollLeft = scrollElement.scrollLeft;
+ parts.each(function() {
+ this.scrollLeft = scrollLeft;
+ });
+ adjustResizers();
+ };
var initializeLayout = function() {
//TODO Use "var rowHeight" instead of "dataTableElement.offsetHeight /
rows"
@@ -154,9 +158,7 @@
contentElement.style.height = (rowCount * dataTableElement.offsetHeight / rows) +
"px";
}
updateLayout();
- if (scrollElement) {
- updateScrollPosition(); //TODO Restore horizontal scroll position
- }
+ updateScrollPosition(); //TODO Restore horizontal scroll position
};
var drag = function(event) {
@@ -279,6 +281,7 @@
jQuery(document).ready(initializeLayout);
jQuery(window).bind("resize", updateLayout);
+ jQuery(scrollElement).bind("scroll", updateScrollPosition);
//TODO nick - use end() or alike functions
jQuery(element).children(".rich-extable-header").find(".rich-extable-resizer").bind("mousedown",
beginResize);
jQuery(element).children(".rich-extable-header").find(".rich-extable-header-cell").bind("mousedown",
beginReorder);
Modified:
root/ui-sandbox/tables/trunk/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java 2010-05-20
15:11:06 UTC (rev 17165)
+++
root/ui-sandbox/tables/trunk/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java 2010-05-20
16:21:07 UTC (rev 17166)
@@ -34,7 +34,7 @@
*/
public class ExtendedDataTableRendererTest {
- private HtmlUnitEnvironment environment = new HtmlUnitEnvironment();
+ private HtmlUnitEnvironment environment;
@Before
public void setUp() {