org.wicketstuff.jquery.crop.CropBehaviour Maven / Gradle / Ivy
package org.wicketstuff.jquery.crop;
import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.wicketstuff.jquery.FunctionString;
import org.wicketstuff.jquery.JQueryBehavior;
/**
*
* @author Edvin Syse
*
*/
public class CropBehaviour extends JQueryBehavior
{
private static final long serialVersionUID = 1L;
public static final ResourceReference IRESIZABLE_JS = new PackageResourceReference(
CropBehaviour.class, "iresizable.js");
public static final ResourceReference IUTIL_JS = new PackageResourceReference(
CropBehaviour.class, "iutil.js");
public static final ResourceReference CROP_BG = new PackageResourceReference(
CropBehaviour.class, "crop_bg.png");
private CropOptions options;
public CropBehaviour()
{
this(new CropOptions());
}
public CropBehaviour(CropOptions options)
{
super();
this.options = options != null ? options : new CropOptions();
}
@Override
protected CharSequence getOnReadyScript()
{
StringBuilder onReady = new StringBuilder("$('#" + getComponent().getMarkupId() +
"').Resizable(");
options.set("onStop", new FunctionString("cropCallback"));
options.set("onDragStop", new FunctionString("cropCallback"));
options.set(
"onResize",
new FunctionString(
"function(size, position) {\n this.style.backgroundPosition = '-' + (position.left) + 'px -' + (position.top) + 'px'; \n}\n"));
options.set(
"onDrag",
new FunctionString(
"function(x, y) {\n this.style.backgroundPosition = '-' + (x) + 'px -' + (y) + 'px'; \n}\n"));
options.set(
"handlers",
new FunctionString(
"{ se: '#resizeSE', e: '#resizeE', ne: '#resizeNE', n: '#resizeN', nw: '#resizeNW', w: '#resizeW', sw: '#resizeSW', s: '#resizeS' }\n"));
onReady.append(options.toString(false));
onReady.append(");");
return onReady;
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
{
super.updateAjaxAttributes(attributes);
String c = "$('#" + getComponent().getMarkupId() + "')";
CharSequence coordinates =
String.format("return { width: %s.width(), height: %s.height(), top: %s.top(), left: %s.left() }",
c, c, c, c);
attributes.getDynamicExtraParameters().add(coordinates);
}
@Override
public void renderHead(Component component, IHeaderResponse response)
{
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
response.render(JavaScriptHeaderItem.forReference(INTERFACE_JS));
response.render(JavaScriptHeaderItem.forReference(IRESIZABLE_JS));
response.render(JavaScriptHeaderItem.forReference(IUTIL_JS));
response.render(JavaScriptHeaderItem.forScript("function cropCallback() {\n" + getCallbackScript() + "\n}\n",
"crop-init-for-" + getComponent().getMarkupId()));
}
@Override
protected void respond(AjaxRequestTarget target)
{
Request req = RequestCycle.get().getRequest();
onCropped(
target,
req.getQueryParameters().getParameterValue("width").toInt(),
req.getQueryParameters().getParameterValue("height").toInt(),
Integer.parseInt(req.getQueryParameters()
.getParameterValue("top")
.toString()
.replace("px", "")),
Integer.parseInt(req.getQueryParameters()
.getParameterValue("left")
.toString()
.replace("px", "")));
}
public void onCropped(AjaxRequestTarget target, int width, int height, int top, int left)
{
System.out.println("Height: " + height);
System.out.println("Width: " + width);
System.out.println("Top: " + top);
System.out.println("Left: " + left);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy