You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Falco Wockenfuß (JIRA)" <de...@myfaces.apache.org> on 2016/04/28 13:57:12 UTC

[jira] [Comment Edited] (TRINIDAD-2533) TrNumberFormat doesn't parse native Numbers without Currency

    [ https://issues.apache.org/jira/browse/TRINIDAD-2533?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15262023#comment-15262023 ] 

Falco Wockenfuß edited comment on TRINIDAD-2533 at 4/28/16 11:56 AM:
---------------------------------------------------------------------

Unified Diff:

    Index: trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js
    ===================================================================
    --- trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js	(revision 1741413)
    +++ trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js	(working copy)
    @@ -486,49 +486,56 @@
      */
     TrNumberFormat.prototype.removePrefixAndSuffix = function(numberString)
     {
    -  //is the string negative ?
    -  var retArr = [];
    -  var negP = numberString.indexOf(this._nPrefix);
    -  var nSufNoSpace = this._nSuffix;
    +  var positive = true;
       
    -  if (nSufNoSpace && (nSufNoSpace.charAt(0) == ' ' || nSufNoSpace.charAt(0) == '\xa0'))
    +  // remove prefix if it exists
    +  if ( this._nPrefix && this._nPrefix != "" && inputText.indexOf( this._nPrefix ) == 0 )
       {
    -    nSufNoSpace = nSufNoSpace.substring(1);
    +	inputText = inputText.substr( this._nPrefix.length );
    +	
    +	// Only if the negative prefix is different from the positive prefix
    +	if ( this._nPrefix != this._pPrefix )
    +	{
    +	  positive = false;
    +	}
       }
    +  else if ( this._pPrefix && this._pPrefix != "" && inputText.indexOf( this._pPrefix ) == 0 )
    +  {
    +	inputText = inputText.substr( this._pPrefix.length );
    +  }
       
    -  var negS = numberString.indexOf(nSufNoSpace);
    -
    -  // TRINIDAD-1958: In Arabic the values for negPrefix and posPrefix are the same, so it is insufficient to test for
    -  // the presence of (only) negPrefix to determine if the number is negative.
    -  if(negP != -1 && negS != -1)
    +  // trim suffix of leading spaces
    +  var nSuffix = this._nSuffix;
    +  if( nSuffix && ( nSuffix.charAt( 0 ) == ' ' || nSuffix.charAt( 0 ) == '\xa0' ) )
       {
    -    retArr.push(numberString.substr(this._nPrefix.length, numberString.length - (this._nPrefix.length + nSufNoSpace.length)));
    -    retArr.push(false);
    -    return retArr;
    +	nSuffix = nSuffix.substring( 1 );
       }
    -  else
    +  
    +  var pSuffix = this._pSuffix;
    +  if( pSuffix && ( pSuffix.charAt( 0 ) == ' ' || pSuffix.charAt( 0 ) == '\xa0' ) )
       {
    -    var posP = numberString.indexOf(this._pPrefix);
    -    var pSufNoSpace = this._pSuffix;
    -   
    -    if (pSufNoSpace && (pSufNoSpace.charAt(0) == ' ' || pSufNoSpace.charAt(0) == '\xa0'))
    -    {
    -      pSufNoSpace = pSufNoSpace.substring(1);
    -    }
    -    
    -    var posS = numberString.indexOf(pSufNoSpace);
    -
    -    if(posP != -1 && posS != -1)
    -    {
    -      retArr.push(numberString.substr(this._pPrefix.length, numberString.length - (this._pPrefix.length + pSufNoSpace.length)));
    -      retArr.push(true);
    -      return retArr;
    -    }
    -    else
    -    {
    -       throw new TrParseException("not able to parse number");
    -    }//end-if we could not find a positive or negative prefix/suffix pair
    -  }//end-if not negative
    +	pSuffix = pSuffix.substring( 1 );
    +  }
    +  
    +  // remove suffix if it exists
    +  if ( nSuffix && nSuffix != "" && inputText.indexOf( nSuffix ) > 0 )
    +  {
    +	inputText = inputText.substr( 0, inputText.indexOf( nSuffix ) );
    +	
    +	if ( nSuffix != pSuffix )
    +	{
    +	  positive = false;
    +	}
    +  }
    +  else if ( pSuffix && pSuffix != "" && inputText.indexOf( pSuffix ) > 0 )
    +  {
    +	inputText = inputText.substr( 0, inputText.indexOf( pSuffix ) );
    +  }
    +  
    +  var result = new Array( 2 );
    +  result[ 0 ] = inputText;
    +  result[ 1 ] = positive;
    +  return result;
     }
     
     /**
    


was (Author: falco):
Unified Diff:

Index: trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js
===================================================================
--- trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js	(revision 1741413)
+++ trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js	(working copy)
@@ -486,49 +486,56 @@
  */
 TrNumberFormat.prototype.removePrefixAndSuffix = function(numberString)
 {
-  //is the string negative ?
-  var retArr = [];
-  var negP = numberString.indexOf(this._nPrefix);
-  var nSufNoSpace = this._nSuffix;
+  var positive = true;
   
-  if (nSufNoSpace && (nSufNoSpace.charAt(0) == ' ' || nSufNoSpace.charAt(0) == '\xa0'))
+  // remove prefix if it exists
+  if ( this._nPrefix && this._nPrefix != "" && inputText.indexOf( this._nPrefix ) == 0 )
   {
-    nSufNoSpace = nSufNoSpace.substring(1);
+	inputText = inputText.substr( this._nPrefix.length );
+	
+	// Only if the negative prefix is different from the positive prefix
+	if ( this._nPrefix != this._pPrefix )
+	{
+	  positive = false;
+	}
   }
+  else if ( this._pPrefix && this._pPrefix != "" && inputText.indexOf( this._pPrefix ) == 0 )
+  {
+	inputText = inputText.substr( this._pPrefix.length );
+  }
   
-  var negS = numberString.indexOf(nSufNoSpace);
-
-  // TRINIDAD-1958: In Arabic the values for negPrefix and posPrefix are the same, so it is insufficient to test for
-  // the presence of (only) negPrefix to determine if the number is negative.
-  if(negP != -1 && negS != -1)
+  // trim suffix of leading spaces
+  var nSuffix = this._nSuffix;
+  if( nSuffix && ( nSuffix.charAt( 0 ) == ' ' || nSuffix.charAt( 0 ) == '\xa0' ) )
   {
-    retArr.push(numberString.substr(this._nPrefix.length, numberString.length - (this._nPrefix.length + nSufNoSpace.length)));
-    retArr.push(false);
-    return retArr;
+	nSuffix = nSuffix.substring( 1 );
   }
-  else
+  
+  var pSuffix = this._pSuffix;
+  if( pSuffix && ( pSuffix.charAt( 0 ) == ' ' || pSuffix.charAt( 0 ) == '\xa0' ) )
   {
-    var posP = numberString.indexOf(this._pPrefix);
-    var pSufNoSpace = this._pSuffix;
-   
-    if (pSufNoSpace && (pSufNoSpace.charAt(0) == ' ' || pSufNoSpace.charAt(0) == '\xa0'))
-    {
-      pSufNoSpace = pSufNoSpace.substring(1);
-    }
-    
-    var posS = numberString.indexOf(pSufNoSpace);
-
-    if(posP != -1 && posS != -1)
-    {
-      retArr.push(numberString.substr(this._pPrefix.length, numberString.length - (this._pPrefix.length + pSufNoSpace.length)));
-      retArr.push(true);
-      return retArr;
-    }
-    else
-    {
-       throw new TrParseException("not able to parse number");
-    }//end-if we could not find a positive or negative prefix/suffix pair
-  }//end-if not negative
+	pSuffix = pSuffix.substring( 1 );
+  }
+  
+  // remove suffix if it exists
+  if ( nSuffix && nSuffix != "" && inputText.indexOf( nSuffix ) > 0 )
+  {
+	inputText = inputText.substr( 0, inputText.indexOf( nSuffix ) );
+	
+	if ( nSuffix != pSuffix )
+	{
+	  positive = false;
+	}
+  }
+  else if ( pSuffix && pSuffix != "" && inputText.indexOf( pSuffix ) > 0 )
+  {
+	inputText = inputText.substr( 0, inputText.indexOf( pSuffix ) );
+  }
+  
+  var result = new Array( 2 );
+  result[ 0 ] = inputText;
+  result[ 1 ] = positive;
+  return result;
 }
 
 /**


> TrNumberFormat doesn't parse native Numbers without Currency
> ------------------------------------------------------------
>
>                 Key: TRINIDAD-2533
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2533
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>    Affects Versions: 2.0.0-beta-2
>         Environment: Oracle ADF
>            Reporter: Falco Wockenfuß
>
> If you enter a Number in a Currency-Field with a decimal separator (other than ".") and without trailing currency symbol you get a parse Error.
> Test Case - Type in JS Console:
> var tr = new TrNumberConverter( null, "currency", "de_DE" );
> tr.getAsObject( "20,50" ); // Parse Error
> tr.getAsObject( "20,50 €" ); // Working
> tr.getAsObject( "20" ); // Working
> Cause:
> The Method TrNumberFormat.prototype.removePrefixAndSuffix will fail, if not both matching Prefix and Suffix for Positive or Negative are present. If only one of both is present an exception is thrown and parsing fails.
> Since the Prefix for positive Currency is "" (the empty string) it will always match and try to find the matching suffix "€" or fail.
> In the case of an exception the default parseFloat is used as a fallback, which works for default english notation, so plain Numbers and using the dot as a decimal separator will work.
> Expected Behaviour and proposed Fix:
> Entering a locale Numberformat without Currency Symbol should be parsed without giving an error. The removePrefixAndSuffix Method should be more lenient and also accept input without currency suffix.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)