package menus import ( "net/url" "go.sebtobie.de/httpserver/auth" ) // Menu is an Interface to give the server infos about menuitems type Menu interface { Name() string AltText() string URL() *url.URL Children() []Menu Enabled(auth.Account) bool } // MenuSite is an interface that is fullfilled by sites to return an type of menu. type MenuSite interface { Menu() []Menu } // MenuItem is an Implementation of the Menu Interface // Enabled returns always true type MenuItem struct { ItemName string ItemAltText string ItemURL *url.URL ItemChildren []Menu } // Name returns the name of the Item. func (m *MenuItem) Name() string { return m.ItemName } // AltText is for hovertext or Descriptions. Its can return "". // to make templatemaking easier i decided to make an return required. func (m *MenuItem) AltText() string { return m.ItemAltText } // URL returns the full URL of the item. func (m *MenuItem) URL() *url.URL { return m.ItemURL } // Children returns the ItemChildren or an empty Menu-Arry if ItemChildren is nil func (m *MenuItem) Children() []Menu { if m.ItemChildren == nil { return []Menu{} } return m.ItemChildren } // Enabled returns always true func (*MenuItem) Enabled(auth.Account) bool { return true } var _ Menu = &MenuItem{}