import org.apache.wicket.behavior.HeaderContributor;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.JavascriptPackageResource;
-import org.wamblee.wicket.jquery.JQueryBehavior;
-import org.wamblee.wicket.jquery.JQueryUtils;
+import org.wamblee.wicket.jquery.JQueryHeaderContributor;
+import org.wamblee.wicket.jquery.AbstractJQueryBehavior;
/**
* Preselection behavior that preselects unaltered text in forms. When applied
* to a certain component, the behavior is valid for all children of the
* component. Therefore, it is possible to attach this behavior to any component,
- * well as to a form or even individual fields in a form. It is not possible however to apply this
+ * well as to a form or even individual fields in a form. It is also possible to apply this
* behavior to a page. The behavior applies
* to text input fields and textareas. Upon focus, the text in the field is
* selected if it it still identical to the default value.
* @author Erik Brakkee
*
*/
-public class PreselectionBehavior extends CompositeBehavior {
+public class PreselectionBehavior extends AbstractJQueryBehavior {
+
+ private static final String READY_FUNCTION = "org.wamblee.preselectionSetup";
static final String PRESELECT_SCRIPT = "wamblee-preselect.js";
- private static HeaderContributor CACHE = JavascriptPackageResource
+ private static HeaderContributor PRESELECTION_BEHAVIOR = JavascriptPackageResource
.getHeaderContribution(PreselectionBehavior.class, PRESELECT_SCRIPT);
- private Component component;
-
public PreselectionBehavior() {
- super(new JQueryBehavior(), new NamespaceBehavior(), CACHE);
- }
-
- @Override
- public void bind(Component aComponent) {
- if (component != null) {
- throw new IllegalStateException(
- "this kind of handler cannot be attached to " +
- "multiple components; it is already attached to component " +
- component + ", but component " + aComponent +
- " wants to be attached too");
- }
- if ( aComponent instanceof Page) {
- throw new IllegalStateException("This behavior cannot be applied to a page: " + aComponent);
- }
- component = aComponent;
- super.bind(aComponent);
- aComponent.setOutputMarkupId(true);
+ super(READY_FUNCTION, new SupportBehavior(), PRESELECTION_BEHAVIOR);
}
-
- @Override
- public void renderHead(IHeaderResponse aResponse) {
- super.renderHead(aResponse);
- String jsString = JQueryUtils.createReadyFunction("preselectSetup", component);
- aResponse.renderJavascript(jsString, null);
- }
-
}