]>
git.ipfire.org Git - people/ms/westferry.git/blob - src/westferry/ui/menu.py
2 ###############################################################################
4 # Westferry - The IPFire web user interface #
5 # Copyright (C) 2015 IPFire development team #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
20 ###############################################################################
24 class MenuItem(object):
27 def __init__(self
, menu
=None):
34 class MenuDivider(MenuItem
):
38 class MenuHeader(MenuItem
):
41 def __init__(self
, title
, menu
=None):
42 MenuItem
.__init
__(self
, menu
=menu
)
47 class MenuLink(MenuItem
):
50 def __init__(self
, title
, handler
=None, url
=None, menu
=None):
51 MenuItem
.__init
__(self
, menu
=menu
)
54 self
.handler
= handler
56 self
.url
= url
or handler
.url
62 return isinstance(self
.menu
.handler
, self
.handler
)
65 class MenuMixin(object):
70 if not hasattr(self
, "_items"):
77 Iterator over all item in this menu
79 return iter(self
.items
)
81 def add_divider(self
, *args
, **kwargs
):
83 Adds a divider to the menu
85 divider
= MenuDivider(*args
, **kwargs
)
86 self
.items
.append(divider
)
90 def add_handler(self
, handler
, title
=None, **kwargs
):
92 Automatically adds a handler to the menu
94 title
= title
or self
.locale
.translate(handler
.title
)
96 return self
.add_link(title
=title
, handler
=handler
,
97 url
=handler
.url
, **kwargs
)
99 def add_header(self
, *args
, **kwargs
):
101 Adds a headline in the menu
103 header
= MenuHeader(*args
, **kwargs
)
104 self
.items
.append(header
)
108 def add_link(self
, *args
, **kwargs
):
110 Adds a link to the menu
112 link
= MenuLink(*args
, menu
=self
, **kwargs
)
113 self
.items
.append(link
)
117 def add_submenu(self
, *args
, **kwargs
):
119 Adds a submenu to the menu
125 submenu
= SubMenu(*args
, **kwargs
)
126 self
.items
.append(submenu
)
131 class Menu(MenuMixin
):
133 The main menu object that creates a little menu on the side
135 def __init__(self
, handler
, title
=None):
136 self
.handler
= handler
142 Shortcut to access the user's locale
144 return self
.handler
.locale
148 class SubMenu(MenuItem
, MenuMixin
):
150 A sub menu in the side menu
155 def __init__(self
, title
, menu
=None):
162 Shortcut to access the user's locale
164 return self
.menu
.locale
167 class SidebarMenuModule(base
.BaseUIModule
):
168 def render(self
, menu
):
169 return self
.render_string("modules/menu/sidebar.html", menu
=menu
)
172 class SidebarMenuLinkModule(base
.BaseUIModule
):
173 def render(self
, menu
, item
):
174 return self
.render_string("modules/menu/sidebar-link.html", item
=item
)
177 class SidebarMenuDividerModule(base
.BaseUIModule
):
178 def render(self
, menu
, item
):
179 return self
.render_string("modules/menu/sidebar-divider.html")
182 class SidebarMenuSubMenuModule(base
.BaseUIModule
):
183 def render(self
, menu
, submenu
):
184 return self
.render_string("modules/menu/sidebar-submenu.html", submenu
=submenu
)
187 class SidebarMenuSubMenuHeaderModule(base
.BaseUIModule
):
188 def render(self
, menu
, item
):
189 return self
.render_string("modules/menu/sidebar-submenu-header.html", item
=item
)