Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Eliom_tools

module Eliom_tools : sig..end

Helpers for (hierarchical) menu generation in HTML5. See the Eliom manual for more information about menu or hierarchical site.


type srv =  | Srv of 
    (unit, unit, Eliom_service.get, 'a, 'b, 'c, 'd,
     [ `WithoutSuffix ], unit, unit, Eliom_service.non_ocaml)
    Eliom_service.t
type 'a hierarchical_site = 
  main_page *
  ('a * 'a hierarchical_site_item) list

Hierarchical sites description. This is a pair (main page, subpages list). Each subpage is defined by the text to be displayed in menus and a Eliom_tools.hierarchical_site_item.

type 'a hierarchical_site_item =  | Disabled | Site_tree of 'a hierarchical_site

Menu entry description in a hierarchical site.

type main_page =  | Main_page of srv(* <<div class="odocwiki_info"|~Main page for your subsite~: all the subpages are subsections of
      that page~.
>> *) | Default_page of srv(* <<div class="odocwiki_info"|~Like <<span class="odocwiki_inlinecode"|~Main~_page>> but is not taken into account for computing
      which is the current page in the menu~. ~Use it for example when
      there is no main page~, but you want one of the subpages to be
      the default page for your subsite~.  ~The service you use as
      default page must appear another time in the subtree!
>> *) | Not_clickable(* <<div class="odocwiki_info"|~When you do not want the menu entry to be a link but you want
      subpages~.
>> *)

Main page description for a section of a hierarchical site.

Tools for generating certain HTML elements

module type HTML5_TOOLS = sig..end
module F : HTML5_TOOLS

Menus with functional node semantics

module D : HTML5_TOOLS

Menus with DOM semantics

val with_js_file : string list -> unit

Record an (external) JavaScript file to be included in Eliom_tools.F.html.

val with_css_file : string list -> unit

Record an CSS file to be included in Eliom_tools.F.html.

Other tools

val wrap_handler : 
  (unit -> 'a option Lwt.t) ->
  ('get -> 'post -> 'res Lwt.t) ->
  ('a -> 'get -> 'post -> 'res Lwt.t) -> 'get -> 'post -> 'res Lwt.t

This function allows one to wrap a service handler easily depending on whether certain information is available or not.

The first arguments provides that information (Some value) of not (None), the second argument is called just with two arguments when the information is not available (the two arguments are suggesting GET and POST parameters of a request). The third argument is called with that information if available and the parameters.

let user_eref = Eliom_reference.eref ~scope None
    let anonymous_handler _ _ =
      Lwt.return (html (head (title "not allowed")) (body []))
    let authenticated_handler f =
      Eliom_tools.wrap_handler
        (fun () -> Eliom_reference.get user_eref)
        anonymous_handler f
    let guarded_service =
      My_app.register_service ~path ~get_param
        (authenticated_handler
           (fun user get () ->
              Lwt.return (html (head (title ("hello "^user))) (body []))))