/* * Copyright 2005-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.wicket.behavior; import org.apache.wicket.Component; import org.apache.wicket.Page; 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; /** * 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 * 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 { static final String PRESELECT_SCRIPT = "wamblee-preselect.js"; private static HeaderContributor CACHE = 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); } @Override public void renderHead(IHeaderResponse aResponse) { super.renderHead(aResponse); String jsString = JQueryUtils.createReadyFunction("preselectSetup", component); aResponse.renderJavascript(jsString, null); } }