[Seaside] Re: javascript popups

Avi Bryant avi at beta4.com
Thu Feb 19 21:39:58 CET 2004


On Feb 19, 2004, at 12:28 PM, Colin Putney wrote:

> Wrong list, dude.

Oops, sorry.  I've gotta stop doing that.  Now copied to the Seaside 
list.

> On Feb 19, 2004, at 2:54 PM, Avi Bryant wrote:
>
>> I did some work last night experimenting with ways of doing popup 
>> windows.  I committed some preliminary support to the 2.5 development 
>> branch (I'll be doing a 2.5 alpha release very soon), but I thought 
>> I'd describe it here in case anyone wants to use it in the current 
>> version.
>>
>> The first, simplest thing I did was to add 
>> #anchorWithPopupUrl:extent:text: to WAHtmlBuilder.  This creates a 
>> link which will pop up a new window at the given URL with the given 
>> size, ie,
>>
>> html anchorWithPopupUrl: 'http://beta4.com/seaside2' extent: 400 at 400 
>> text: 'Powered by Seaside'.
>>
>> The code looks like this:
>>
>> anchorWithPopupUrl: urlString extent: aPoint text: aString
>> 	self anchorWithUrl:
>> 	'javascript:window.open(''',
>> 	urlString,
>> 	''','''',''width=',
>> 	aPoint x asString,
>> 	',height=',
>> 	aPoint y asString,
>> 	',scrollbars=yes,resizable=yes,menubar=yes'')' do: aString.
>>
>> The next thing I did was to add a simple method to WAHtmlRenderer 
>> that allows this to take an action block instead of a URL:
>>
>> anchorWithPopupAction: aBlock extent: aPoint text: aString
>> 	self
>> 		anchorWithPopupUrl: (self urlForAction: aBlock)
>> 		extent: aPoint
>> 		text: aString
>>
>> Now you can do something like
>>
>> html anchorWithPopupAction: [self inform: 'Hello world!'] extent: 
>> 400 at 400 text: 'Say hello'.
>>
>> This will popup a "Hello world!" window, but when you click OK you'll 
>> see the original page inside the popup.  We don't want that, so we 
>> need a way to close the popup and continue in the main window.  I did 
>> this by adding a special response method to WASession named 
>> #closePopup:
>>
>> closePopup
>> 	^ self respond:
>> 		[:url |
>> 		WAGenericResponse new
>> 			nextPutAll: '<html><script>';
>> 			nextPutAll: 'self.close();';
>> 			nextPutAll: 'self.opener.location=',url printString;
>> 			nextPutAll:'</script></html>';
>> 			yourself]
>>
>> Now if you do:
>>
>> html
>>    anchorWithPopupAction: [self inform: 'Hello... '.  self session 
>> closePopup.  self inform: '... world!']
>>    extent: 400 at 400
>>    text: 'Say hello'.
>>
>> When you click on the link, you'll get "Hello.." in a popup; when you 
>> click ok, the popup will close and the main window will show 
>> "...world".
>>
>> This should allow, for example, the popup progress bar Nevin was 
>> talking about pretty easily.  It's also good for popup editors (say, 
>> to add a new event to a calendar) where you want the main page to 
>> refresh once you've finished editing.
>>
>> Hope this is useful.
>>
>> Avi
>>
>>
>



More information about the Seaside mailing list