a
    Dg&                     @   s4  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ G d
d dedZG dd dZG dd deeZG dd dZG dd deZG dd deeZG dd deZG dd dZG dd deZedddZed d!dZed"d#dZed$d%dZ d&S )'    )warn)ImproperlyConfigured)MediaMediaDefiningClass)cached_property)hooks)LinkMenuItem)SubMenuItem)cautious_slugify)RemovedInWagtail70Warningc                   @   s&   e Zd Zd
ddZdd Zdd	 ZdS )MenuItemN   c	           	      C   sR   |rt dtd || _|| _|p"|| _|| _|p:tt|| _|pDi | _	|| _
d S )NzLThe `classnames` kwarg for MenuItem is deprecated - use `classname` instead.)category)r   r   labelurl	classname	icon_namer
   strnameattrsorder)	selfr   r   r   r   Z
classnamesr   r   r    r   Q/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/menu.py__init__   s    

zMenuItem.__init__c                 C   s   dS )z
        Whether this menu item should be shown for the given request; permission
        checks etc should go here. By default, menu items are shown all the time
        Tr   r   requestr   r   r   is_shown'   s    zMenuItem.is_shownc                 C   s    t | j| j| j| j| j| jdS N)r   r   r   )LinkMenuItemComponentr   r   r   r   r   r   r   r   r   r   render_component.   s    zMenuItem.render_component)Nr   r   r   Nr   )__name__
__module____qualname__r   r   r!   r   r   r   r   r      s         
r   )	metaclassc                       s(   e Zd Z fddZ fddZ  ZS )DismissibleMenuItemMixinc                    s6   t  j|i | d| jd< d| jd< | j| jd< d S )Nzw-dismissiblezdata-controllerzw-dismissible--dismissedz"data-w-dismissible-dismissed-classzdata-w-dismissible-id-value)superr   r   r   )r   argskwargs	__class__r   r   r   :   s    

z!DismissibleMenuItemMixin.__init__c                    sF   t |jdd }|r,|j| jr,d| jd< n| jdd  t |S )NZwagtail_userprofiletruez"data-w-dismissible-dismissed-value)	getattruserZdismissiblesgetr   r   popr'   r!   )r   r   Zprofiler*   r   r   r!   @   s
    z)DismissibleMenuItemMixin.render_component)r"   r#   r$   r   r!   __classcell__r   r   r*   r   r&   9   s   r&   c                   @   s   e Zd ZdS )DismissibleMenuItemNr"   r#   r$   r   r   r   r   r2   M   s   r2   c                   @   s>   e Zd ZdddZedd Zdd Zedd	 Zd
d Z	dS )MenuNc                 C   s4   |d urt |tstd| || _|| _|| _d S )NzrExpected a string or None as register_hook_name, got %r. Did you mean to pass an `items` keyword argument instead?)
isinstancer   r   register_hook_nameconstruct_hook_nameinitial_menu_items)r   r6   r7   itemsr   r   r   r   R   s    zMenu.__init__c                 C   s>   | j r| j  }ng }| jr:t| jD ]}||  q(|S N)r8   copyr6   r   	get_hooksappend)r   r9   fnr   r   r   registered_menu_items^   s    zMenu.registered_menu_itemsc                    s:    fdd| j D }| jr6t| jD ]}| | q&|S )Nc                    s   g | ]}|  r|qS r   )r   ).0itemr   r   r   
<listcomp>p       z/Menu.menu_items_for_request.<locals>.<listcomp>)r?   r7   r   r<   )r   r   r9   r>   r   rB   r   menu_items_for_requesto   s
    zMenu.menu_items_for_requestc                 C   s    t  }| jD ]}||j7 }q|S r:   )r   r?   media)r   rF   rA   r   r   r   rF   y   s    
z
Menu.mediac                 C   s8   |  |}g }t|dd dD ]}||| q|S )Nc                 S   s   | j S r:   r   )ir   r   r   <lambda>   rD   z'Menu.render_component.<locals>.<lambda>)key)rE   sortedr=   r!   )r   r   
menu_itemsZrendered_menu_itemsrA   r   r   r   r!      s
    
zMenu.render_component)NNN)
r"   r#   r$   r   r   r?   rE   propertyrF   r!   r   r   r   r   r4   Q   s   



