templates_modules_menudir = $(templates_modulesdir)/menu
dist_templates_modules_menu_DATA = \
+ src/templates/modules/menu/dropdown.html \
+ src/templates/modules/menu/link.html \
src/templates/modules/menu/sidebar.html \
- src/templates/modules/menu/sidebar-link.html
+ src/templates/modules/menu/topbar.html
ui_modulesdir = $(datadir)/westferry/templates/modules
<div class="grid-container">
<div class="top-bar">
<div class="top-bar-left">
- <ul class="dropdown menu" data-dropdown-menu>
- <li class="menu-text">{{ hostname() }}</li>
- <li>
- <a href="#">One</a>
- <ul class="menu vertical">
- <li><a href="#">One</a></li>
- <li><a href="#">Two</a></li>
- <li><a href="#">Three</a></li>
- </ul>
- </li>
- <li><a href="#">Two</a></li>
- <li><a href="#">Three</a></li>
- </ul>
+ {% module TopbarMenu(handler.topmenu) %}
</div>
<div class="top-bar-right">
--- /dev/null
+{% import westferry.ui.menu %}
+
+<a href="#">{{ menu.title or _("- No Title -") }}</a>
+
+<ul class="menu vertical {% if nested %}nested{% end %}">
+ {% for element in menu %}
+ <li>
+ {% if isinstance(element, westferry.ui.menu.Menu) %}
+ {% module MenuDropdown(element, nested=True) %}
+ {% elif isinstance(element, westferry.ui.menu.MenuLink) %}
+ {% module MenuLink(element) %}
+ {% end %}
+ </li>
+ {% end %}
+</ul>
--- /dev/null
+<a href="{{ element.url }}">
+ {{ element.title }}
+</a>
+++ /dev/null
-<a href="{{ item.url }}">
- {{ item.title }}
-</a>
{% for i in menu %}
<li {% if i.is_active() %}class="is-active"{% end %}>
{% if i.type == "link" %}
- {% module SidebarMenuLink(i) %}
+ {% module MenuLink(i) %}
{% elif i.type == "menu" %}
{% module SidebarMenu(i, nested=True) %}
{% end %}
--- /dev/null
+{% import westferry.ui.menu %}
+
+<ul class="dropdown menu" data-dropdown-menu>
+ <li class="menu-text">{{ hostname() }}</li>
+
+ {% for element in menu %}
+ <li>
+ {% if isinstance(element, westferry.ui.menu.Menu) %}
+ {% module MenuDropdown(element) %}
+ {% elif isinstance(element, westferry.ui.menu.MenuLink) %}
+ {% module MenuLink(element) %}
+ {% end %}
+ </li>
+ {% end %}
+</ul>
"""
return self.application.backend
+ @property
+ def topmenu(self):
+ """
+ Creates the default menu in to the top navigation
+ """
+ _ = self.locale.translate
+
+ # XXX This is ugly, but since this file declares the base handler,
+ # recursive imports fail
+ from . import analytics
+ from . import demo
+
+ menu = ui.menu.Menu(self)
+
+ # Analytics
+ menu.add_handler(analytics.AnalyticsOverviewHandler, title=_("Analytics"))
+
+ # Demo (only in debug mode)
+ if self.backend.debug:
+ submenu = menu.add_menu(_("Demo"))
+
+ submenu.add_handler(demo.DemoOverviewHandler)
+ submenu.add_handler(demo.DemoFormsHandler)
+
+ return menu
+
@functools.cached_property
def tabs(self):
return ui.tabs.Tabs(self)
return menu
+class TopbarMenuModule(base.BaseUIModule):
+ def render(self, menu):
+ return self.render_string("modules/menu/topbar.html", menu=menu)
+
+
class SidebarMenuModule(base.BaseUIModule):
def render(self, menu, nested=False):
return self.render_string(
)
-class SidebarMenuLinkModule(base.BaseUIModule):
- def render(self, item):
- return self.render_string("modules/menu/sidebar-link.html", item=item)
+class MenuLinkModule(base.BaseUIModule):
+ def render(self, element):
+ return self.render_string("modules/menu/link.html", element=element)
+
+
+class MenuDropdownModule(base.BaseUIModule):
+ def render(self, menu, nested=False):
+ return self.render_string("modules/menu/dropdown.html",
+ menu=menu, nested=nested)