New in Seaside 3.0
Seaside 3.0 is the current stable version, also see the announcement.
Modularization
The monolithic Seaside package has been split into several independent modules. We expect this to have several advantages:
- Ports to existing and future platforms should be easier. The new platform layer is called Grease and independent of Seaside.
- It allows for smaller Seaside installations. For example you can have Seaside without the tests or without Kom and use Swazoo 2 instead.
- Hardened environments can run without any development tools like the toolbar, halos, inspector, walkback and friends. This reduces the chance that setup flaws result in users being able to exploit the application.
Internal
Internally Seaside now uses its own method for string conversion (#seasideString
) instead of a very brittle and confusing combination of #asString
and #displayString
. We also introduced a GRObject
class for objects that should receive #initialize
upon creation. This should not affect users.
First class mime types and locales
Seaside now has first class objects (WAMimeType
and WALocale
) instead of String
s. This should leave most users unaffected because they can get away using String
s just the same as for WAUrl
. Except one place though and that is WAFile >> #contentType
which now returns an instance of WAMimeType
.
Request Context
-
WARequestContext
provides a lot of functionality that earlierWASession
did provide. It also provides new functionality that earlier was not available at all. -
#application
,#session
, and (new)#requestContext
have been implemented onGRObject
, which means they are accessible from any Seaside object. Note that they will signal aWARequestContextNotFound
error if there is no current request context available. - Moved rendering and redirecting methods from
WASession
toWARequestContext
- The code entry paths for request handlers changed so that they all expect aWARequestContext
instead of aWARequest
.WASession
was changed so that its#responseForContext:
method sets a value forWACurrentRequestContext
. All methods from then on in your application can access the request context through that process variable by callingself requestContext
from most Seaside objects.
Rewrites and major refactorings
- Mostly rewritten configuration system (with tests!)
- Pluggable
WACache
removes the need forWALRUCache
andWAExpiringHandler
and should give much more flexibility in caching policies - The Render Loop was refactored to remove
WARenderLoop
and re-implement the two continuations to prevent entering each one twice and hopefully make the flow clearer. There is now one continuation for the action phase and one for the render phase. - Rewritten exception handling
Security
- Generation of continuation and session keys is roughly 30 times faster (on Squeak).
- Session keys are now 96 bit, continuation keys 48 bit.
Major New Features
- Filters for
WARequestHandler
s.
JavaScript
- Generic Javascript related things of the
Scriptaculous
package have been moved to a newJavascript
package. This makes it much easier to integrate new Javascript libraries. - Together with this change some of the class prefixes changed, such as
SUStream
andSUScript
are now calledJSStream
andJSScript
. -
The Javascript package comes with a full-fledged JSON parser. -
Scriptaculous-Components
is a collection of widgets built using the script.aculo.us Javascript library. - Seaside features now an officially supported integration of JQuery and JQuery-UI.
Other
- The server adapter infrastructure on Squeak has been reworked. This allows the Kom and Swazoo 2 adapter to share code.
- Support for Exupery.
- Configuration attributes now have comments as tooltip.
- Down level-revealed Conditional Comments with
#revealedIf
- added
WACollectionAttribute
and refactored libraries to use the new configuration attribute. - fixed a nasty bug when backtracking an
OrderedCollection
. - Added a convenience method
#cacheForever
toWAResponse
. A session can now tell a response to cacheForever. This would only apply to that individual response. (Ramon Leon). -
WAStandardScripts
removed,WAStandardStyles
removed, useWAStandardFiles
instead. -
Continuation
renamed toWAContinuation
. - The usual round of small bug fixes.
- Configurable root decorations.
- Better eCompletion support.
-
WARequestHandler
s can be decorated and are on a request processing stack. -
#with:
inWATextInput
andWASubmitButton
as a synonym to#text:
, what is much more consistent. -
WARequestCookies
is aCollection
of instances ofWARequestCookie
instead of aDictionary
. -
WACookie
supports many more features. - The session cookie key is now
_s
. - The mime type and character set are configured in the application instead of the session.
- Support for non-ASII URLs (and parameters).
-
WARequest>>fields
contains both GET and POST fields (important for action url of <form>s) - Remote address now part of
WARequest
, you don’t need to access the native request anymore. - Experimental upload streaming on Squeak and Kom.
- Lightweight mime document class that implementors can use.
- Dialogs should no longer produce invalid HTML.
-
WARequest>>url
now returns aWAUrl
object. - Callbacks are no longer executed while traversing the component tree. This means that components and decorations no longer have the opportunity to affect the execution of components and decorations below them on the tree.
#processCallbackStream:
and#processChildCallbacks:
no longer exist and are not called. - Tons of new tests.
- Sessions no longer (re-)register themselves with the Application. This may change some weird edge-case behaviour if users were expecting to be able to render their components after unregistering a session. This should not be possible as the session is unavailable by the time the render request arrives.
- The session cookie value is no longer added by the Application to the GET parameters in the incoming request. This means that the incoming request reflects the actual parameters passed in by the user.
- New ANSI based valuable protocol.
- the
/seaside
has been removed from the URL
Note that some of these improvements have been backported to Seaside 2.8.