o
    h&                     @   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                   @   s2   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|| _|p"i | _	|| _
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   
classnamesr   r   r    r   R/var/www/html/ndineBlogger/venv/lib/python3.10/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 )Nwagtail_userprofiletruez"data-w-dismissible-dismissed-value)	getattruserdismissiblesgetr   r   popr(   r"   )r   r   profiler+   r   r   r"   @   s
   z)DismissibleMenuItemMixin.render_component)r#   r$   r%   r   r"   __classcell__r   r   r+   r   r'   9   s    r'   c                   @      e Zd ZdS )DismissibleMenuItemNr#   r$   r%   r   r   r   r   r7   M       r7   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   r<   r=   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)r>   copyr<   r   	get_hooksappend)r   r?   fnr   r   r   registered_menu_items^   s   zMenu.registered_menu_itemsc                    s:    fdd| j D }| jrt| jD ]}| | q|S )Nc                    s   g | ]	}|  r|qS r   )r   ).0itemr   r   r   
<listcomp>p   s    z/Menu.menu_items_for_request.<locals>.<listcomp>)rE   r=   r   rB   )r   r   r?   rD   r   rH   r   menu_items_for_requesto   s
   zMenu.menu_items_for_requestc                 C   s    t  }| jD ]}||j7 }q|S r@   )r   rE   media)r   rK   rG   r   r   r   rK   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>   s    z'Menu.render_component.<locals>.<lambda>)key)rJ   sortedrC   r"   )r   r   
menu_itemsrendered_menu_itemsrG   r   r   r   r"      s
   
zMenu.render_component)NNN)
r#   r$   r%   r   r   rE   rJ   propertyrK   r"   r   r   r   r   r:   Q   s    



r:   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   rV   r*   r+   r   r   r      s   zSubmenuMenuItem.__init__c                 C   s   t | j|S r@   )boolrV   rJ   r   r   r   r   r      s   zSubmenuMenuItem.is_shownc                 C   s&   t | j| j| j|| j| j| jdS r    )SubMenuItemComponentr   r   rV   r"   r   r   r   r   r   r   r   r"      s   
z SubmenuMenuItem.render_component)r#   r$   r%   __doc__r   r   r"   r5   r   r   r+   r   rT      s
    rT   c                   @   r6   )DismissibleSubmenuMenuItemNr8   r   r   r   r   rZ      r9   rZ   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@   )r0   is_superuserr   r   r   r   r      s   zAdminOnlyMenuItem.is_shownN)r#   r$   r%   rY   r   r   r   r   r   r[      s    r[   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|dS | 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   )r`   
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_menur_   r   r   r   	menu_hook   s
   z!WagtailMenuRegisterable.menu_hookc                 C   s   | j rt| j | j dS dS )z/Registers the menu item with the Wagtail admin.N)rl   r   registerrg   r_   r   r   r   register_menu_item   s   z*WagtailMenuRegisterable.register_menu_itemr@   )r#   r$   r%   rd   ra   rc   re   rb   rk   rj   r   r`   rg   rl   rn   r   r   r   r   r]      s    


r]   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)rF   registerabler   r   r   rI     s    z9WagtailMenuRegisterableGroup.__init__.<locals>.<listcomp>N)r?   registerablesr_   r   r   r   r      s   z%WagtailMenuRegisterableGroup.__init__c                 C   s2   g }d}| j D ]}||j|d |d7 }q|S )N   rL   )rr   rC   rg   )r   rQ   
item_orderrq   r   r   r   get_submenu_items  s   

z.WagtailMenuRegisterableGroup.get_submenu_itemsNc                 C   s4   t | jt|  d| j| j|d ur|dS | jdS )N)r?   )r   rV   r   r   r   )rT   ra   r:   ru   rc   rd   re   rf   r   r   r   rg     s   
z*WagtailMenuRegisterableGroup.get_menu_itemr@   )
r#   r$   r%   rY   r?   rd   rk   r   ru   rg   r   r   r   r   ro      s    
ro   ri   construct_main_menu)r<   r=   rh   construct_settings_menuregister_reports_menu_itemconstruct_reports_menuregister_help_menu_itemconstruct_help_menuN)!warningsr   django.core.exceptionsr   django.formsr   r   django.utils.functionalr   wagtailr   wagtail.admin.ui.sidebarr   r!   r	   rX   wagtail.coreutilsr
   wagtail.utils.deprecationr   r   r'   r7   r:   rT   rZ   r[   r]   ro   
admin_menusettings_menureports_menu	help_menur   r   r   r   <module>   sD    +7F)
