:py:mod:`oioioi.base.menu` ========================== .. py:module:: oioioi.base.menu Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: oioioi.base.menu.OrderedRegistry oioioi.base.menu.MenuItem oioioi.base.menu.MenuRegistry Attributes ~~~~~~~~~~ .. autoapisummary:: oioioi.base.menu.menu_registry oioioi.base.menu.account_menu_registry oioioi.base.menu.side_pane_menus_registry oioioi.base.menu.personal_menu_registry oioioi.base.menu.navbar_links_registry .. py:class:: OrderedRegistry Bases: :py:obj:`object` Maintains a collection of values ordered by a separate key. .. py:method:: register(value, order=sys.maxsize) .. py:method:: unregister(value) .. py:method:: __iter__() .. py:method:: __len__() .. py:method:: register_decorator(order=sys.maxsize) .. py:class:: MenuItem(name, text, url_generator, condition=None, attrs=None, order=sys.maxsize) Bases: :py:obj:`object` Used to store single menu entry. :param name: a short identifier, for example used to find a matching icon etc. :param text: text to display :param url_generator: generates menu link URL :type url_generator: fun: request → str :param order: value determining the order of items in menu :type order: int :param condition: decides if the item should be shown :type condition: :class:`oioioi.base.permissions.Condition` .. py:class:: MenuRegistry(text=None, condition=None, show_icons=False) Bases: :py:obj:`object` Maintains a collection of menu items. :param text: menu name to display (if appropriate) :param condition: decides if menu should be considered as available :type condition: :class:`oioioi.base.permissions.Condition` .. py:method:: _get_all_registered_items(request) .. py:method:: register(name, text, url_generator, condition=None, attrs=None, order=sys.maxsize) Registers a new menu item. Menu items should be registered in ``views.py`` of Django apps. .. py:method:: register_decorator(text, url_generator, condition=None, attrs=None, order=sys.maxsize) Decorator for a view which registers a new menu item. It accepts the same arguments as the :meth:`MenuRegistry.register`, except for ``name``, which is inferred from the view function name ('_view' suffix is stripped). ``condition`` is combined with the condition taken from the view attribute of the same name (assigned for example by :func:`oioioi.base.permissions.enforce_condition`). ``condition`` parameter influences only on visibility of menu entry but not on permission to see the page. .. py:method:: register_generator(name, items_generator) Registers a new menu items generator. :param name: a short identifier :param items_generator: generates list of menu items :type items_generator: fun: request → [MenuItem] .. py:method:: unregister(name) Unregisters a menu item. Does nothing if not found. .. py:method:: unregister_generator(name) Unregisters a menu items generator. Does nothing if not found. .. py:method:: template_context(request) Returns a list of items to pass to a template for rendering. .. py:method:: is_anything_accessible(request) Returns whether any registered MenuItem is accessible in the given request .. py:data:: menu_registry .. py:data:: account_menu_registry .. py:data:: side_pane_menus_registry .. py:data:: personal_menu_registry .. py:data:: navbar_links_registry