[IronPython] Python in the Browser updates

Michael Foord fuzzyman at voidspace.org.uk
Wed Jun 18 03:01:23 PDT 2008


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.

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. :-)

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.

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.

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: users-bounces at lists.ironpython.com [mailto:users-
>> bounces at lists.ironpython.com] 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 at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>     
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   



More information about the Users mailing list