Skip to content

Instantly share code, notes, and snippets.

@srid
Created August 2, 2015 18:13
Show Gist options
  • Save srid/cf77620f1bd94100845c to your computer and use it in GitHub Desktop.
Save srid/cf77620f1bd94100845c to your computer and use it in GitHub Desktop.
[srid@Actual:~/code/warpex]
$ ls packages/
Microsoft.Owin/ Owin/
Microsoft.Owin.Diagnostics/ WebSharper/
Microsoft.Owin.FileSystems/ WebSharper.Compiler/
Microsoft.Owin.Host.HttpListener/ WebSharper.Owin/
Microsoft.Owin.Hosting/ WebSharper.UI.Next/
Microsoft.Owin.SelfHost/ WebSharper.Warp/
Microsoft.Owin.StaticFiles/
[srid@Actual:~/code/warpex]
$ fsharpc main.fs
F# Compiler for F# 3.1 (Open Source Edition)
Freely distributed under the Apache 2.0 Open Source License
/Users/srid/code/warpex/main.fs(2,7): error FS0039: The type 'Server' is not defined
/Users/srid/code/warpex/main.fs(8,3): error FS0039: The type 'Client' is not defined
/Users/srid/code/warpex/main.fs(10,10): error FS0039: The namespace or module 'WebSharper' is not defined
/Users/srid/code/warpex/main.fs(11,10): error FS0039: The namespace or module 'WebSharper' is not defined
/Users/srid/code/warpex/main.fs(14,21): error FS0039: The value or constructor 'Input' is not defined
/Users/srid/code/warpex/main.fs(15,22): error FS0039: The value or constructor 'H1' is not defined
/Users/srid/code/warpex/main.fs(16,9): error FS0039: The value or constructor 'Div' is not defined
/Users/srid/code/warpex/main.fs(32,5): error FS0039: The namespace or module 'Warp' is not defined
/Users/srid/code/warpex/main.fs(39,4): error FS0039: The namespace or module 'Warp' is not defined
[srid@Actual:~/code/warpex]
$
@srid
Copy link
Author

srid commented Aug 2, 2015

[srid@Actual:~/code/warpex]
$ ls -l
total 24
-rw-r--r--   1 srid  staff  1018  2 Aug 11:09 main.fs
drwxr-xr-x  15 srid  staff   510  2 Aug 11:08 packages/
-rw-r--r--   1 srid  staff    54  2 Aug 11:08 paket.dependencies
-rw-r--r--   1 srid  staff  1310  2 Aug 11:08 paket.lock
[srid@Actual:~/code/warpex]
$ cat paket.dependencies
source https://nuget.org/api/v2

nuget WebSharper.Warp
[srid@Actual:~/code/warpex]
$ cat paket.lock
NUGET
  remote: https://nuget.org/api/v2
  specs:
    Microsoft.Owin (3.0.1)
      Owin (>= 1.0)
    Microsoft.Owin.Diagnostics (3.0.1)
      Microsoft.Owin (>= 3.0.1)
      Owin (>= 1.0)
    Microsoft.Owin.FileSystems (3.0.1)
    Microsoft.Owin.Host.HttpListener (3.0.1)
    Microsoft.Owin.Hosting (3.0.1)
      Microsoft.Owin (>= 3.0.1)
      Owin (>= 1.0)
    Microsoft.Owin.SelfHost (3.0.1)
      Microsoft.Owin (>= 3.0.1)
      Microsoft.Owin.Diagnostics (>= 3.0.1)
      Microsoft.Owin.Host.HttpListener (>= 3.0.1)
      Microsoft.Owin.Hosting (>= 3.0.1)
      Owin (>= 1.0)
    Microsoft.Owin.StaticFiles (3.0.1)
      Microsoft.Owin (>= 3.0.1)
      Microsoft.Owin.FileSystems (>= 3.0.1)
      Owin (>= 1.0)
    Owin (1.0)
    WebSharper (3.4.8.187)
    WebSharper.Compiler (3.4.8.187)
      WebSharper (>= 3.4.8.187)
    WebSharper.Owin (3.4.5.101)
      Microsoft.Owin
      Owin
      WebSharper
    WebSharper.UI.Next (3.4.8.156)
      WebSharper
    WebSharper.Warp (3.4.11.38)
      Microsoft.Owin
      Microsoft.Owin.Diagnostics
      Microsoft.Owin.FileSystems
      Microsoft.Owin.Host.HttpListener
      Microsoft.Owin.Hosting
      Microsoft.Owin.SelfHost
      Microsoft.Owin.StaticFiles
      Owin
      WebSharper
      WebSharper.Compiler
      WebSharper.Owin
      WebSharper.UI.Next
[srid@Actual:~/code/warpex]
$

@srid
Copy link
Author

srid commented Aug 2, 2015

$ cat main.fs
module Server =
    [<Server>]
    let DoWork (s: string) =
        async {
            return System.String(List.ofSeq s |> List.rev |> Array.ofList)
        }

[<Client>]
module Client =
    open WebSharper.JavaScript
    open WebSharper.Html.Client

    let Main () =
        let input = Input [Attr.Value ""]
        let output = H1 []
        Div [
            input
            Button([Text "Send"])
                .OnClick (fun _ _ ->
                    async {
                        let! data = Server.DoWork input.Value
                        output.Text <- data
                    }
                    |> Async.Start
                )
            HR []
            H4 [Class "text-muted"] -- Text "The server responded:"
            Div [Class "jumbotron"] -< [output]
        ]

let MySite =
    Warp.CreateSPA (fun ctx ->
        [
            H1 [Text "Say Hi to the server"]
            Div [ClientSide <@ Client.Main() @>]
        ])

[<EntryPoint>]
do Warp.RunAndWaitForInput(MySite) |> ignore
[srid@Actual:~/code/warpex]
$

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment