You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2014/12/24 02:08:25 UTC

tapestry-5 git commit: TAP5-2417: client-side email validator is case sensitive

Repository: tapestry-5
Updated Branches:
  refs/heads/master 5ee601f49 -> 8c259498f


TAP5-2417: client-side email validator is case sensitive


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8c259498
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8c259498
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8c259498

Branch: refs/heads/master
Commit: 8c259498f3e0665ac7949ceaa91ac760c00c733c
Parents: 5ee601f
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Tue Dec 23 17:08:18 2014 -0800
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Tue Dec 23 17:08:18 2014 -0800

----------------------------------------------------------------------
 .../META-INF/modules/t5/core/validation.coffee  | 25 ++++++++++++++++----
 .../org/apache/tapestry5/validator/Email.java   | 11 +++++----
 2 files changed, 26 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c259498/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/validation.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/validation.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/validation.coffee
index 5cda63c..b44f043 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/validation.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/validation.coffee
@@ -82,6 +82,18 @@ define ["underscore", "./dom", "./events", "./utils", "./messages", "./fields"],
 
       return Number canonical
 
+    matches = (input, re) ->
+      groups = input.match re
+
+      # Unlike Java, there isn't an easy way to match the entire string. This
+      # gets the job done.
+
+      return false if groups is null
+
+      groups[0] is input
+
+    emailRE = new RegExp("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?")
+
     translate = (field, memo, isInteger) ->
       try
         result = parseNumber memo.value, isInteger
@@ -133,19 +145,22 @@ define ["underscore", "./dom", "./events", "./utils", "./messages", "./fields"],
         memo.error = (@attr "data-min-message") or "TOO SMALL"
         return false
 
+    dom.onDocument events.field.validate, "[data-validate-email]", (event, memo) ->
+
+      unless (matches memo.translated, emailRE)
+        memo.error = (@attr "data-email-message") or "INVALID EMAIL"
+        return false
+
     dom.onDocument events.field.validate, "[data-validate-regexp]", (event, memo) ->
 
       # Cache the compiled regular expression.
       re = @meta REGEXP_META
+
       unless re
         re = new RegExp(@attr "data-validate-regexp")
         @meta REGEXP_META, re
 
-      groups = memo.translated.match re
-
-      # Unlike Java, there isn't an easy way to match the entire string. This
-      # gets the job done.
-      if (groups is null) or (groups[0] isnt memo.translated)
+      unless (matches memo.translated, re)
         memo.error = (@attr "data-regexp-message") or "INVALID"
         return false
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c259498/tapestry-core/src/main/java/org/apache/tapestry5/validator/Email.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/validator/Email.java b/tapestry-core/src/main/java/org/apache/tapestry5/validator/Email.java
index eae9b08..f7b3de0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/validator/Email.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/validator/Email.java
@@ -1,5 +1,3 @@
-// Copyright 2008, 2012, 2014 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
@@ -32,7 +30,10 @@ import java.util.regex.Pattern;
  */
 public class Email extends AbstractValidator<Void, String>
 {
-    
+
+    // The client-side uses a similar RE, but converts the input to lower case before applying the pattern.
+    // See validation.coffee.
+
     private static final Pattern PATTERN = Pattern
             .compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", Pattern.CASE_INSENSITIVE);
     
@@ -53,8 +54,8 @@ public class Email extends AbstractValidator<Void, String>
 
             writer.attributes(
                     DataConstants.VALIDATION_ATTRIBUTE, true,
-                    "data-validate-regexp", PATTERN.pattern(),
-                    "data-regexp-message", formatter.toString());
+                    "data-validate-email", true,
+                    "data-email-message", formatter.toString());
         }
         
         if (html5Support.isHtml5SupportEnabled()) {