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

aharui 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 2f4bbaa  cancel event for FileReference.  Uses blur/focus in Chrome, 
uses key/mouse in other browsers which could cause delay in getting the event 
if user is perfectly idle.
2f4bbaa is described below

commit 2f4bbaad8be2d279f6ec1cedc3af520f189cab7e
Author: Alex Harui <[email protected]>
AuthorDate: Sat Jun 6 16:59:59 2020 -0700

    cancel event for FileReference.  Uses blur/focus in Chrome, uses key/mouse 
in other browsers which could cause delay in getting the event if user is 
perfectly idle.
---
 .../org/apache/royale/file/beads/FileBrowser.as    | 83 +++++++++++++++++++++-
 1 file changed, 82 insertions(+), 1 deletion(-)

diff --git 
a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileBrowser.as
 
b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileBrowser.as
index 9c34462..33aa2ae 100644
--- 
a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileBrowser.as
+++ 
b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileBrowser.as
@@ -81,7 +81,7 @@ package org.apache.royale.file.beads
                        delegate = document.createElement('input') as 
WrappedHTMLElement;
                        delegate.setAttribute('type', 'file');
                        goog.events.listen(delegate, 'change', 
fileChangeHandler);
-               }
+                       }
                
                /**
                 *  @private
@@ -106,6 +106,11 @@ package org.apache.royale.file.beads
                        createDelegate();
                }
                
+               COMPILE::JS
+               private var focusedButton:WrappedHTMLElement;
+               COMPILE::JS
+               private var interval:int = -1;
+               
                /**
                 *  Open up the system file browser. A user selection will 
trigger a 'modelChanged' event on the strand.
                 *
@@ -113,6 +118,7 @@ package org.apache.royale.file.beads
                 *  @playerversion Flash 10.2
                 *  @playerversion AIR 2.6
                 *  @productversion Royale 0.9
+                *  @royaleignorecoercion 
org.apache.royale.core.WrappedHTMLElement
                 */
                public function browse():void
                {
@@ -122,10 +128,84 @@ package org.apache.royale.file.beads
                        }
                        COMPILE::JS 
                        {
+                               focusedButton = document.activeElement as 
WrappedHTMLElement;
+                               //trace("activeElement is: " + focusedButton);
+                               focusedButton.addEventListener("blur", 
blurHandler);
+                               focusedButton.addEventListener("focus", 
focusHandler);                          
+                               window.addEventListener("keydown", keyHandler);
+                               window.addEventListener("mousemove", 
mouseHandler);
+                               window.addEventListener("mousedown", 
mouseHandler);
                                delegate.click();
                        }
                }
                
+               COMPILE::JS
+               private function blurHandler(e:Object):void
+               {
+                       //trace("blur: " + e);
+                       //trace("files: " + (delegate as 
HTMLInputElement).files.length);
+                       cleanupWindow();
+               }
+               
+               COMPILE::JS
+               private function focusHandler(e:Object):void
+               {
+                       //trace("focus: " + e);
+                       //trace("files: " + (delegate as 
HTMLInputElement).files.length);
+                       cleanup();
+                       setTimeout(maybeCancel, 100);
+               }
+               
+               COMPILE::JS
+               private function keyHandler(e:Object):void
+               {
+                       //trace("key: " + e);
+                       //trace("files: " + (delegate as 
HTMLInputElement).files.length);
+                       cleanup();
+                       setTimeout(maybeCancel, 100);
+               }
+               
+               COMPILE::JS
+               private function mouseHandler(e:Object):void
+               {
+                       //trace("mouse: " + e);
+                       //trace("files: " + (delegate as 
HTMLInputElement).files.length);
+                       cleanup();
+                       setTimeout(maybeCancel, 100);
+               }
+                               
+               COMPILE::JS
+               private function cleanupWindow():void
+               {
+                       window.removeEventListener("keydown", keyHandler);
+                       window.removeEventListener("mousemove", mouseHandler);
+                       window.removeEventListener("mousedown", mouseHandler);
+               }
+               
+               COMPILE::JS
+               private function cleanup():void
+               {
+                       focusedButton.removeEventListener("focus", 
focusHandler);
+                       focusedButton.removeEventListener("blur", blurHandler);
+                       window.removeEventListener("keydown", keyHandler);
+                       window.removeEventListener("mousemove", mouseHandler);
+                       window.removeEventListener("mousedown", mouseHandler);
+               }
+               
+               private var frameCount:int = 0;
+               
+               COMPILE::JS
+               private function maybeCancel():void
+               {
+                       if ((delegate as HTMLInputElement).files.length) {
+                               //trace("FileReference ok");
+                       }
+                       else {
+                               host.dispatchEvent(new Event("cancel"));
+                               //trace("FileReference cancel");
+                       }
+               }
+                                               
                /**
                 *  @copy org.apache.royale.core.IBead#strand
                 *  
@@ -154,6 +234,7 @@ package org.apache.royale.file.beads
                COMPILE::JS
                private function 
fileChangeHandler(e:org.apache.royale.events.Event):void
                {
+                       //trace("fileChange");
                        var fileModel:IFileModel = host.model as IFileModel;
                        fileModel.fileReference = (delegate as 
HTMLInputElement).files[0];
                        host.dispatchEvent(new Event("modelChanged"));

Reply via email to