WICKET-1069 RFE: DataTable && colgroup
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3d261456 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3d261456 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3d261456 Branch: refs/heads/sandbox/component-queueing-2 Commit: 3d261456f31d8064c75525a9981c52e68d76a22c Parents: 7a4823c Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Feb 20 15:20:35 2014 +0200 Committer: Igor Vaynberg <[email protected]> Committed: Thu Feb 20 23:24:05 2014 -0800 ---------------------------------------------------------------------- .../wicket/examples/repeater/DataTablePage.html | 12 ++- .../wicket/examples/repeater/DataTablePage.java | 15 +++ .../examples/repeater/RepeaterApplication.java | 2 + .../html/repeater/data/table/ColGroup.html | 23 +++++ .../html/repeater/data/table/ColGroup.java | 102 +++++++++++++++++++ .../html/repeater/data/table/DataTable.html | 1 + .../html/repeater/data/table/DataTable.java | 11 +- 7 files changed, 163 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html index 8eb4b70..842cecb 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html @@ -25,6 +25,14 @@ This is a demo of the DataTable (DataView wrapper). Provided features:<br/> </ul> <br/> -<table class="dataview" cellspacing="0" wicket:id="table">[table]</table> + <table class="dataview" cellspacing="0" wicket:id="table">[table]</table> + + <br/> + <hr/> + <br/> + + <span style="font-size: 16px">This is a table that uses <em>org.apache.wicket.extensions.markup.html.repeater.data.table.ColGroup</em> + to style the columns</span>: + <table wicket:id="tableWithColGroup">[table]</table> </wicket:extend> -</html> \ No newline at end of file +</html> http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java index 8640299..46b067d 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java @@ -19,8 +19,10 @@ package org.apache.wicket.examples.repeater; import java.util.ArrayList; import java.util.List; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.ColGroup; import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; @@ -86,5 +88,18 @@ public class DataTablePage extends BasePage dataTable.addBottomToolbar(new ExportToolbar(dataTable).addDataExporter(new CSVDataExporter())); add(dataTable); + + DataTable tableWithColGroup = new DataTable<>("tableWithColGroup", columns, + new SortableContactDataProvider(), 8); + add(tableWithColGroup); + + ColGroup colgroup = tableWithColGroup.getColGroup(); + colgroup.add(AttributeModifier.append("style", "border: solid 1px green;")); + colgroup.addCol(colgroup.new Col(AttributeModifier.append("style", "background-color: lightblue;"))); + colgroup.addCol(colgroup.new Col(AttributeModifier.append("style", "background-color: lightgreen"))); + colgroup.addCol(colgroup.new Col(AttributeModifier.append("style", "background-color: pink"))); + colgroup.addCol(colgroup.new Col(AttributeModifier.append("style", "background-color: yellow"))); + colgroup.addCol(colgroup.new Col(AttributeModifier.append("span", "2"), + AttributeModifier.append("style", "background-color: #CC6633"))); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeaterApplication.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeaterApplication.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeaterApplication.java index 17e3831..cd9c0ea 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeaterApplication.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeaterApplication.java @@ -47,6 +47,8 @@ public class RepeaterApplication extends WebApplication getDebugSettings().setDevelopmentUtilitiesEnabled(true); getRequestCycleSettings().addResponseFilter(new ServerAndClientTimeFilter()); + + getMarkupSettings().setStripWicketTags(true); } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.html ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.html b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.html new file mode 100644 index 0000000..73c0df4 --- /dev/null +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.html @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!DOCTYPE html> +<html xmlns:wicket="http://wicket.apache.org"> +<wicket:panel> + <col wicket:id="col"/> +</wicket:panel> +</html> http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.java new file mode 100644 index 0000000..d19be5f --- /dev/null +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ColGroup.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.extensions.markup.html.repeater.data.table; + +import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.markup.repeater.RepeatingView; + +/** + * A panel that renders <colgroup> with <col> elements + * inside it. + * + * The columns can be used to style the whole table column. + * + * <p> + * <strong>Important</strong>: this component requires + * {@link org.apache.wicket.settings.MarkupSettings#getStripWicketTags()} + * to return {@code true}, otherwise the browsers break the rendering of + * the HTML elements. For example Google Chrome renders two <colgroup> + * elements. + * </p> + * + * @see DataTable#getColGroup() + */ +public class ColGroup extends Panel +{ + private static final long serialVersionUID = 1L; + + private final RepeatingView colgroupCols; + + public ColGroup(String id) + { + super(id); + + this.colgroupCols = new RepeatingView("col"); + add(colgroupCols); + } + + /** + * Adds a column to the group. + * + * <p>Usage: + * <pre> + * <code> + * colgroup.addCol(colgroup.new Col(AttributeModifier.append("span", "2"), + * AttributeModifier.append("style", "background-color: #CC6633"))) + * </code> + * </pre> + * + * </p> + * + * @param column + * The column with the styling behaviors + * @return {@code this}, for method chaining + */ + public ColGroup addCol(Col column) + { + colgroupCols.add(column); + return this; + } + + /** + * Hides the ColGroup if there are no <col>s to render + */ + @Override + protected void onConfigure() + { + super.onConfigure(); + + setVisible(colgroupCols.size() > 0); + } + + public class Col extends WebMarkupContainer + { + private static final long serialVersionUID = 1L; + + public Col(Behavior... behaviors) + { + super(colgroupCols.newChildId()); + + if (behaviors != null) + { + add(behaviors); + } + } + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html index 0be6c56..bd98744 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html @@ -17,6 +17,7 @@ --> <wicket:panel xmlns:wicket="http://wicket.apache.org"> <caption wicket:id="caption"></caption> +<colgroup wicket:id="colGroup"></colgroup> <thead wicket:id="topToolbars"> <wicket:container wicket:id="toolbars"></wicket:container> </thead> http://git-wip-us.apache.org/repos/asf/wicket/blob/3d261456/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java index a37fd4b..34935d1 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java @@ -113,6 +113,8 @@ public class DataTable<T, S> extends Panel implements IPageableItems private final Caption caption; + private final ColGroup colGroup; + private long toolbarIdCounter; /** @@ -138,6 +140,8 @@ public class DataTable<T, S> extends Panel implements IPageableItems this.columns = columns; this.caption = new Caption("caption", getCaptionModel()); add(caption); + this.colGroup = new ColGroup("colGroup"); + add(colGroup); body = newBodyContainer("body"); datagrid = new DataGridView<T>("rows", columns, dataProvider) { @@ -191,6 +195,11 @@ public class DataTable<T, S> extends Panel implements IPageableItems return null; } + public final ColGroup getColGroup() + { + return colGroup; + } + /** * Create the MarkupContainer for the <tbody> tag. Users may subclass it to provide their own * (modified) implementation. @@ -512,7 +521,7 @@ public class DataTable<T, S> extends Panel implements IPageableItems * A caption for the table. It renders itself only if {@link DataTable#getCaptionModel()} has * non-empty value. */ - private static class Caption extends Label + public static class Caption extends Label { /** */
