Skip to content

Commit 1dc9ecc

Browse files
committedJan 25, 2013
Provide drag & drop behavior for Select2MultiChoice components using jquery-ui, fixes ivaynberg#38
1 parent 53111a8 commit 1dc9ecc

File tree

5 files changed

+65
-2
lines changed

5 files changed

+65
-2
lines changed
 

‎wicket-select2-examples/src/main/java/com/vaynberg/wicket/select2/HomePage.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ <h1>Single-Select <small>Ajax result loading. Paging with infinite scrolling. Mi
5050
</section>
5151
<section>
5252
<div class="page-header">
53-
<h1>Multi-Select <small>Ajax result loading. Paging with infinite scrolling. Minimum input length</small></h1>
53+
<h1>Multi-Select <small>Ajax result loading. Paging with infinite scrolling. Minimum input length. Drag &amp; Drop</small></h1>
5454
</div>
5555
<div class="row">
5656
<div class="span12">

‎wicket-select2-examples/src/main/java/com/vaynberg/wicket/select2/HomePage.java

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public HomePage() {
6060
Select2MultiChoice<Country> countries = new Select2MultiChoice<Country>("countries",
6161
new PropertyModel<Collection<Country>>(this, "countries"), new CountriesProvider());
6262
countries.getSettings().setMinimumInputLength(1);
63+
countries.add(new DragAndDropBehavior());
6364
multi.add(countries);
6465

6566
}

‎wicket-select2/src/main/java/com/vaynberg/wicket/select2/ApplicationSettings.java

+23-1
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,15 @@ public class ApplicationSettings {
3535
"res/select2.js");
3636
private ResourceReference mouseWheelReference = new PackageResourceReference(ApplicationSettings.class,
3737
"res/jquery.mousewheel.js");
38-
private ResourceReference cssReference = new PackageResourceReference(ApplicationSettings.class, "res/select2.css");
38+
private ResourceReference cssReference = new PackageResourceReference(ApplicationSettings.class,
39+
"res/select2.css");
40+
private ResourceReference jqueryUIReference = new PackageResourceReference(ApplicationSettings.class,
41+
"res/jquery-ui-1.9.0.min.js");
3942

4043
private boolean includeMouseWheel = true;
4144
private boolean includeJavascript = true;
4245
private boolean includeCss = true;
46+
private boolean includeJqueryUI = true;
4347

4448
/**
4549
* Private constructor, use {@link #get()} instead.
@@ -65,6 +69,15 @@ public ApplicationSettings setIncludeCss(boolean includeCss) {
6569
return this;
6670
}
6771

72+
public boolean isIncludeJqueryUI() {
73+
return includeJqueryUI;
74+
}
75+
76+
public ApplicationSettings setIncludeJqueryUI(boolean includeJqueryUI) {
77+
this.includeJqueryUI = includeJqueryUI;
78+
return this;
79+
}
80+
6881
public ResourceReference getJavaScriptReference() {
6982
return javaScriptReference;
7083
}
@@ -101,6 +114,15 @@ public ApplicationSettings setMouseWheelReference(ResourceReference mousewheelRe
101114
return this;
102115
}
103116

117+
public ResourceReference getJqueryUIReference() {
118+
return jqueryUIReference;
119+
}
120+
121+
public ApplicationSettings setJqueryUIReference(ResourceReference jqueryUIReference) {
122+
this.jqueryUIReference = jqueryUIReference;
123+
return this;
124+
}
125+
104126
/**
105127
* Retrieves the instance of settings object.
106128
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.vaynberg.wicket.select2;
2+
3+
import org.apache.wicket.Component;
4+
import org.apache.wicket.behavior.Behavior;
5+
import org.apache.wicket.markup.head.IHeaderResponse;
6+
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
7+
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
8+
9+
/**
10+
* Adds drag & drop behavior to Select2MultiChoice components, i.e.
11+
* the list of selected values can be sorted.
12+
*
13+
* @author Tom Götz (tom@decoded.de)
14+
*/
15+
public class DragAndDropBehavior extends Behavior {
16+
17+
@Override
18+
public void renderHead(Component component, IHeaderResponse response) {
19+
20+
// Include jquery-ui reference, if configured
21+
final ApplicationSettings settings = ApplicationSettings.get();
22+
if (settings.isIncludeJqueryUI()) {
23+
response.render(JavaScriptHeaderItem.forReference(settings.getJqueryUIReference()));
24+
}
25+
26+
// Render script to enable sortable/drag-and-drop behavior
27+
String script = "$('#%1$s').select2('container').find('ul.select2-choices').sortable({" +
28+
"containment: 'parent'," +
29+
"start: function() { $('#%1$s').select2('onSortStart'); }," +
30+
"update: function() { $('#%1$s').select2('onSortEnd'); }" +
31+
"});";
32+
response.render(OnDomReadyHeaderItem.forScript(JQuery.execute(script, component.getMarkupId())));
33+
}
34+
35+
}

‎wicket-select2/src/main/java/com/vaynberg/wicket/select2/res/jquery-ui-1.9.0.min.js

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.