This is an automated email from the ASF dual-hosted git repository.
harbs 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 63bad6b Another fun function
63bad6b is described below
commit 63bad6b4ab5e4af2953fedc34fa01a301c50052e
Author: Harbs <[email protected]>
AuthorDate: Thu Jan 6 01:28:22 2022 +0200
Another fun function
---
.../projects/Core/src/main/royale/CoreClasses.as | 1 +
.../royale/utils/functional/delayFunction.as | 69 ++++++++++++++++++++++
.../test/royale/flexUnitTests/FunctionalTests.as | 34 +++++++++++
3 files changed, 104 insertions(+)
diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as
b/frameworks/projects/Core/src/main/royale/CoreClasses.as
index 48189b5..e3da6a1 100644
--- a/frameworks/projects/Core/src/main/royale/CoreClasses.as
+++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as
@@ -383,6 +383,7 @@ internal class CoreClasses
import org.apache.royale.utils.functional.debounceShort; debounceShort;
import org.apache.royale.utils.functional.throttle; throttle;
import org.apache.royale.utils.functional.animateFunction;
animateFunction;
+ import org.apache.royale.utils.functional.delayFunction; delayFunction;
import org.apache.royale.core.TextLineMetrics; TextLineMetrics;
import org.apache.royale.utils.ClassSelectorList; ClassSelectorList;
diff --git
a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/functional/delayFunction.as
b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/functional/delayFunction.as
new file mode 100644
index 0000000..44367f1
--- /dev/null
+++
b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/functional/delayFunction.as
@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.utils.functional
+{
+ COMPILE::SWF{
+ import flash.utils.setTimeout;
+ import flash.utils.clearTimeout;
+ }
+ /**
+ * Returns a function which when run will invoke the wrapped function
after a delay.
+ * Defaults to 0 which will execute at the next opportune time.
+ * In JS this uses requestAnimationFrame
+ *
+ * @royalesuppressexport
+ * @langversion 3.0
+ * @productversion Royale 0.9.9
+ *
+ */
+ public function delayFunction(method:Function, delay:Number=0):Function
+ {
+ return function(...args):void
+ {
+
+ function callback():void
+ {
+ method.apply(null,args);
+ }
+
+ COMPILE::SWF
+ {
+ setTimeout(function():void{
+ callback();
+ },delay);
+ }
+
+ COMPILE::JS
+ {
+ if(delay)
+ {
+ setTimeout(function():void{
+ requestAnimationFrame(callback);
+ },delay);
+ }
+ else
+ {
+ requestAnimationFrame(callback);
+ }
+
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git
a/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
b/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
index 75f320c..f17c1a7 100644
--- a/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
+++ b/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
@@ -27,6 +27,7 @@ package flexUnitTests
import org.apache.royale.utils.functional.*;
import org.apache.royale.utils.functional.animateFunction;
import org.apache.royale.test.asserts.assertTrue;
+ import org.apache.royale.test.asserts.assertEquals;
public class FunctionalTests
{
@@ -226,6 +227,39 @@ package flexUnitTests
assertTrue(savedValue<3,"value should be 2");
}, 300);
}
+ public function testDelay():void
+ {
+ var foo:Foo = new Foo();
+ var delayedThis:Function = delayFunction(foo.increment,20);
+
+ delayedThis(1);
+
+ var firstThisValue:Number = foo.value;
+
+ var savedThisValue:Number;
+ setTimeout(function():void{
+ savedThisValue = foo.value;
+ },75);
+
+ var value:Number = 0;
+ function increment(val:Number):void{
+ value+=val;
+ }
+ var delayed:Function = delayFunction(increment,20);
+ delayed(1);
+ var firstValue:Number = value;
+ var savedValue:Number;
+ setTimeout(function():void{
+ savedValue = value;
+ },75);
+ Async.delayCall(this, function():void
+ {
+ assertEquals(firstThisValue,0,"foo value should be 0")
+ assertEquals(savedThisValue,1,"foo value should be 1")
+ assertEquals(firstValue,0,"value should be 0")
+ assertEquals(savedValue,1,"value should be 1")
+ }, 200);
+ }
}