Version 1.2.0
This is a preliminary version of the documentation. Help us to improve it by filling tickets. We are looking for native english speakers to proof read the documentation. Contact us!
let hierarchical_menu_depth_first
?(classe=[])
?(whole_tree=false)
((page, pages) as the_menu)
?service
~sp =
let rec depth_first_fun pages level pos : {{ [Xhtmltypes_duce.ul*] }} =
let rec one_item first last i s : Xhtmltypes_duce.li =
let (classe, pos2, deplier) =
match pos with
| [] -> ([], [], false)
| a::l when a = i -> ([current_class], l, true)
| _::l -> ([], [], false)
in
let classe =
if last then
last_class::classe
else classe
in
let classe =
if first then
first_class::classe
else classe
in
(* let attclass =
if classe = [] then
[]
else [a_class classe]
in *)
match s with
| (text, Site_tree (Default_page page, []))
| (text, Site_tree (Main_page page, [])) ->
{{ <li class={: attrib_list classe :}>[{: a page sp {: text :} () :}] }}
| (text, Site_tree (Not_clickable, [])) ->
{{ <li class={: attrib_list classe :}>{: text :} }}
| (text, Disabled) ->
{{ <li class={: attrib_list (disabled_class::classe) :}>{: text :} }}
| (text, Site_tree (Default_page page, hsl))
| (text, Site_tree (Main_page page, hsl)) ->
{{ <li class={: attrib_list classe :}>[
{: a page sp {: text :} () :}
!{: if deplier || whole_tree then
(depth_first_fun hsl (level+1) pos2)
else {{ [] }}
:}
] }}
| (text, Site_tree (Not_clickable, hsl)) ->
{{ <li class={: attrib_list classe :}>[
!{: text :}
!{: if deplier || whole_tree then
(depth_first_fun hsl (level+1) pos2)
else
{{ [] }} :}
] }}
(* li ~a:attclass
((text : Xhtmltypes.a_content XHTML.M.elt list
:> Xhtmltypes.li_content XHTML.M.elt list)@
if deplier || whole_tree then
(depth_first_fun hsl (level+1) pos2
: [ `Ul ] XHTML.M.elt list
:> [< Xhtmltypes.li_content > `Ul ] XHTML.M.elt list)
else []) *)
and one_menu first i l : {{ [Xhtmltypes_duce.li*] }} = match l with
| [] -> {{ [] }}
| [a] -> let aa = one_item first true i a in {{ [ aa ] }}
| a::l ->
let aa = one_item first false i a in
let al = one_menu false (i+1) l in
{{ [ {: aa :} !{: al :} ] }}
in
let classe = (level_class^string_of_int level)::classe in
match one_menu true 0 pages with
| {{ [] }} -> {{ [] }}
| {{ l }} -> {{ [ <ul class={: attrib_list (menu_class::classe) :}>l ] }}
in
(depth_first_fun pages 0 (find_in_hierarchy service the_menu))