Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
As kouPhax requested this on the Rx forum, I decided to post a port to Script# of the Time flies like an arrow sample that ships with Rx for JavaScript.
Rx for JavaScript already ships with a binding for Script#, so that will make our lives a lot easier (you can find the binding in <InstallPath>\Redist\ScriptSharp\RxJs.dll)
For this sample I'll assume you have Script# 0.5.6.0 installed from Nikhil's Script# site.
We start off with creating a Script# enabled website:
Next we open the Scriplet editor for the default Scriplet in the project:
We’ll make Script# aware of Rx by adding a reference to the RxJS.Dll:
As well as the rx.js JavaScript file
Next we’ll add the container div to the body of the Html page:
<div id="container"></div>
Now it is time to do some coding:
using
System;
using System.DHTML;
using ScriptFX;
using ScriptFX.UI;
using Rx;
public class MyScriptlet
{
public static void Main(ScriptletArguments arguments)
{
DOMDocument document = Window.Document;
Observable mouseMove = Observable.FromHtmlEvent(document, "mousemove");
string text = "time flies like an arrow";
DOMElement container = document.GetElementById("container");
for (int i = 0; i < text.Length; i++)
{
ActionInt32 closure = delegate (int j)
{
DOMElement s = document.CreateElement("span");
s.InnerHTML = text.CharAt(j).ToString();
s.Style.Position = "absolute";
container.AppendChild(s);
mouseMove.Delay(j * 100).Subscribe(delegate(object o)
{
Event mouseEvent = (Event)o;
s.Style.Top = mouseEvent.OffsetY + "px";
s.Style.Left = mouseEvent.OffsetX + j * 10 + 15 + "px";
});
};
closure(i);
}
}
}
As you can see the code looks very similar to the JavaScript version, just adding a few types. One of the interesting things is that just like in the JavaScript version, you’ll need to put a manual closure inside the for loop. The reason for this is that Script# gives you C# syntax, but maintains JavaScript semantics.
There you have it, your first Rx Script# app. Any feedback on Rx for Script# is of course welcome on the Rx forum