sidebar.anubis 3.61 KB
/*
 * Created by PyramIDE.
 * User: フランスのトトロ aka (David RENÉ) 
 * Date: 01/05/2026
 * Time: 15:11
 * © David RENÉ
 */


transmit xlib/web/widgets/left_menu.anubis
read xlib/web/making_a_web_site.anubis
read xlib/web/web_action.anubis
read xlib/web/load_content.anubis

define List(HTML)
  make_sidebar 
  (
    (String) -> String    _T,         //translator function 
    List(Left_Menu_Entry) entries,
    String                selected,
    List(HTML)   so_far
  )=
  if entries is 
  {
    []      then reverse(so_far),  //reverse to be in the right direction
    [h . t] then
      with entry = 
        if h is
        {
          left_menu_entry(_menu_id, subentry, _classes, _action, _text, _extra) then 
            with item_class = if subentry then "subitem " else "item ",
            li(class("nav-item"),
             p([class(item_class+_menu_id+"_icon"+(if _menu_id=selected then " selected" else "")+ " "+join(" ", _classes))],actioner(same,same, link(_T(_text)),_action,_extra))),
            
          left_menu_entry_js(_menu_id, subentry, _classes, _js_to_call, _text) then
            with item_class = if subentry then "subitem " else "item ",
             li(class("nav-item"),
                p([class(item_class+"clickable "+_menu_id+"_icon"+(if _menu_id=selected then " active" else "")+ " "+join(" ", _classes)),
                 event(onclick, _js_to_call)],text(_T(_text)))),
                 
          left_menu_entry_load_content(_menu_id, subentry, _classes, _action, _text, _extra, _target_id, _replace, _overlay) then
            with item_class = if subentry then "subitem " else "item ",
              li(class("nav-item"),
                p([class(item_class+"clickable "+_menu_id+"_icon"+(if _menu_id=selected then " active" else "")+ " "+join(" ", _classes)),
                   event(onclick, load_content(_target_id, _action, _extra, _replace, _overlay))],text(_T(_text)))),
                   
          title(_title_id, subtitle, _classes, _text)  then
            p([class(if subtitle then "menu_subtitle" else "menu_title"), class((if _title_id=selected then " active" else "")+ " "+join(" ", _classes))], text([],_T(_text)))
//            p([class("menu_title"), class("item "+_title_id+"_icon"+if _title_id=selected then " selected" else ""+ " "+join(" ", _classes))], text([],_T(_text)))
        },
      make_sidebar(_T, t, selected, [ entry . so_far])
  }.

public define HTML
  make_sidebar
  (
    (String) -> String    _T,         //translator function 
    Left_Menu             l_menu
  )=
  if l_menu is 
  {
    no_left_menu                  then empty,
    left_menu(entries, selected)  then
      head_tags([css(css_file("/css/left_menu.css"))],
        make_sidebar(_T, entries, selected, [])
      )
  }
.
  


public define One     set_current_left_menu(WEB_Session s, String v)                    = replace_String(s.fields, "AWS_CURRENT_LEFT_MENU", v).
public define One     set_current_left_menu(Var(List(Session_Field)) fields, String v)  = replace_String(fields, "AWS_CURRENT_LEFT_MENU", v).
public define String  get_current_left_menu(WEB_Session s)                              = get_String    (s.fields, "AWS_CURRENT_LEFT_MENU", "").

public define One     set_selected_left_menu_entry(WEB_Session s, String v)                    = replace_String(s.fields, "AWS_SELECTED_LEFT_MENU_ENTRY", v).
public define One     set_selected_left_menu_entry(Var(List(Session_Field)) fields, String v)  = replace_String(fields, "AWS_SELECTED_LEFT_MENU_ENTRY", v).
public define String  get_selected_left_menu_entry(WEB_Session s)                              = get_String    (s.fields, "AWS_SELECTED_LEFT_MENU_ENTRY", "").