From f8e52c2a9c6f35698eb6feb292290ea7c316f5e5 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Sat, 28 Aug 2010 19:00:52 +0000 Subject: [PATCH] --- .../wicket/behavior/NamespaceBehavior.java | 39 ++++++++++ .../wicket/behavior/PreselectionBehavior.java | 75 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 wicket/components/src/main/java/org/wamblee/wicket/behavior/NamespaceBehavior.java create mode 100644 wicket/components/src/main/java/org/wamblee/wicket/behavior/PreselectionBehavior.java diff --git a/wicket/components/src/main/java/org/wamblee/wicket/behavior/NamespaceBehavior.java b/wicket/components/src/main/java/org/wamblee/wicket/behavior/NamespaceBehavior.java new file mode 100644 index 00000000..b7c252e8 --- /dev/null +++ b/wicket/components/src/main/java/org/wamblee/wicket/behavior/NamespaceBehavior.java @@ -0,0 +1,39 @@ +/* + * 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.behavior.HeaderContributor; +import org.apache.wicket.markup.html.JavascriptPackageResource; + +/** + * Behavior that adds the org.wamblee namespace to the javascript environment. + * + * @author Erik Brakkee + */ +class NamespaceBehavior extends HeaderContributor { + + static final String NAMESPACE_SCRIPT = "wamblee-namespace.js"; + + private static HeaderContributor CACHE = JavascriptPackageResource.getHeaderContribution( + NamespaceBehavior.class, NAMESPACE_SCRIPT); + + /** + * Constructs the namespace. + */ + public NamespaceBehavior() { + super(CACHE); + } +} diff --git a/wicket/components/src/main/java/org/wamblee/wicket/behavior/PreselectionBehavior.java b/wicket/components/src/main/java/org/wamblee/wicket/behavior/PreselectionBehavior.java new file mode 100644 index 00000000..0ea11828 --- /dev/null +++ b/wicket/components/src/main/java/org/wamblee/wicket/behavior/PreselectionBehavior.java @@ -0,0 +1,75 @@ +/* + * 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); + } + +} -- 2.31.1