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 Strings. This should leave most users unaffected because they can get away using Strings just the same as for WAUrl. Except one place though and that is WAFile >> #contentType which now returns an instance of WAMimeType.
Request Context
-
WARequestContextprovides a lot of functionality that earlierWASessiondid provide. It also provides new functionality that earlier was not available at all. -
#application,#session, and (new)#requestContexthave been implemented onGRObject, which means they are accessible from any Seaside object. Note that they will signal aWARequestContextNotFounderror if there is no current request context available. - Moved rendering and redirecting methods from
WASessiontoWARequestContext- The code entry paths for request handlers changed so that they all expect aWARequestContextinstead of aWARequest.WASessionwas 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 requestContextfrom most Seaside objects.
Rewrites and major refactorings
- Mostly rewritten configuration system (with tests!)
- Pluggable
WACacheremoves the need forWALRUCacheandWAExpiringHandlerand should give much more flexibility in caching policies - The Render Loop was refactored to remove
WARenderLoopand 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
WARequestHandlers.
JavaScript
- Generic Javascript related things of the
Scriptaculouspackage have been moved to a newJavascriptpackage. This makes it much easier to integrate new Javascript libraries. - Together with this change some of the class prefixes changed, such as
SUStreamandSUScriptare now calledJSStreamandJSScript. -
The Javascript package comes with a full-fledged JSON parser. -
Scriptaculous-Componentsis 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
WACollectionAttributeand refactored libraries to use the new configuration attribute. - fixed a nasty bug when backtracking an
OrderedCollection. - Added a convenience method
#cacheForevertoWAResponse. A session can now tell a response to cacheForever. This would only apply to that individual response. (Ramon Leon). -
WAStandardScriptsremoved,WAStandardStylesremoved, useWAStandardFilesinstead. -
Continuationrenamed toWAContinuation. - The usual round of small bug fixes.
- Configurable root decorations.
- Better eCompletion support.
-
WARequestHandlers can be decorated and are on a request processing stack. -
#with:inWATextInputandWASubmitButtonas a synonym to#text:, what is much more consistent. -
WARequestCookiesis aCollectionof instances ofWARequestCookieinstead of aDictionary. -
WACookiesupports 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>>fieldscontains 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>>urlnow returns aWAUrlobject. - 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
/seasidehas been removed from the URL
Note that some of these improvements have been backported to Seaside 2.8.
