We are happy to announce the availability of WebSharper 3.4, which you can download here. Here are the main highlights of this release.
The sitelets API has received a well-needed cleanup and simplification.
Content is now always asynchronous: constructors and combinators take and return values of type Async<Content<_>>.
Context is now always passed from the sitelet to the content, rather than as a callback when constructing the content.
Content creation functions have been renamed:
Content.PageContent[Async] --> Content.Page overloaded with named arguments instead of a recordContent.JsonContent[Async] --> Content.JsonContent.CustomContent[Async] --> Content.CustomContent.Text was added.Content.File was added.A new module WebSharper.Application contains functions to create sitelets:
MultiPage is equivalent to Sitelet.Infer.SinglePage creates a sitelet with a single endpoint (action) and HTML content.Text creates a sitelet with a single endpoint and text content.Here is a small before/after comparison on a small 2-page application:
open WebSharper
open WebSharper.Sitelets
type EndPoint =
| [<EndPoint "GET /">] Home
| [<EndPoint "GET /api">] Api
// WebSharper 3.3
let HomePage =
Content.PageContent <| fun ctx ->
{ Page.Default with
Title = Some "Home"
Body = [A [HRef (ctx.Link Action.Home)] -< [Text "This is the home page."]]
}
let ApiPage =
Content.JsonContent <| fun ctx ->
["a value"; "serialized"; "to json"]
[<Website>]
let MyWebsite =
Sitelet.Infer <| function
| Action.Home -> HomePage
| Action.Api -> ApiPage
// WebSharper 3.4
let HomePage (ctx: Context<EndPoint>) =
Content.Page(
Title = "Home",
Body = [A [HRef (ctx.Link Action.Home)] -< [Text "This is the home page."]]
)
let ApiPage =
Content.Json ["a value"; "serialized"; "to json"]
[<Website>]
let MyWebsite =
Application.MultiPage <| fun ctx -> function
| Action.Home -> HomePage ctx
| Action.Api -> ApiPage ctx
A number of these new functions are equivalent to functions that were in WebSharper.Warp, which are now marked as obsolete.
We completely redesigned the HTML embedded language for WebSharper UI.Next. We will post another blog entry soon to fully describe the new design, but here are the main take-aways:
Doc can be used for both client-side and server-side markup. Some features are only available on one side, such as UI.Next reactive elements for the client and conversion to a Content<_> for the server. To use these features, you need to open WebSharper.UI.Next.Client or WebSharper.UI.Next.Server, respectively. Our goal for WebSharper 4.0 is to obsolete the current Html.Client and Html.Server, and to merge WebSharper.UI.Next into WebSharper under a new name. Doc will be the unique way to deal with HTML content, both on the client and the server side.
WebSharper 3.4 provides JavaScript proxies for the functions that were added to the standard library in F# 4.0. You can now call functions such as Seq.mapFold and Array.last from the client-side.
WebSharper 3.4 integrates several features related to cross-site requests to RPC functions:
DisableCsrfProtection() from module WebSharper.Web.Remoting at the top-level on the server side.WebSharper.Web.Remoting, the functions AddAllowedOrigin and associated can be called at the top-level on the server side to add CORS origins accepted by the RPC handler. In particular, PhoneGap applications need to add file:// as an allowed origin.Here are the minor changes and bug fixes for WebSharper 3.4:
Content.Page.Happy coding!
Can’t find what you were looking for? Drop us a line.