]>
git.ipfire.org Git - people/ms/westferry.git/blob - src/westferry/ui/menus.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 Element(object):
25 def __init__(self
, menu
, **kwargs
):
28 # Call initializer for inheriting classes
29 self
.initialize(**kwargs
)
38 class Header(Element
):
39 def initialize(self
, title
):
44 def initialize(self
, title
, handler
=None, url
=None):
46 self
.handler
= handler
53 return isinstance(self
.menu
.handler
, self
.handler
)
58 The main menu object that creates a little menu on the side
62 def __init__(self
, handler
, title
=None, parent
=None):
63 self
.handler
= handler
72 Shortcut to access the user's locale
74 return self
.handler
.locale
78 Iterator over all item in this menu
80 return iter(self
.elements
)
85 def _add_element(self
, cls
, *args
, **kwargs
):
86 element
= cls(self
, *args
, **kwargs
)
87 self
.elements
.append(element
)
91 def add_link(self
, *args
, **kwargs
):
93 Adds a link to the menu
95 return self
._add
_element
(Link
, *args
, **kwargs
)
97 def add_handler(self
, handler
, title
=None, **kwargs
):
99 Automatically adds a handler to the menu
101 title
= title
or self
.locale
.translate(handler
.title
)
103 return self
.add_link(title
=title
, handler
=handler
,
104 url
=handler
.url
, **kwargs
)
106 def add_header(self
, *args
, **kwargs
):
108 Adds a headline in the menu
110 return self
._add
_element
(Header
, *args
, **kwargs
)
112 def add_menu(self
, title
, **kwargs
):
114 Adds a sub-menu to the menu
116 return self
._add
_element
(Menu
, title
=title
, parent
=self
, **kwargs
)
119 class TopbarMenuModule(base
.BaseUIModule
):
120 def render(self
, menu
):
121 return self
.render_string("modules/menus/topbar.html", menu
=menu
)
124 class SidebarMenuModule(base
.BaseUIModule
):
125 def render(self
, menu
, nested
=False):
126 return self
.render_string(
127 "modules/menus/sidebar.html",
133 class MenuLinkModule(base
.BaseUIModule
):
134 def render(self
, element
):
135 return self
.render_string("modules/menus/link.html", element
=element
)
138 class MenuDropdownModule(base
.BaseUIModule
):
139 def render(self
, menu
, nested
=False):
140 return self
.render_string("modules/menus/dropdown.html",
141 menu
=menu
, nested
=nested
)