]> git.ipfire.org Git - people/ms/westferry.git/commitdiff
menus: Refactor code and simplify class names
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 5 Dec 2021 16:21:32 +0000 (16:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 5 Dec 2021 16:21:32 +0000 (16:21 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/templates/modules/menus/dropdown.html
src/templates/modules/menus/sidebar.html
src/templates/modules/menus/topbar.html
src/westferry/ui/menus.py

index 579c3cb2b3013a6b3d324198b4410d3139f03af8..970a1d15d2a092cf4a947b4e06288644cd4070ce 100644 (file)
@@ -7,7 +7,7 @@
                <li>
                        {% if isinstance(element, westferry.ui.menus.Menu) %}
                                {% module MenuDropdown(element, nested=True) %}
-                       {% elif isinstance(element, westferry.ui.menus.MenuLink) %}
+                       {% elif isinstance(element, westferry.ui.menus.Link) %}
                                {% module MenuLink(element) %}
                        {% end %}
                </li>
index 97dedf5aa57847cd2ae86d5a1fd14b755ed59c48..ab56fb20d19b3995bb1ff2d916ad9442c55ab50a 100644 (file)
@@ -1,10 +1,12 @@
+{% import westferry.ui.menus %}
+
 <ul class="vertical menu">
-       {% for i in menu %}
-               <li {% if i.is_active() %}class="is-active"{% end %}>
-                       {% if i.type == "link" %}
-                               {% module MenuLink(i) %}
-                       {% elif i.type == "menu" %}
-                               {% module SidebarMenu(i, nested=True) %}
+       {% for element in menu %}
+               <li {% if element.is_active() %}class="is-active"{% end %}>
+                       {% if isinstance(element, westferry.ui.menus.Menu) %}
+                               {% module SidebarMenu(element, nested=True) %}
+                       {% elif isinstance(element, westferry.ui.menus.Link) %}
+                               {% module MenuLink(element) %}
                        {% end %}
                </li>
        {% end %}
index b5dbad29f64e047833b9f6d9a178b2b9915cf6c1..75770df4f7fd4e9f2ef266f04e2a757d6af608c8 100644 (file)
@@ -7,7 +7,7 @@
                <li>
                        {% if isinstance(element, westferry.ui.menus.Menu) %}
                                {% module MenuDropdown(element) %}
-                       {% elif isinstance(element, westferry.ui.menus.MenuLink) %}
+                       {% elif isinstance(element, westferry.ui.menus.Link) %}
                                {% module MenuLink(element) %}
                        {% end %}
                </li>
index ecb94eefbf7955ae1c4ae8a89111046fb2ff0e74..a0ad926bd11f7715e42545db9dec51035afe1143 100644 (file)
 
 from . import base
 
-class MenuItem(object):
-       type = None
-
-       def __init__(self, menu=None):
+class Element(object):
+       def __init__(self, menu, **kwargs):
                self.menu = menu
 
-       def is_active(self):
-               return False
+               # Call initializer for inheriting classes
+               self.initialize(**kwargs)
 
+       def initialize(self):
+               pass
 
-class MenuHeader(MenuItem):
-       type = "header"
+       def is_active(self):
+               return False
 
-       def __init__(self, title, menu=None):
-               MenuItem.__init__(self, menu=menu)
 
+class Header(Element):
+       def initialize(self, title):
                self.title = title
 
 
-class MenuLink(MenuItem):
-       type = "link"
-
-       def __init__(self, title, handler=None, url=None, menu=None):
-               MenuItem.__init__(self, menu=menu)
-
+class Link(Element):
+       def initialize(self, title, handler=None, url=None):
                self.title = title
                self.handler = handler
-
-               self.url = url or handler.url
+               self.url = url
 
        def is_active(self):
                if not self.handler:
@@ -69,6 +64,8 @@ class Menu(object):
                self.title = title
                self.parent = parent
 
+               self.elements = []
+
        @property
        def locale(self):
                """
@@ -76,22 +73,27 @@ class Menu(object):
                """
                return self.handler.locale
 
-       @property
-       def items(self):
-               if not hasattr(self, "_items"):
-                       self._items = []
-
-               return self._items
-
        def __iter__(self):
                """
                        Iterator over all item in this menu
                """
-               return iter(self.items)
+               return iter(self.elements)
 
        def is_active(self):
                return False
 
+       def _add_element(self, cls, *args, **kwargs):
+               element = cls(self, *args, **kwargs)
+               self.elements.append(element)
+
+               return element
+
+       def add_link(self, *args, **kwargs):
+               """
+                       Adds a link to the menu
+               """
+               return self._add_element(Link, *args, **kwargs)
+
        def add_handler(self, handler, title=None, **kwargs):
                """
                        Automatically adds a handler to the menu
@@ -105,28 +107,13 @@ class Menu(object):
                """
                        Adds a headline in the menu
                """
-               header = MenuHeader(*args, **kwargs)
-               self.items.append(header)
-
-               return header
-
-       def add_link(self, *args, **kwargs):
-               """
-                       Adds a link to the menu
-               """
-               link = MenuLink(*args, menu=self, **kwargs)
-               self.items.append(link)
-
-               return link
+               return self._add_element(Header, *args, **kwargs)
 
        def add_menu(self, title, **kwargs):
                """
                        Adds a sub-menu to the menu
                """
-               menu = Menu(self.handler, parent=self, title=title, **kwargs)
-               self.items.append(menu)
-
-               return menu
+               return self._add_element(Menu, title=title, parent=self, **kwargs)
 
 
 class TopbarMenuModule(base.BaseUIModule):