[IronPython] Python in the Browser updates

Michael Foord fuzzyman at voidspace.org.uk
Thu Jun 19 03:12:46 PDT 2008


Jimmy Schementi wrote:
> My "Try IronRuby (in the browser)" toy console does doesn't users a 1-row textarea that expands as more rows are added. The previous console output isn't in the textarea, it's moved into a div above it. It's easy to hide everything's borders and set the margins/paddings right with CSS that the effect is transparent.
>
> When I get my bits in the wild feel free to rip it off =)
>   
I probably will do...

Michael

> ~js
>
>   
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-
>> bounces at lists.ironpython.com] On Behalf Of Michael Foord
>> Sent: Thursday, June 19, 2008 2:05 AM
>> To: Discussion of IronPython
>> Subject: Re: [IronPython] Python in the Browser updates
>>
>> Hello all,
>>
>> Thanks Jonathan. The approach you suggest has several great advantages.
>> The disadvantages are that you lose the ability to copy and paste (I
>> think most browsers forbid you from manipulating the clipboard from
>> Javascript unless the user has fiddled with some obscure settings).
>>
>> For the first release I'll stick with a textarea but I'll prototype
>> your
>> suggestion for the next release and see what I think.
>>
>> Michael Foord
>>
>> Jonathan Slenders wrote:
>>     
>>> 2008/6/18 Michael Foord <fuzzyman at voidspace.org.uk
>>> <mailto:fuzzyman at voidspace.org.uk>>:
>>>
>>>     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.
>>>
>>>
>>>
>>> I think Jimmy is right here. And the parts you did in javascript,
>>> could also be done in Silverlight. Some suggestions how I would do
>>>       
>> this:
>>     
>>> - instead of a text area, I'd use a html <div> , with CSS "overflow:
>>> auto;" for the scrollbars.
>>> - insert a <p> tag for each line into the <div>.
>>> - capture the body.onkeypress events for input
>>> - keep a textinput buffer in IronPython, but show the last line by
>>> copying it on each keypress to the last <p>
>>> - The cursor could be <span>, styled in CSS to show a pinking cursor.
>>> - handle the left/right arrows to shift the cursor
>>> - handle the up/down arrows to replace the last <p> with the second
>>> last executed command
>>> - on a "enter" press, process that line.
>>> - when using a <div>, it's even very easy to do syntax highlighting
>>>       
>> on
>>     
>>> the fly. Surround known keywords by a <span class="keyword"> and
>>>       
>> style
>>     
>>> them.
>>>
>>> That shouldn't be too hard to do. But you should decide whether it's
>>> necessary to have this all in IronPython. Probably, it's the cleanest
>>> way to do it.
>>>
>>> Jonathan
>>> ---------------------------------------------------------------------
>>>       
>> ---
>>     
>>> _______________________________________________
>>> 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
>>     
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   



More information about the Users mailing list