The loli package

[Tags: bsd3, deprecated, library]

Deprecated in favor of miku

A simple library for fast web prototyping in Haskell.


[Skip to ReadMe]

Properties

Versions2009.6.25, 2009.6.26, 2009.6.27, 2009.6.29, 2009.7.2, 2009.8.16, 2009.8.18, 2009.10.13, 2010.10.9, 2011.6.24
Change logchangelog.md
Dependenciesbase (>4 && <=5), bytestring, containers, data-default, hack (>=2009.5.19), hack-contrib (>=2009.6.25), mps (>=2009.6.25), mtl, template, utf8-string [details]
LicenseBSD3
AuthorWang, Jinjing
MaintainerWang, Jinjing <nfjinjing@gmail.com>
CategoryWeb
Home pagehttp://github.com/nfjinjing/loli
UploadedMon Jun 29 14:14:05 UTC 2009 by JinjingWang
DistributionsNixOS:2011.6.24
Downloads1359 total (93 in last 30 days)
Votes
0 []
StatusDocs uploaded by user
Build status unknown [no reports yet]

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for loli-2009.6.29

loli

A minimum web dev DSL

Example

First app

-- myloli.hs

import Network.Loli
import Hack.Handler.Happstack

main = run . loli $ get "/" (text "loli power")

Install and compile:

cabal update
cabal install loli
cabal install hack-handler-happstack

ghc --make myloli.hs
./myloli

check: http://localhost:3000

Routes

Verb

get "/" $ do
  -- something for a get request

post "/" $ do
  -- for a post request

put "/" $ do
  -- put ..

delete "/" $ do
  -- ..

Captures

get "/say/:user/:message" $ do
  text . show =<< captures

-- /say/jinjing/hello will output
-- [("user","jinjing"),("message","hello")]

Static

-- public serve, only allows /src
public (Just ".") ["/src"]

Views root

-- in `./views`, can be changed by
views "template"

Template

Text Template

import Network.Loli.Template.TextTemplate

-- template
get "/hi/:user" $ output (text_template "hello.html")

-- in hello.html
<html>
<title>hello</title>
<body>
  <p>hello $user</p>
</body>
</html>

Local binding

get "/local-binding" $ do
  bind "user" "alice" $ output (text_template "hello.html")

Batched local bindings

get "/batched-local-binding" $ do
  context [("user", "alice"), ("password", "foo")] $ 
    text . show =<< locals

Partials

Partials are treated the same as user supplied bindings, i.e. the rendered text is available to the rest of templates, referenced by user supplied keywords.

with single partial

get "/single-partial" $ do
  partial "user" (const_template "const-user") $ do
    text . show =<< template_locals

with batched partials

get "/group-partial" $ do
  partials 
    [ ("user", const_template "alex")
    , ("password", const_template "foo")
    ] $ output (text_template "hello.html")

Layout

Local

get "/with-layout" $ do
  with_layout "layout.html" $ do
    text "layout?"

-- in layout.html
<html>
<body>
  <h1>using a layout</h1>
  $content
</body>
</html>

Global

layout "layout.html"

By passed

get "/no-layout" $ do
  no_layout $ do
    text "no-layout"

Mime types

-- treat .hs extension as text/plain
mime "hs" "text/plain"

Hack integration

Use hack middleware

import Hack.Contrib.Middleware.ETag
import Hack.Contrib.Middleware.ShowStatus

middleware etag
middleware show_status

Convert loli into a hack application

-- in Network.Loli.Engine

loli :: Unit -> Application

Note

If you see this, use the git version!