Picture-Puzzle-website/venv/Lib/site-packages/flask_admin/menu.py

150 lines
3.5 KiB
Python

from flask import url_for
class BaseMenu(object):
"""
Base menu item
"""
def __init__(self, name, class_name=None, icon_type=None, icon_value=None, target=None):
self.name = name
self.class_name = class_name if class_name is not None else ''
self.icon_type = icon_type
self.icon_value = icon_value
self.target = target
self.parent = None
self._children = []
def add_child(self, menu):
# TODO: Check if menu item is already assigned to some parent
menu.parent = self
self._children.append(menu)
def get_url(self):
raise NotImplementedError()
def is_category(self):
return False
def is_active(self, view):
for c in self._children:
if c.is_active(view):
return True
return False
def get_class_name(self):
return self.class_name
def get_icon_type(self):
return self.icon_type
def get_icon_value(self):
return self.icon_value
def is_visible(self):
return True
def is_accessible(self):
return True
def get_children(self):
return [c for c in self._children if c.is_accessible() and c.is_visible()]
class MenuCategory(BaseMenu):
"""
Menu category item.
"""
def get_url(self):
return None
def is_category(self):
return True
def is_visible(self):
for c in self._children:
if c.is_visible():
return True
return False
def is_accessible(self):
for c in self._children:
if c.is_accessible():
return True
return False
class MenuView(BaseMenu):
"""
Admin view menu item
"""
def __init__(self, name, view=None, cache=True):
super(MenuView, self).__init__(name,
class_name=view.menu_class_name,
icon_type=view.menu_icon_type,
icon_value=view.menu_icon_value)
self._view = view
self._cache = cache
self._cached_url = None
view.menu = self
def get_url(self):
if self._view is None:
return None
if self._cached_url:
return self._cached_url
url = self._view.get_url('%s.%s' % (self._view.endpoint, self._view._default_view))
if self._cache:
self._cached_url = url
return url
def is_active(self, view):
if view == self._view:
return True
return super(MenuView, self).is_active(view)
def is_visible(self):
if self._view is None:
return False
return self._view.is_visible()
def is_accessible(self):
if self._view is None:
return False
return self._view.is_accessible()
class MenuLink(BaseMenu):
"""
Link item
"""
def __init__(self, name, url=None, endpoint=None, category=None, class_name=None,
icon_type=None, icon_value=None, target=None):
super(MenuLink, self).__init__(name, class_name, icon_type, icon_value, target)
self.category = category
self.url = url
self.endpoint = endpoint
def get_url(self):
return self.url or url_for(self.endpoint)
class SubMenuCategory(MenuCategory):
def __init__(self, *args, **kwargs):
super(SubMenuCategory, self).__init__(*args, **kwargs)
self.class_name += ' dropdown-submenu dropright'