Updated Branches: refs/heads/wicket-6.x e624c74d7 -> 1f07c6e19
WICKET-1197 add/remove all buttons in Palette component Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1f07c6e1 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1f07c6e1 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1f07c6e1 Branch: refs/heads/wicket-6.x Commit: 1f07c6e19fd7d741db54229f2058773c6b79e1ae Parents: e624c74 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Wed Dec 18 17:44:13 2013 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Wed Dec 18 17:44:13 2013 +0200 ---------------------------------------------------------------------- .../wicket/examples/compref/PalettePage.html | 3 +- .../wicket/examples/compref/PalettePage.java | 2 +- .../markup/html/form/palette/Palette.html | 12 +-- .../markup/html/form/palette/Palette.java | 89 +++++++++++++++++++- .../markup/html/form/palette/palette.css | 45 +++++++--- .../markup/html/form/palette/palette.js | 32 +++++++ 6 files changed, 162 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/1f07c6e1/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.html ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.html index 41ac8c6..4f0b8ce 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.html +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.html @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> <head> <title>Wicket Examples - component reference</title> @@ -9,7 +10,7 @@ table.palette td.pane { width: 100px; text-align: center; } table.palette td.pane select { width: 200px; } table.palette td.buttons { text-align: center; padding-left: 10px; padding-right: 10px; } - table.palette td.buttons button { width: 40px; height: 40px; } + table.palette td.buttons button { width: 28px; height: 28px; } </style> </head> <body> http://git-wip-us.apache.org/repos/asf/wicket/blob/1f07c6e1/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.java index 655bb25..eb336be 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/PalettePage.java @@ -47,7 +47,7 @@ public class PalettePage extends WicketExamplePage IChoiceRenderer<Person> renderer = new ChoiceRenderer<Person>("fullName", "fullName"); final Palette<Person> palette = new Palette<Person>("palette", new ListModel<Person>( - new ArrayList<Person>()), new CollectionModel<Person>(persons), renderer, 10, true); + new ArrayList<Person>()), new CollectionModel<Person>(persons), renderer, 10, true, true); Form<Void> form = new Form<Void>("form") http://git-wip-us.apache.org/repos/asf/wicket/blob/1f07c6e1/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.html ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.html b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.html index 56e9346..79e6497 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.html +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.html @@ -31,10 +31,12 @@ <select wicket:id="choices" class="choicesSelect">[choices]</select> </td> <td class="buttons"> - <button type="button" wicket:id="addButton" class="button add"><div/></button><br/> - <button type="button" wicket:id="removeButton" class="button remove"><div/></button><br/> - <button type="button" wicket:id="moveUpButton" class="button up"><div/></button><br/> - <button type="button" wicket:id="moveDownButton" class="button down"><div/></button><br/> + <button type="button" wicket:id="addButton" class="button add"><div></div></button><br/> + <button type="button" wicket:id="removeButton" class="button remove"><div></div></button><br/> + <button type="button" wicket:id="moveUpButton" class="button up"><div></div></button><br/> + <button type="button" wicket:id="moveDownButton" class="button down"><div></div></button><br/> + <button type="button" wicket:id="addAllButton" class="button addAll"><div></div></button><br/> + <button type="button" wicket:id="removeAllButton" class="button removeAll"><div></div></button><br/> </td> <td class="pane selection"> <select class="selectionSelect" wicket:id="selection">[selection]</select> @@ -43,4 +45,4 @@ </table> </wicket:panel> </body> -</html> \ No newline at end of file +</html> http://git-wip-us.apache.org/repos/asf/wicket/blob/1f07c6e1/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java index c5ab371..86faba0 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java @@ -40,6 +40,7 @@ import org.apache.wicket.model.ResourceModel; import org.apache.wicket.request.resource.CssResourceReference; import org.apache.wicket.request.resource.JavaScriptResourceReference; import org.apache.wicket.request.resource.ResourceReference; +import org.apache.wicket.resource.JQueryPluginResourceReference; /** @@ -96,6 +97,9 @@ public class Palette<T> extends GenericPanel<Collection<? extends T>> /** if reordering of selected items is allowed in */ private final boolean allowOrder; + /** if add all and remove all are allowed */ + private final boolean allowMoveAll; + /** * recorder component used to track user's selection. it is updated by javascript on changes. */ @@ -114,7 +118,7 @@ public class Palette<T> extends GenericPanel<Collection<? extends T>> private Component selectionComponent; /** reference to the palette's javascript resource */ - private static final ResourceReference JAVASCRIPT = new JavaScriptResourceReference( + private static final ResourceReference JAVASCRIPT = new JQueryPluginResourceReference( Palette.class, "palette.js"); /** reference to the palette's css resource */ @@ -160,12 +164,38 @@ public class Palette<T> extends GenericPanel<Collection<? extends T>> final IModel<? extends Collection<? extends T>> choicesModel, final IChoiceRenderer<T> choiceRenderer, final int rows, final boolean allowOrder) { + this(id, model, choicesModel, choiceRenderer, rows, allowOrder, false); + } + + /** + * Constructor. + * + * @param id + * Component id + * @param choicesModel + * Model representing collection of all available choices + * @param choiceRenderer + * Render used to render choices. This must use unique IDs for the objects, not the + * index. + * @param rows + * Number of choices to be visible on the screen with out scrolling + * @param allowOrder + * Allow user to move selections up and down + * @param allowMoveAll + * Allow user to add or remove all items at once + */ + public Palette(final String id, final IModel<? extends List<? extends T>> model, + final IModel<? extends Collection<? extends T>> choicesModel, + final IChoiceRenderer<T> choiceRenderer, final int rows, final boolean allowOrder, + boolean allowMoveAll) + { super(id, (IModel<Collection<? extends T>>)(IModel<?>)model); this.choicesModel = choicesModel; this.choiceRenderer = choiceRenderer; this.rows = rows; this.allowOrder = allowOrder; + this.allowMoveAll = allowMoveAll; } @Override @@ -199,6 +229,8 @@ public class Palette<T> extends GenericPanel<Collection<? extends T>> add(newRemoveComponent()); add(newUpComponent().setVisible(allowOrder)); add(newDownComponent().setVisible(allowOrder)); + add(newAddAllComponent().setVisible(allowMoveAll)); + add(newRemoveAllComponent().setVisible(allowMoveAll)); add(newAvailableHeader(AVAILABLE_HEADER_ID)); add(newSelectedHeader(SELECTED_HEADER_ID)); @@ -397,6 +429,45 @@ public class Palette<T> extends GenericPanel<Collection<? extends T>> } /** + * factory method for the addAll component + * + * @return addAll component + */ + protected Component newAddAllComponent() + { + return new PaletteButton("addAllButton") + { + private static final long serialVersionUID = 1L; + + protected void onComponentTag(ComponentTag tag) + { + super.onComponentTag(tag); + tag.getAttributes().put("onclick", Palette.this.getAddAllOnClickJS()); + } + }; + } + + + /** + * factory method for the removeAll component + * + * @return removeAll component + */ + protected Component newRemoveAllComponent() + { + return new PaletteButton("removeAllButton") + { + private static final long serialVersionUID = 1L; + + protected void onComponentTag(ComponentTag tag) + { + super.onComponentTag(tag); + tag.getAttributes().put("onclick", Palette.this.getRemoveAllOnClickJS()); + } + }; + } + + /** * @param choice * @return null * @see org.apache.wicket.extensions.markup.html.form.palette.component.Selection#getAdditionalAttributes(Object) @@ -606,6 +677,22 @@ public class Palette<T> extends GenericPanel<Collection<? extends T>> return buildJSCall("Wicket.Palette.moveDown"); } + /** + * @return addAll action javascript handler + */ + public String getAddAllOnClickJS() + { + return buildJSCall("Wicket.Palette.addAll"); + } + + /** + * @return removeAll action javascript handler + */ + public String getRemoveAllOnClickJS() + { + return buildJSCall("Wicket.Palette.removeAll"); + } + @Override protected void onDetach() { http://git-wip-us.apache.org/repos/asf/wicket/blob/1f07c6e1/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.css ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.css b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.css index c37e5da..a445088 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.css +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.css @@ -50,31 +50,50 @@ table.palette td.buttons button { } button.button.add div { - background: url("add.gif"); - height: 15px; + height: 15px; width: 15px; } +button.button.add div:after { + content: '\21D2'; +} button.button.remove div { - background: url("remove.gif"); - height: 15px; + height: 15px; width: 15px; } +button.button.remove div:after { + content: '\21D0'; +} button.button.up div { - background: url("up.gif"); - height: 15px; + height: 15px; width: 15px; } +button.button.up div:after { + content: '\21D1'; +} button.button.down div { - background: url("down.gif"); - height: 15px; + height: 15px; + width: 15px; +} +button.button.down div:after { + content: '\21D3'; +} + +button.button.addAll div { + height: 15px; width: 15px; } -/* Fix a firefox (2.0.0.4) bug : https://bugzilla.mozilla.org/show_bug.cgi?id=382600 */ -select::-moz-dummy-option { - visibility: hidden; - content: ""; -} \ No newline at end of file +button.button.addAll div:after { + content: '\21DB'; +} + +button.button.removeAll div { + height: 15px; + width: 15px; +} +button.button.removeAll div:after { + content: '\21DA'; +} http://git-wip-us.apache.org/repos/asf/wicket/blob/1f07c6e1/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js index 96292bb..5c4d477 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js @@ -132,4 +132,36 @@ box.options[i].selected=false; } }; + + Wicket.Palette.addAll = function(choicesId, selectionId, recorderId) { + var palette = Wicket.Palette; + var choices = palette.$(choicesId); + var selection = palette.$(selectionId); + + if (palette.moveAllHelper(choices, selection)) { + var recorder = palette.$(recorderId); + palette.updateRecorder(selection, recorder); + } + } + + Wicket.Palette.removeAll = function(choicesId, selectionId, recorderId) { + var palette = Wicket.Palette; + var choices = palette.$(choicesId); + var selection = palette.$(selectionId); + + if (palette.moveAllHelper(selection, choices)) { + var recorder = palette.$(recorderId); + palette.updateRecorder(selection, recorder); + } + } + + Wicket.Palette.moveAllHelper = function(source, dest) { + var dirty = false; + for (var i = 0;i < source.options.length; i++) { + dest.appendChild(source.options[i]); + i--; + dirty = true; + } + return dirty; + } })();
