Updated Branches: refs/heads/master a5e7f57f3 -> a9b9207cb
WICKET-1197 add/remove all buttons in Palette component (cherry picked from commit 1f07c6e19fd7d741db54229f2058773c6b79e1ae) Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a9b9207c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a9b9207c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a9b9207c Branch: refs/heads/master Commit: a9b9207cb9088b7679390906063461338172046b Parents: a5e7f57 Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Authored: Wed Dec 18 17:44:13 2013 +0200 Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Committed: Wed Dec 18 17:51:15 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 ++++++++++++++++++- .../extensions/markup/html/form/palette/add.gif | Bin 155 -> 0 bytes .../markup/html/form/palette/down.gif | Bin 159 -> 0 bytes .../markup/html/form/palette/palette.css | 45 +++++++--- .../markup/html/form/palette/palette.js | 32 +++++++ .../markup/html/form/palette/remove.gif | Bin 152 -> 0 bytes .../extensions/markup/html/form/palette/up.gif | Bin 158 -> 0 bytes 10 files changed, 162 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/a9b9207c/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/a9b9207c/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 cc5e081..095623b 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,8 +47,8 @@ public class PalettePage extends WicketExamplePage IChoiceRenderer<Person> renderer = new ChoiceRenderer<>("fullName", "fullName"); final Palette<Person> palette = new Palette<Person>("palette", new ListModel<Person>( - new ArrayList<Person>()), new CollectionModel<>(persons), renderer, 10, true); + new ArrayList<Person>()), new CollectionModel<>(persons), renderer, 10, true, true); Form<Void> form = new Form<Void>("form") { http://git-wip-us.apache.org/repos/asf/wicket/blob/a9b9207c/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/a9b9207c/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 523e09b..5784043 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 @@ -41,6 +41,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 FormComponentPanel<Collection<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 FormComponentPanel<Collection<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 FormComponentPanel<Collection<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 Collection<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<T>>)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 FormComponentPanel<Collection<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)); @@ -387,6 +419,45 @@ public class Palette<T> extends FormComponentPanel<Collection<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) @@ -589,6 +660,22 @@ public class Palette<T> extends FormComponentPanel<Collection<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/a9b9207c/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/add.gif ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/add.gif b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/add.gif deleted file mode 100644 index 58b3969..0000000 Binary files a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/add.gif and /dev/null differ http://git-wip-us.apache.org/repos/asf/wicket/blob/a9b9207c/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/down.gif ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/down.gif b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/down.gif deleted file mode 100644 index 46299cc..0000000 Binary files a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/down.gif and /dev/null differ http://git-wip-us.apache.org/repos/asf/wicket/blob/a9b9207c/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/a9b9207c/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; + } })(); http://git-wip-us.apache.org/repos/asf/wicket/blob/a9b9207c/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/remove.gif ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/remove.gif b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/remove.gif deleted file mode 100644 index dc05e63..0000000 Binary files a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/remove.gif and /dev/null differ http://git-wip-us.apache.org/repos/asf/wicket/blob/a9b9207c/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/up.gif ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/up.gif b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/up.gif deleted file mode 100644 index 6b1ba97..0000000 Binary files a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/up.gif and /dev/null differ