package com.vaynberg.wicket.select2;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
/**
* Adds drag & drop behavior to Select2MultiChoice components, i.e.
* the list of selected values can be sorted.
*
* @author Tom Götz (tom@decoded.de)
*/
public class DragAndDropBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
// Include jquery-ui reference, if configured
final ApplicationSettings settings = ApplicationSettings.get();
if (settings.isIncludeJqueryUI()) {
response.render(JavaScriptHeaderItem.forReference(settings.getJqueryUIReference()));
}
// Render script to enable sortable/drag-and-drop behavior
String script = "$('#%1$s').select2('container').find('ul.select2-choices').sortable({" +
"containment: 'parent'," +
"start: function() { $('#%1$s').select2('onSortStart'); }," +
"update: function() { $('#%1$s').select2('onSortEnd'); }" +
"});";
response.render(OnDomReadyHeaderItem.forScript(JQuery.execute(script, component.getMarkupId())));
}
}