1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

9071 add header to plugin menu

This commit is contained in:
Arthur
2022-09-22 10:01:19 -07:00
parent 148c6a6c23
commit e074570b8f
2 changed files with 33 additions and 15 deletions

View File

@ -58,6 +58,7 @@ class PluginConfig(AppConfig):
# integrated components. # integrated components.
graphql_schema = 'graphql.schema' graphql_schema = 'graphql.schema'
menu_items = 'navigation.menu_items' menu_items = 'navigation.menu_items'
menu_header = 'navigation.menu_heading'
template_extensions = 'template_content.template_extensions' template_extensions = 'template_content.template_extensions'
user_preferences = 'preferences.preferences' user_preferences = 'preferences.preferences'
@ -70,9 +71,14 @@ class PluginConfig(AppConfig):
register_template_extensions(template_extensions) register_template_extensions(template_extensions)
# Register navigation menu items (if defined) # Register navigation menu items (if defined)
try:
menu_header = import_object(f"{self.__module__}.{self.menu_header}")
except AttributeError:
menu_header = None
menu_items = import_object(f"{self.__module__}.{self.menu_items}") menu_items = import_object(f"{self.__module__}.{self.menu_items}")
if menu_items is not None: if menu_items is not None:
register_menu_items(self.verbose_name, menu_items) register_menu_items(self.verbose_name, menu_header, menu_items)
# Register GraphQL schema (if defined) # Register GraphQL schema (if defined)
graphql_schema = import_object(f"{self.__module__}.{self.graphql_schema}") graphql_schema = import_object(f"{self.__module__}.{self.graphql_schema}")
@ -246,7 +252,7 @@ class PluginMenuButton:
self.color = color self.color = color
def register_menu_items(section_name, class_list): def register_menu_items(section_name, menu_header, class_list):
""" """
Register a list of PluginMenuItem instances for a given menu section (e.g. plugin name) Register a list of PluginMenuItem instances for a given menu section (e.g. plugin name)
""" """
@ -258,7 +264,9 @@ def register_menu_items(section_name, class_list):
if not isinstance(button, PluginMenuButton): if not isinstance(button, PluginMenuButton):
raise TypeError(f"{button} must be an instance of extras.plugins.PluginMenuButton") raise TypeError(f"{button} must be an instance of extras.plugins.PluginMenuButton")
registry['plugins']['menu_items'][section_name] = class_list registry['plugins']['menu_items'][section_name] = {}
registry['plugins']['menu_items'][section_name]['header'] = menu_header
registry['plugins']['menu_items'][section_name]['items'] = class_list
# #

View File

@ -408,18 +408,28 @@ MENUS = [
if registry['plugins']['menu_items']: if registry['plugins']['menu_items']:
plugin_menu_groups = [] plugin_menu_groups = []
for plugin_name, items in registry['plugins']['menu_items'].items(): for plugin_name, data in registry['plugins']['menu_items'].items():
plugin_menu_groups.append( if data['header']:
MenuGroup( menu_groups = [MenuGroup(label=plugin_name, items=data["items"])]
label=plugin_name, icon = data["header"]["icon"]
items=items MENUS.append(Menu(
label=data["header"]["title"],
icon_class=f"mdi {icon}",
groups=menu_groups
))
else:
plugin_menu_groups.append(
MenuGroup(
label=plugin_name,
items=data["items"]
)
) )
if plugin_menu_groups:
PLUGIN_MENU = Menu(
label="Plugins",
icon_class="mdi mdi-puzzle",
groups=plugin_menu_groups
) )
PLUGIN_MENU = Menu( MENUS.append(PLUGIN_MENU)
label="Plugins",
icon_class="mdi mdi-puzzle",
groups=plugin_menu_groups
)
MENUS.append(PLUGIN_MENU)