This is an automated email from the ASF dual-hosted git repository.

carlosrovira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new a1d40d6  jewel-textinput-beads: fix all beads that manipulate input 
text (UpperCase, LowerCase and Restrict). setting cursor in the middle of text 
was generating incorrect behaviour
a1d40d6 is described below

commit a1d40d627c3503f15246262755bd94d8e636b45a
Author: Carlos Rovira <[email protected]>
AuthorDate: Sat Aug 15 11:08:50 2020 +0200

    jewel-textinput-beads: fix all beads that manipulate input text (UpperCase, 
LowerCase and Restrict). setting cursor in the middle of text was generating 
incorrect behaviour
---
 .../jewel/beads/controls/textinput/LowerCase.as    | 24 +++++---
 .../jewel/beads/controls/textinput/Restrict.as     | 64 +++++++++++-----------
 .../jewel/beads/controls/textinput/UpperCase.as    | 25 ++++-----
 3 files changed, 60 insertions(+), 53 deletions(-)

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/LowerCase.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/LowerCase.as
index 48c66eb..09f9ee7 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/LowerCase.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/LowerCase.as
@@ -21,7 +21,6 @@ package org.apache.royale.jewel.beads.controls.textinput
        import org.apache.royale.core.IBead;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.jewel.supportClasses.textinput.TextInputBase;
        
        /**
@@ -49,8 +48,6 @@ package org.apache.royale.jewel.beads.controls.textinput
                {
                }
 
-               protected var t:TextInputBase;
-               
                /**
                 *  @copy org.apache.royale.core.IBead#strand
                 *  
@@ -61,17 +58,26 @@ package org.apache.royale.jewel.beads.controls.textinput
                 */
                public function set strand(value:IStrand):void
                {
-                       t = value as TextInputBase;
-                       IEventDispatcher(t).addEventListener(Event.CHANGE, 
changeToLowerCase);
-                       t.text = t.text.toLowerCase();
+                       var host:TextInputBase = value as TextInputBase;
+                       host.addEventListener(Event.CHANGE, changeToLowerCase);
+                       host.text = host.text.toLowerCase();
                }
                
                /**
+                * Change text to lower case as user types
+                * 
                 * @private
                 */
-               private function changeToLowerCase(event:Event):void
+               protected function changeToLowerCase(event:Event):void
                {
-                       t.text = t.text.toLowerCase();
+                       COMPILE::JS
+                       {
+                       var input:HTMLInputElement = event.target.input as 
HTMLInputElement;
+                       var start:Number = input.selectionStart;
+                       var end:Number = input.selectionEnd;
+                       input.value = input.value.toLowerCase();
+                       input.setSelectionRange(start, end);
+                       }
                }
        }
