You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2012/03/20 21:19:40 UTC

svn commit: r1303131 - in /tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha: KaptchaSymbolConstants.java components/KaptchaField.java components/KaptchaImage.java services/KaptchaModule.java

Author: hlship
Date: Tue Mar 20 20:19:40 2012
New Revision: 1303131

URL: http://svn.apache.org/viewvc?rev=1303131&view=rev
Log:
TAP5-1827: It shoud be possible to customize kaptcha field so that it allows input type=text instead of input type=password

Added:
    tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/KaptchaSymbolConstants.java
Modified:
    tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaField.java
    tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java
    tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java

Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/KaptchaSymbolConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/KaptchaSymbolConstants.java?rev=1303131&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/KaptchaSymbolConstants.java (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/KaptchaSymbolConstants.java Tue Mar 20 20:19:40 2012
@@ -0,0 +1,31 @@
+// Copyright 2012 The Apache Software Foundation
+//
+// 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.apache.tapestry5.kaptcha;
+
+/**
+ * Defines constants used by the {@link org.apache.tapestry5.kaptcha.services.KaptchaModule} and related components.
+ *
+ * @since 5.3
+ */
+public class KaptchaSymbolConstants
+{
+    /**
+     * Sets the default for the {@link org.apache.tapestry5.kaptcha.components.KaptchaField} component's visible parameter.
+     * This defaults to false.
+     *
+     * @since 5.3
+     */
+    public static final String KAPTCHA_DEFAULT_VISIBLE = "tapestry.kaptcha-default-visible";
+}

Modified: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaField.java?rev=1303131&r1=1303130&r2=1303131&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaField.java (original)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaField.java Tue Mar 20 20:19:40 2012
@@ -1,4 +1,4 @@
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -15,11 +15,15 @@
 package org.apache.tapestry5.kaptcha.components;
 
 import org.apache.tapestry5.*;
-import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.annotations.Environmental;
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.corelib.base.AbstractField;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.kaptcha.KaptchaSymbolConstants;
 import org.apache.tapestry5.services.FieldValidatorSource;
 import org.apache.tapestry5.services.Request;
 
@@ -28,6 +32,7 @@ import org.apache.tapestry5.services.Req
  * the correct value.
  *
  * @since 5.3
+ * @tapestrydoc
  */
 @SupportsInformalParameters
 @Import(stylesheet = "kaptcha.css")
@@ -41,6 +46,16 @@ public class KaptchaField extends Abstra
     @Parameter(required = true, defaultPrefix = BindingConstants.COMPONENT)
     private KaptchaImage image;
 
+    /**
+     * Controls whether the field is rendered like a password field (false, the factory default)
+     * or like a normal text field (true).
+     *
+     * @see KaptchaSymbolConstants#KAPTCHA_DEFAULT_VISIBLE
+     * @since 5.3
+     */
+    @Parameter("symbol:" + KaptchaSymbolConstants.KAPTCHA_DEFAULT_VISIBLE)
+    private boolean visible;
+
     @Inject
     private Request request;
 
@@ -56,6 +71,9 @@ public class KaptchaField extends Abstra
     @Inject
     private FieldValidatorSource fieldValidatorSource;
 
+    /**
+     * Always required.
+     */
     @Override
     public boolean isRequired()
     {
@@ -67,6 +85,8 @@ public class KaptchaField extends Abstra
     {
         String userValue = request.getParameter(controlName);
 
+        validationTracker.recordInput(this, userValue);
+
         if (TapestryInternalUtils.isEqual(image.getCaptchaText(), userValue))
             return;
 
@@ -74,24 +94,21 @@ public class KaptchaField extends Abstra
     }
 
     @SuppressWarnings("rawtypes")
-    @BeginRender
-    boolean begin(MarkupWriter writer)
+    boolean beginRender(MarkupWriter writer)
     {
-
         writer.element("input",
 
-                "type", "password",
+                "type", visible ? "text" : "password",
 
                 "id", getClientId(),
 
                 "name", getControlName(),
 
-                "value", "");
+                "value", visible ? validationTracker.getInput(this) : "");
 
         resources.renderInformalParameters(writer);
 
-        FieldValidator fieldValidator = fieldValidatorSource
-                .createValidator(this, "required", null);
+        FieldValidator fieldValidator = fieldValidatorSource.createValidator(this, "required", null);
 
         fieldValidator.render(writer);
 

Modified: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java?rev=1303131&r1=1303130&r2=1303131&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java (original)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java Tue Mar 20 20:19:40 2012
@@ -1,4 +1,4 @@
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,30 +14,29 @@
 
 package org.apache.tapestry5.kaptcha.components;
 
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.imageio.ImageIO;
-
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.kaptcha.services.KaptchaProducer;
 import org.apache.tapestry5.services.Response;
 
-import org.apache.tapestry5.kaptcha.services.KaptchaProducer;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.OutputStream;
 
 /**
  * Part of a Captcha based authentication scheme; a KaptchaImage generates a new
  * text image whenever it <em>renders</em> and can provide the previously
- * rendred text subsequently (it is stored persistently in the session).
- * <p>
- * The component renders an &lt;img&gt; tag, including width and height attributes. Other attributes
+ * rendered text subsequently (it is stored persistently in the session).
+ * <p/>
+ * The component renders an {@code <img>} tag, including width and height attributes. Other attributes
  * come from informal parameters.
  *
+ * @tapestrydoc
  * @since 5.3
  */
 @SupportsInformalParameters
@@ -72,11 +71,11 @@ public class KaptchaImage
 
         writer.element("img",
 
-        "src", link.toURI(),
+                "src", link.toURI(),
 
-        "width", producer.getWidth(),
+                "width", producer.getWidth(),
 
-        "height", producer.getHeight());
+                "height", producer.getHeight());
 
         resources.renderInformalParameters(writer);
 

Modified: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java?rev=1303131&r1=1303130&r2=1303131&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java Tue Mar 20 20:19:40 2012
@@ -1,4 +1,4 @@
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -15,20 +15,15 @@
 package org.apache.tapestry5.kaptcha.services;
 
 import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.ioc.Configuration;
-import org.apache.tapestry5.ioc.OrderedConfiguration;
-import org.apache.tapestry5.ioc.Resource;
-import org.apache.tapestry5.ioc.ServiceBinder;
+import org.apache.tapestry5.ioc.*;
 import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.ioc.annotations.Value;
+import org.apache.tapestry5.ioc.services.FactoryDefaults;
+import org.apache.tapestry5.ioc.services.SymbolProvider;
+import org.apache.tapestry5.kaptcha.KaptchaSymbolConstants;
 import org.apache.tapestry5.kaptcha.internal.services.KaptchaDataTypeAnalyzer;
 import org.apache.tapestry5.kaptcha.internal.services.KaptchaProducerImpl;
-import org.apache.tapestry5.services.BeanBlockContribution;
-import org.apache.tapestry5.services.BeanBlockSource;
-import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.services.DataTypeAnalyzer;
-import org.apache.tapestry5.services.EditBlockContribution;
-import org.apache.tapestry5.services.LibraryMapping;
+import org.apache.tapestry5.services.*;
 import org.apache.tapestry5.services.messages.ComponentMessagesSource;
 
 /**
@@ -43,6 +38,13 @@ public class KaptchaModule
         binder.bind(KaptchaProducer.class, KaptchaProducerImpl.class);
     }
 
+    @Contribute(SymbolProvider.class)
+    @FactoryDefaults
+    public static void factoryDefaults(MappedConfiguration<String, Object> configuration)
+    {
+        configuration.add(KaptchaSymbolConstants.KAPTCHA_DEFAULT_VISIBLE, false);
+    }
+
     @Contribute(ComponentClassResolver.class)
     public static void provideLibraryMapping(Configuration<LibraryMapping> configuration)
     {
@@ -50,7 +52,7 @@ public class KaptchaModule
     }
 
     @Contribute(ComponentMessagesSource.class)
-    public static void provideLibrayMessages(
+    public static void provideLibraryMessages(
             OrderedConfiguration<Resource> configuration,
             @Value("classpath:org/apache/tapestry5/kaptcha/tapestry-kaptcha.properties")
             Resource coreCatalog)