Jimmy Schementi wrote:
Michael Foord wrote:
Jimmy Schementi wrote:
Michael, question for you:


On every keypress Javascript calls into IronPython (via the C#!).

How come you used C# to handle the onkeypress event? This should do
it in Python:
Did you look at the code to see why? I'd be really interested to know
if
I can do what I'm doing from Python inside Silverlight, but I doubt it.
There's not much code in total, so it should be easy to follow.

Yep, I looked at it, and I'm pretty sure you can do everything from python. All 
the native Javascript functions are callable from python, or any .NET language, 
especially with HtmlPage.window.eval(), so there shouldn't be any limitation.

I actually handle the onkeypress event from Javascript (onkeypress.js).
This calls into 'getSelection' (cursor_pos.js) to work out the current
selection in the textarea. Naturally this is easy to do in Firefox /
Safari and scarily awful in IE. :-)

Attaching the event is simple:

from System.Windows.Browser.HtmlPage import Document
from System.Windows.Input import KeyEventHandler

Document.myTextAreaID.AttachEvent("onkeypress", KeyEventHander(onKeyPress))

def onKeyPress(sender, eventArgs):
  # Do something with eventArgs.CharacterCode
  pass

For converting the javascript to python, there are some special javascript variables that 
are in different places, like "window" is HtmlPage.Window, etc.


I've used the event attaching stuff before, but some of the Javascript is quite fiddly so I wasn't sure there was much benefit in moving it into Python.

My next version will probably be based on the Javascript UI of Try Ruby by Why the Luck Stiff (he has given me permission to use his JS):

http://tryruby.hobix.com/

Michael

Having worked these out (and shortcut a few specific scenarios - like
ctrl-A, ctrl-Z and ctrl-C), the Javascript then calls into IronPython
with the selection start, selection end, and the character that was
pressed. I use C# to expose a scriptable type that Javascript can call.

If you hooked all the events with Python, you wouldn't need to call back into 
it from Javascript. This is why I prefer doing everything with Python, so I 
avoid having a C# shim.

I use attaching events from Python to provide the sample code. There
are
three links above the console and Python handles the 'onclick' event to
swap the examples around.

Basically, if there is something pretty basic you can't do in Python that you 
can do from browser Javascript, it's a bug! =)

Michael Foord

<textarea id="code"></textarea>
<div id="result"></div>

from System import EventHandler
from System.Windows.Browser import Htmlpage, HtmlEventArgs

document = System.Windows.Browser.HtmlPage.Document
def onkeypress(s, e):
  document.result.innerHTML += "KeyPress<br />"
document.code.AttachEvent("onkeypress",
EventHandler[HtmlEventArgs](onkeypress))
Anyway, just wondering if anything was blocking you from hooking HTML
events with Python.
~js


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:users-
[EMAIL PROTECTED] On Behalf Of Michael Foord
Sent: Tuesday, June 17, 2008 2:52 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Python in the Browser updates

Hello all,

Sorry for the noise - but tomorrow I hope to package this for a
release
and if any of you get the chance to give me any feedback before
then.
http://www.voidspace.org.uk/ironpython/silverlight-
console/console.html
I think I have fixed all the basic usability issues (it is no longer
possible to screw up the console so that it refuses further input
for
example). To *really* fix input I ought to move execution into its
own
thread so that we can interrupt infinite loops [1] - but that is a
bigger change so I am resisting it for the moment.

The big change is that I have added some simple code snippets - as
an
example of how it could be used in tutorials or for teaching Python.

It is also easy to customize - the source code (200 lines of Python,
70
lines of Javascript, 25 lines of C#) shows how to prepopulate the
execution context and show the first few lines of code in the
interpreter.

You can get the sourcecode from the repository of course:

http://code.google.com/p/pythoninthebrowser/

All the best,

Michael Foord

[1] and then decide whether on windows a ctrl-c should send a
keyboard
interrupt or copy to the clipboard...

Michael Foord wrote:

For those who are interested, I've updated "Python in the Browser".

Both the repository:

http://code.google.com/p/pythoninthebrowser/

And the online demo:

http://www.voidspace.org.uk/ironpython/silverlight-

console/console.html

There are a few minor but nice improvements:

* The Javascript now works with IE 7!
* The textarea scrolls as input is printed
* The context window is disabled to prevent you pasting over the

input

area - not sure if this is really an improvement though...
* The input area is cleared on load - to stop browsers like Firefox
and Safari repopulating the textarea for us on browser refresh
* Recursion limit is set

I think it is basically in a useful state now... I might push out a
'0.1' release from the current SVN head.

All the best,

Michael Foord


--
http://www.ironpythoninaction.com/
http://www.theotherdelia.co.uk/
http://www.voidspace.org.uk/
http://www.ironpython.info/
http://www.resolverhacks.net/

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/
http://www.trypython.org/
http://www.ironpython.info/
http://www.theotherdelia.co.uk/
http://www.resolverhacks.net/

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to