jb/src/slider.ml
2025-01-03 20:49:15 +01:00

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 ]
] )