You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2020/06/07 00:00:29 UTC
[royale-asjs] branch develop updated: 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.
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 <ah...@apache.org>
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"));