U
    {hm(                     @   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
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   Z/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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   |j t| jS N)path
startswithr   r   r   r   r   r   	is_active.   s    zMenuItem.is_activec                 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_component1   s    zMenuItem.render_component)Nr   r   r   Nr   )__name__
__module____qualname__r   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                    s2   t  j|| 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%   C   s
    z)DismissibleMenuItemMixin.render_component)r&   r'   r(   r   r%   __classcell__r   r   r.   r   r*   <   s   r*   c                   @   s   e Zd ZdS )DismissibleMenuItemNr&   r'   r(   r   r   r   r   r6   P   s   r6   c                   @   sF   e Zd ZdddZedd Zdd Zdd	 Zed
d Z	dd Z
dS )MenuNc                 C   s4   |d k	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   U   s    zMenu.__init__c                 C   s>   | j r| j  }ng }| jr:t| jD ]}||  q(|S r   )r<   copyr:   r   	get_hooksappend)r   r=   fnr   r   r   registered_menu_itemsa   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>s   s     
 z/Menu.menu_items_for_request.<locals>.<listcomp>)rB   r;   r   r?   )r   r   r=   rA   r   rF   r   menu_items_for_requestr   s
    zMenu.menu_items_for_requestc                    s    fdd|   D S )Nc                    s   g | ]}|  r|qS r   )r"   rC   rF   r   r   rG   }   s   
z*Menu.active_menu_items.<locals>.<listcomp>)rH   r   r   rF   r   active_menu_items|   s    
zMenu.active_menu_itemsc                 C   s    t  }| jD ]}||j7 }q|S r   )r   rB   media)r   rJ   rE   r   r   r   rJ      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>       z'Menu.render_component.<locals>.<lambda>)key)rH   sortedr@   r%   )r   r   
menu_itemsZrendered_menu_itemsrE   r   r   r   r%      s
    
zMenu.render_component)NNN)r&   r'   r(   r   r   rB   rH   rI   propertyrJ   r%   r   r   r   r   r8   T   s   



r8   c                       s8   e Zd ZdZ fddZ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| d S )N#)menur+   r   )r   r   rU   r-   r.   r   r   r      s    zSubmenuMenuItem.__init__c                 C   s   t | j|S r   )boolrU   rH   r   r   r   r   r      s    zSubmenuMenuItem.is_shownc                 C   s   t | j|S r   )rV   rU   rI   r   r   r   r   r"      s    zSubmenuMenuItem.is_activec                 C   s&   t | j| j| j|| j| j| jdS r#   )SubMenuItemComponentr   r   rU   r%   r   r   r   r   r   r   r   r%      s    
z SubmenuMenuItem.render_component)	r&   r'   r(   __doc__r   r   r"   r%   r5   r   r   r.   r   rS      s
   rS   c                   @   s   e Zd ZdS )DismissibleSubmenuMenuItemNr7   r   r   r   r   rY      s   rY   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   )r2   Zis_superuserr   r   r   r   r      s    zAdminOnlyMenuItem.is_shownN)r&   r'   r(   rX   r   r   r   r   r   rZ      s   rZ   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k	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   )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 )z/Registers the menu item with the Wagtail admin.N)rj   r   registerre   r]   r   r   r   register_menu_item   s    z*WagtailMenuRegisterable.register_menu_item)N)r&   r'   r(   rb   r_   ra   rc   r`   ri   rh   r   r^   re   rj   rl   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)rD   registerabler   r   r   rG     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   rK   )rp   r@   re   )r   rQ   Z
item_orderro   r   r   r   get_submenu_items  s    

z.WagtailMenuRegisterableGroup.get_submenu_itemsNc                 C   s0   t | jt|  d| j| j|d k	r&|n| jdS )N)r=   )r   rU   r   r   r   )rS   r_   r8   rr   ra   rb   rc   rd   r   r   r   re     s    z*WagtailMenuRegisterableGroup.get_menu_item)N)
r&   r'   r(   rX   r=   rb   ri   r   rr   re   r   r   r   r   rm      s   
rm   rg   Zconstruct_main_menu)r:   r;   rf   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	   rW   Zwagtail.coreutilsr
   Zwagtail.utils.deprecationr   r   r*   r6   r8   rS   rY   rZ   r[   rm   Z
admin_menuZsettings_menuZreports_menuZ	help_menur   r   r   r   <module>   sB   .>F)