diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 9c8baeb790..905b4bc652 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -293,10 +293,20 @@ class Menu(object): class Link(object): + _registry = {} + + @classmethod + def get(cls, name): + return cls._registry[name] + + @classmethod + def remove(cls, name): + del cls._registry[name] + def __init__(self, text, view=None, args=None, condition=None, conditional_disable=None, description=None, html_data=None, html_extra_classes=None, icon=None, icon_class=None, - keep_query=False, kwargs=None, permissions=None, + keep_query=False, kwargs=None, name=None, permissions=None, permissions_related=None, remove_from_query=None, tags=None, url=None): @@ -310,6 +320,7 @@ class Link(object): self.icon_class = icon_class self.keep_query = keep_query self.kwargs = kwargs or {} + self.name = name self.permissions = permissions or [] self.permissions_related = permissions_related self.remove_from_query = remove_from_query or [] @@ -318,6 +329,9 @@ class Link(object): self.view = view self.url = url + if name: + self.__class__._registry[name] = self + def resolve(self, context, resolved_object=None): AccessControlList = apps.get_model( app_label='acls', model_name='AccessControlList' diff --git a/mayan/apps/navigation/templatetags/navigation_tags.py b/mayan/apps/navigation/templatetags/navigation_tags.py index 85d4503635..589798c54c 100644 --- a/mayan/apps/navigation/templatetags/navigation_tags.py +++ b/mayan/apps/navigation/templatetags/navigation_tags.py @@ -2,12 +2,22 @@ from __future__ import unicode_literals from django.template import Library -from ..classes import Menu, SourceColumn +from ..classes import Link, Menu, SourceColumn from ..forms import MultiItemForm register = Library() +@register.simple_tag() +def get_link(name): + return Link.get(name) + + +@register.simple_tag() +def get_menu(name): + return Menu.get(name) + + @register.simple_tag(takes_context=True) def get_menu_links(context, name, source=None, sort_results=None): return Menu.get(name).resolve(context=context, source=source, sort_results=sort_results) @@ -60,6 +70,12 @@ def get_source_columns(source): return SourceColumn.get_for_source(source) +@register.simple_tag(takes_context=True) +def resolve_link(context, link): + # This can be used to resolve links or menus too + return link.resolve(context=context) + + @register.simple_tag(takes_context=True) def source_column_resolve(context, column): context['column_result'] = column.resolve(context=context)