57 lines
1.4 KiB
OCaml
57 lines
1.4 KiB
OCaml
open Tyxml.Html
|
|
open Lang
|
|
|
|
type input =
|
|
{ img : Lang.img
|
|
; link : string option
|
|
}
|
|
|
|
let make request ~is_home (vs : input list) =
|
|
let slides_radio =
|
|
List.mapi
|
|
(fun i _p ->
|
|
let a =
|
|
[ a_input_type `Radio; a_name "slides"; a_id (Fmt.str "slides-%d" i) ]
|
|
in
|
|
let a = if i = 0 then a_checked () :: a else a in
|
|
input ~a () )
|
|
vs
|
|
in
|
|
let slides_ul =
|
|
List.map
|
|
(fun v ->
|
|
let img =
|
|
[ img request ~a:[] ~src:(Sitemap.img v.img.name) ~alt:v.img.alt ]
|
|
in
|
|
let li_content =
|
|
match v.link with
|
|
| None -> img
|
|
| Some link -> [ a ~a:[ a_href link ] img ]
|
|
in
|
|
li li_content )
|
|
vs
|
|
in
|
|
let slides_labels =
|
|
List.mapi
|
|
(fun i _v -> label ~a:[ a_label_for (Fmt.str "slides-%d" i) ] [])
|
|
vs
|
|
in
|
|
let slides_arrows =
|
|
slides_labels
|
|
@ [ label ~a:[ a_label_for "slides-0"; a_class [ "goto-first" ] ] []
|
|
; label
|
|
~a:
|
|
[ a_label_for (Fmt.str "slides_%d" (List.length vs - 1))
|
|
; a_class [ "goto-last" ]
|
|
]
|
|
[]
|
|
]
|
|
in
|
|
div
|
|
~a:[ a_class ([ "csslider" ] @ if is_home then [ "home-slider" ] else []) ]
|
|
( slides_radio
|
|
@ [ ul slides_ul
|
|
; div ~a:[ a_class [ "arrows" ] ] slides_arrows
|
|
; div ~a:[ a_class [ "navigation" ] ] [ div slides_labels ]
|
|
] )
|