-}
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/Restrict.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/Restrict.as
index 247a838..1540b0d 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/Restrict.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/Restrict.as
@@ -18,19 +18,9 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controls.textinput
 {
-       COMPILE::JS
-       {
-               import goog.events.BrowserEvent;
-       }
-       COMPILE::SWF
-       {
-               import flash.events.TextEvent;
-
-               import org.apache.royale.core.CSSTextField;
-               import org.apache.royale.html.beads.ITextFieldView;             
        
-       }
        import org.apache.royale.core.IBead;
        import org.apache.royale.core.IStrand;
+       import org.apache.royale.events.Event;
        import org.apache.royale.jewel.supportClasses.textinput.TextInputBase;
        
        /**
@@ -63,7 +53,6 @@ package org.apache.royale.jewel.beads.controls.textinput
                }
                
                private var _pattern:String;
-               
                /**
                 *  The string to use as numeric pattern.
                 *
@@ -79,21 +68,10 @@ package org.apache.royale.jewel.beads.controls.textinput
                public function set pattern(value:String):void
                {
                        _pattern = value;
-                       // updateRestriction();
+                       updateTextToRestriction();
                }
 
                private var host:TextInputBase;
-               
-               // private function updateRestriction():void
-               // {
-               //      COMPILE::JS
-               //      {
-               //      if (host)
-               //      {
-               //              host.input.setAttribute('pattern', pattern);
-               //      }
-               //      }
-               // }
 
                /**
                 *  @copy org.apache.royale.core.IBead#strand
@@ -107,22 +85,46 @@ package org.apache.royale.jewel.beads.controls.textinput
                public function set strand(value:IStrand):void
                {
                        host = value as TextInputBase;
+                       host.addEventListener(Event.CHANGE, 
restrictTetToPattern);
+                       updateTextToRestriction();
+               }
+
+               /**
+                * Restrict the text to the reg exp pattern as user types
+                * @private
+                */
+               protected function restrictTetToPattern(event:Event):void
+               {
                        COMPILE::JS
                        {
-                               host.input.addEventListener('input', 
keyEventHandler);
+                       var start:Number = host.input.selectionStart;
+                       var end:Number = host.input.selectionEnd;
+                       var textChanged:Boolean = updateTextToRestriction();
+                       if(textChanged)
+                               host.input.setSelectionRange(start, end);
+                       else
+                               host.input.setSelectionRange(start - 1, end - 
1);
                        }
-                       // updateRestriction();
                }
 
                /**
-                * @private
+                * update the text in the input to the restriction pattern
+                * 
+                * @return true if text changed, false otherwise
                 */
-               COMPILE::JS
-               protected function keyEventHandler(event:KeyboardEvent):void
+               protected function updateTextToRestriction():Boolean
                {
-                       //event.stopImmediatePropagation();
-                       var re:RegExp = new RegExp(pattern, 'g');
+                       var textChanged:Boolean = false;
+                       if(!host) 
+                               return textChanged;
+                       const re:RegExp = new RegExp(pattern, 'g');
+                       COMPILE::JS
+                       {
+                       const oldText:String = host.input.value;
                        host.input.value = host.input.value.replace(re, '');
+                       textChanged = oldText == host.input.value;
+                       }
+                       return textChanged;
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/UpperCase.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/UpperCase.as
index 7330d39..00f6a7d 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/UpperCase.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/UpperCase.as
@@ -21,7 +21,6 @@ package org.apache.royale.jewel.beads.controls.textinput
        import org.apache.royale.core.IBead;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.events.Event;
-       import org.apache.royale.events.KeyboardEvent;
        import org.apache.royale.jewel.supportClasses.textinput.TextInputBase;
        
        /**
@@ -49,8 +48,6 @@ package org.apache.royale.jewel.beads.controls.textinput
                {
                }
 
-               protected var t:TextInputBase;
-               
                /**
                 *  @copy org.apache.royale.core.IBead#strand
                 *  
@@ -61,24 +58,26 @@ package org.apache.royale.jewel.beads.controls.textinput
                 */
                public function set strand(value:IStrand):void
                {
-                       t = value as TextInputBase;
-                       t.addEventListener(Event.CHANGE, changeToUpperCase);
-                       t.text = t.text.toUpperCase();
+                       var host:TextInputBase = value as TextInputBase;
+                       host.addEventListener(Event.CHANGE, changeToUpperCase);
+                       host.text = host.text.toUpperCase();
                }
                
                /**
+                * Change text to upper case as user types
+                * 
                 * @private
                 */
-               private function changeToUpperCase(event:KeyboardEvent):void
+               protected function changeToUpperCase(event:Event):void
                {
                        COMPILE::JS
                        {
-                       var start:Number = t.input.selectionStart;
-                       var end:Number = t.input.selectionEnd;
-                       t.input.value = t.input.value.toUpperCase();
-                       t.input.setSelectionRange(start, end);;
+                       var input:HTMLInputElement = event.target.input as 
HTMLInputElement;
+                       var start:Number = input.selectionStart;
+                       var end:Number = input.selectionEnd;
+                       input.value = input.value.toUpperCase();
+                       input.setSelectionRange(start, end);
                        }
                }
        }
-}
-               
\ No newline at end of file
+}
\ No newline at end of file

Reply via email to