r4   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )SubmenuMenuItemz+A MenuItem which wraps an inner Menu objectc                    s    || _ t j|dfi | d S )N#)menur'   r   )r   r   rP   r)   r*   r   r   r      s    zSubmenuMenuItem.__init__c                 C   s   t | j|S r:   )boolrP   rE   r   r   r   r   r      s    zSubmenuMenuItem.is_shownc                 C   s&   t | j| j| j|| j| j| jdS r   )SubMenuItemComponentr   r   rP   r!   r   r   r   r   r   r   r   r!      s    
z SubmenuMenuItem.render_component)r"   r#   r$   __doc__r   r   r!   r1   r   r   r*   r   rN      s   rN   c                   @   s   e Zd ZdS )DismissibleSubmenuMenuItemNr3   r   r   r   r   rT      s   rT   c                   @   s   e Zd ZdZdd ZdS )AdminOnlyMenuItemz,A MenuItem which is only shown to superusersc                 C   s   |j jS r:   )r.   Zis_superuserr   r   r   r   r      s    zAdminOnlyMenuItem.is_shownN)r"   r#   r$   rS   r   r   r   r   r   rU      s   rU   c                   @   sR   e Zd ZdZdZdZdZdZdZdZ	e
dd ZdddZe
d	d
 Zdd ZdS )WagtailMenuRegisterabler   i'#  NFc                 C   s   t | jj dtfi S )zMA ``wagtail.admin.menu.MenuItem`` subclass to be registered with a menu hook.r   )typer+   r"   r   r   r   r   r   menu_item_class   s
    z'WagtailMenuRegisterable.menu_item_classc                 C   s*   | j | j| j| j| j|dur |n| jdS )a"  
        Returns a ``wagtail.admin.menu.MenuItem`` instance to be registered
        with the Wagtail admin.

        The ``order`` parameter allows the method to be called from the outside
        (e.g. a ``ViewSetGroup``) to create a sub menu item with
        the correct order.
        N)r   r   r   r   r   )rY   
menu_labelmenu_url	menu_name	menu_icon
menu_orderr   r   r   r   r   get_menu_item   s    	z%WagtailMenuRegisterable.get_menu_itemc                 C   s   | j r
dS | jrdS dS )z
        The name of the hook to register the menu item within.

        This takes precedence over ``add_to_admin_menu`` and ``add_to_settings_menu``.
        register_settings_menu_itemregister_admin_menu_itemN)add_to_settings_menuadd_to_admin_menurX   r   r   r   	menu_hook   s    z!WagtailMenuRegisterable.menu_hookc                 C   s   | j rt| j | j dS )z/Registers the menu item with the Wagtail admin.N)re   r   registerr`   rX   r   r   r   register_menu_item   s    z*WagtailMenuRegisterable.register_menu_item)N)r"   r#   r$   r]   rZ   r\   r^   r[   rd   rc   r   rY   r`   re   rg   r   r   r   r   rV      s   


rV   c                   @   s6   e Zd ZdZdZdZdZdd Zdd Zdd
dZ	d	S )WagtailMenuRegisterableGroupz
    A container for grouping together multiple WagtailMenuRegisterable instances.
    Creates a menu item with a submenu for accessing the main URL for each instances.
    r   zfolder-open-inverseTc                 C   s   dd | j D | _dS )z
        When initialising, instantiate the classes (or use the instances)
        within 'items', and assign the list to a ``registerables`` attribute.
        c                 S   s   g | ]}t |r| n|qS r   )callable)r@   registerabler   r   r   rC     s   z9WagtailMenuRegisterableGroup.__init__.<locals>.<listcomp>N)r9   registerablesrX   r   r   r   r      s    z%WagtailMenuRegisterableGroup.__init__c                 C   s2   g }d}| j D ]}||j|d |d7 }q|S )N   rG   )rk   r=   r`   )r   rL   Z
item_orderrj   r   r   r   get_submenu_items  s    

z.WagtailMenuRegisterableGroup.get_submenu_itemsNc                 C   s0   t | jt|  d| j| j|d ur&|n| jdS )N)r9   )r   rP   r   r   r   )rN   rZ   r4   rm   r\   r]   r^   r_   r   r   r   r`     s    z*WagtailMenuRegisterableGroup.get_menu_item)N)
r"   r#   r$   rS   r9   r]   rd   r   rm   r`   r   r   r   r   rh      s   
rh   rb   Zconstruct_main_menu)r6   r7   ra   Zconstruct_settings_menuZregister_reports_menu_itemZconstruct_reports_menuZregister_help_menu_itemZconstruct_help_menuN)!warningsr   Zdjango.core.exceptionsr   Zdjango.formsr   r   Zdjango.utils.functionalr   Zwagtailr   Zwagtail.admin.ui.sidebarr   r    r	   rR   Zwagtail.coreutilsr
   Zwagtail.utils.deprecationr   r   r&   r2   r4   rN   rT   rU   rV   rh   Z
admin_menuZsettings_menuZreports_menuZ	help_menur   r   r   r   <module>   sB   +7F)