a
    Dg                     @   s  d dl 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jZG d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )    N)forms)
validators)	TextInput)gettext_lazy)Locale)get_search_backendc                       s(   e Zd Zedd Z fddZ  ZS )URLOrAbsolutePathValidatorc                 C   s
   |  dS )N/)
startswith)value r   [/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/forms/choosers.pyis_absolute_path   s    z+URLOrAbsolutePathValidator.is_absolute_pathc                    s   t |rd S t |S d S N)r   r   super__call__selfr   	__class__r   r   r      s    
z#URLOrAbsolutePathValidator.__call__)__name__
__module____qualname__staticmethodr   r   __classcell__r   r   r   r   r      s   
r   c                       s(   e Zd ZeZe gZ fddZ  ZS )URLOrAbsolutePathFieldc                    s   t |st |}|S r   )r   r   r   	to_pythonr   r   r   r   r      s    
z URLOrAbsolutePathField.to_python)	r   r   r   r   widgetr   Zdefault_validatorsr   r   r   r   r   r   r      s   r   c                   @   s(   e Zd ZededdZejddZdS )ExternalLinkChooserFormTURLrequiredlabelFr!   N)	r   r   r   r   _urlr   	CharField	link_textr   r   r   r   r   "   s   r   c                   @   s&   e Zd ZejdddZejddZdS )AnchorLinkChooserFormT#r    Fr#   N)r   r   r   r   r&   r%   r'   r   r   r   r   r(   '   s   r(   c                   @   sJ   e Zd ZejddZejddZejddZejdej	ddiddZ
dS )	EmailLinkChooserFormTr#   Frows   attrs)r!   r   N)r   r   r   r   Z
EmailFieldZemail_addressr&   r'   subjectZTextareabodyr   r   r   r   r*   ,   s   r*   c                   @   s$   e Zd ZejddZejddZdS )PhoneLinkChooserFormTr#   FN)r   r   r   r   r&   Zphone_numberr'   r   r   r   r   r1   3   s   r1   c                       s$   e Zd Z fddZdd Z  ZS )BaseFilterFormc                    s(   t  j|i | d| _d| _d | _d S )NF)r   __init__is_searchingis_filtering_by_collectionsearch_query)r   argskwargsr   r   r   r3   9   s    zBaseFilterForm.__init__c                 C   s   |S r   r   )r   objectsr   r   r   filter?   s    zBaseFilterForm.filter)r   r   r   r3   r:   r   r   r   r   r   r2   8   s   r2   c                       sD   e Zd ZdZejedejdedidddZ fdd	Z	  Z
S )
SearchFilterMixinzL
    Mixin for a chooser listing filter form, to provide a search field
    zSearch termplaceholderZSearchr-   F)r"   r   r!   c                    sl   t  |}| jd}|rht }|j r:|||}n"tj	|j dt
d |||}d| _|| _|S )Nqz is defined as Indexable but does not specify any AutocompleteFields. Searches within the chooser will only respond to complete words.)categoryT)r   r:   cleaned_datagetr   modelZget_autocomplete_search_fieldsautocompletewarningswarnRuntimeWarningsearchr4   r6   )r   r9   r6   Zsearch_backendr   r   r   r:   N   s    

zSearchFilterMixin.filter)r   r   r   __doc__r   r&   r$   r   r=   r:   r   r   r   r   r   r;   C   s   r;   c                       s2   e Zd ZdZdd fdd
Z fddZ  ZS )CollectionFilterMixinz
    Mixin for a chooser listing filter form, to provide a collection filter field.
    The view must pass a `collections` keyword argument when constructing the form
    N)collectionsc                   sX   t  j|i | |rTdtdfg|  }tjtd|dtjddidd| jd	< d S )
N zAll collections
CollectionF data-chooser-modal-search-filterTr-   )r"   choicesr!   r   collection_id)r   r3   r$   Zget_indented_choicesr   ChoiceFieldSelectfields)r   rI   r7   r8   Zcollection_choicesr   r   r   r3   j   s    
zCollectionFilterMixin.__init__c                    s.   | j d}|r"d| _|j|d}t |S )NrN   T)Z
collection)r?   r@   r5   r:   r   )r   r9   rN   r   r   r   r:   x   s
    zCollectionFilterMixin.filterr   r   r   rG   r3   r:   r   r   r   r   r   rH   d   s   rH   c                       s,   e Zd ZdZ fddZ fddZ  ZS )LocaleFilterMixinzT
    Mixin for a chooser listing filter form, to provide a locale filter field.
    c                    sP   t  j|i | tj }|rLtjdd |D dtjddidd| jd< d S )	Nc                 S   s   g | ]}|j | fqS r   )language_codeZget_display_name).0localer   r   r   
<listcomp>   s   z.LocaleFilterMixin.__init__.<locals>.<listcomp>FrL   Tr-   )rM   r!   r   rV   )	r   r3   r   r9   allr   rO   rP   rQ   )r   r7   r8   Zlocalesr   r   r   r3      s    
zLocaleFilterMixin.__init__c                    s6   | j d}|r*tjj|d}|j|d}t |S )NrV   )rT   )rV   )r?   r@   r   r9   r:   r   )r   r9   Zselected_locale_codeZselected_localer   r   r   r:      s
    zLocaleFilterMixin.filterrR   r   r   r   r   rS      s   rS   )rC   Zdjangor   Zdjango.corer   Zdjango.forms.widgetsr   Zdjango.utils.translationr   r$   Zwagtail.modelsr   Zwagtail.search.backendsr   ZURLValidatorr   ZURLFieldr   ZFormr   r(   r*   r1   r2   r;   rH   rS   r   r   r   r   <module>   s    
!