U
    {h                     @   s   d dl mZ d dl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jZG d	d
 d
ZG dd dejjZG dd deZdS )    )OrderedDictN)settings)conditional_escape)gettext_lazy)WagtailAdminPageFormc                       s   e Zd Z fddZ  ZS )BaseFormc                    s:   | dd |dd | _|dd | _t j|| d S )NZlabel_suffix userpage)
setdefaultpopr	   r
   super__init__)selfargskwargs	__class__ c/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/contrib/forms/forms.pyr      s    zBaseForm.__init__)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zed#d$ Zd%d& Zd'd( Zd)S )*FormBuilderc                 C   s
   || _ d S N)fields)r   r   r   r   r   r      s    zFormBuilder.__init__c                 C   s   d|d< t jjf |S )N   
max_length)djangoforms	CharFieldr   fieldoptionsr   r   r   create_singleline_field   s    z#FormBuilder.create_singleline_fieldc                 C   s   t jjf dt jji|S Nwidget)r   r    r!   ZTextarear"   r   r   r   create_multiline_field   s    z"FormBuilder.create_multiline_fieldc                 C   s   t jjf |S r   )r   r    Z	DateFieldr"   r   r   r   create_date_field!   s    zFormBuilder.create_date_fieldc                 C   s   t jjf |S r   )r   r    DateTimeFieldr"   r   r   r   create_datetime_field$   s    z!FormBuilder.create_datetime_fieldc                 C   s   t jjf |S r   )r   r    Z
EmailFieldr"   r   r   r   create_email_field'   s    zFormBuilder.create_email_fieldc                 C   s   t jjf |S r   )r   r    ZURLFieldr"   r   r   r   create_url_field*   s    zFormBuilder.create_url_fieldc                 C   s   t jjf |S r   )r   r    ZDecimalFieldr"   r   r   r   create_number_field-   s    zFormBuilder.create_number_fieldc                 C   s   |  ||d< tjjf |S Nchoices)get_formatted_field_choicesr   r    ChoiceFieldr"   r   r   r   create_dropdown_field0   s    z!FormBuilder.create_dropdown_fieldc                 C   s   |  ||d< tjjf |S r/   )r1   r   r    MultipleChoiceFieldr"   r   r   r   create_multiselect_field4   s    z$FormBuilder.create_multiselect_fieldc                 C   s(   |  ||d< tjjf dtjji|S )Nr0   r'   )r1   r   r    r2   ZRadioSelectr"   r   r   r   create_radio_field8   s    zFormBuilder.create_radio_fieldc                 C   s6   |  ||d< | ||d< tjjf dtjji|S )Nr0   initialr'   )r1   get_formatted_field_initialr   r    r4   ZCheckboxSelectMultipler"   r   r   r   create_checkboxes_field<   s    
z#FormBuilder.create_checkboxes_fieldc                 C   s   t jjf |S r   )r   r    ZBooleanFieldr"   r   r   r   create_checkbox_fieldC   s    z!FormBuilder.create_checkbox_fieldc                 C   s   t jjf dt jji|S r&   )r   r    r!   ZHiddenInputr"   r   r   r   create_hidden_fieldF   s    zFormBuilder.create_hidden_fieldc                 C   sV   t | d| d}|r|S ddl}dd || j|jD }td| dd| dS )	z
        Takes string of field type and returns a Django Form Field Instance.
        Assumes form field creation functions are in the format:
        'create_fieldtype_field'
        zcreate_%s_fieldNr   c                 S   s0   g | ](}|d   dr|d  dr|d  qS )r   Zcreate_Z_field)
startswithendswith.0fr   r   r   
<listcomp>U   s    z9FormBuilder.get_create_field_function.<locals>.<listcomp>z[Could not find function matching format                 create_<fieldname>_field for type: zMust be one of: z, )getattrinspect
getmembersr   
isfunctionAttributeErrorjoin)r   typeZcreate_field_functionrC   Zmethod_listr   r   r   get_create_field_functionI   s    z%FormBuilder.get_create_field_functionc                 C   s<   d|j kr"dd |j dD }ndd |j dD }|S )z
        Returns a list of choices [(string, string),] for the field.
        Split the provided choices into a list, separated by new lines.
        If no new lines in the provided choices, split by commas.
        
c                 s   s2   | ]*}|  d   |  d   fV  qdS ),Nstriprstripr?   xr   r   r   	<genexpr>i   s   z:FormBuilder.get_formatted_field_choices.<locals>.<genexpr>
c                 s   s   | ]}|  |  fV  qd S r   rM   rO   r   r   r   rQ   q   s     rK   )r0   split)r   r#   r0   r   r   r   r1   a   s    

z'FormBuilder.get_formatted_field_choicesc                 C   s<   d|j kr"dd |j dD }ndd |j dD }|S )z
        Returns a list of initial values [string,] for the field.
        Split the supplied default values into a list, separated by new lines.
        If no new lines in the provided default values, split by commas.
        rJ   c                 S   s   g | ]}|  d   qS )rK   rL   rO   r   r   r   rA   }   s    z;FormBuilder.get_formatted_field_initial.<locals>.<listcomp>rR   c                 S   s   g | ]}|  qS r   rS   rO   r   r   r   rA      s     rK   )default_valuerT   )r   r#   valuesr   r   r   r8   u   s    

z'FormBuilder.get_formatted_field_initialc                 C   sH   t  }| jD ]6}| |}| |j}|jp2| }|||||< q|S r   )r   r   get_field_optionsrI   Z
field_type
clean_nameget_field_clean_name)r   
formfieldsr#   r$   Zcreate_fieldrX   r   r   r   rZ      s    

zFormBuilder.formfieldsc                 C   sH   d|j i}ttddr"|j|d< nt|j|d< |j|d< |j|d< |S )NlabelZ!WAGTAILFORMS_HELP_TEXT_ALLOW_HTMLF	help_textrequiredr7   )r[   rB   r   r\   r   r]   rU   r"   r   r   r   rW      s    


zFormBuilder.get_field_optionsc                 C   s   t dtf| jS )NZWagtailForm)rH   r   rZ   )r   r   r   r   get_form_class   s    zFormBuilder.get_form_classN)r   r   r   r   r%   r(   r)   r+   r,   r-   r.   r3   r5   r6   r9   r:   r;   rI   r1   r8   propertyrZ   rW   r^   r   r   r   r   r      s*   

r   c                   @   sP   e Zd ZejjdejjdediddZejjdejjdediddZ	dS )SelectDateFormFplaceholderz	Date from)attrs)r]   r'   zDate toN)
r   r   r   r   r    r*   Z	DateInput_Z	date_fromZdate_tor   r   r   r   r`      s   r`   c                       s   e Zd Z fddZ  ZS )WagtailAdminFormPageFormc                    s   t    d| jkr| jd j}|D ]}|  q$dd |D  t fdd D d rtfdd| jd jD }|dtjt	dd	|j
ji  d S )
NZform_fieldsc                 S   s   g | ]}|j jp|j  qS r   )instancerX   rY   r>   r   r   r   rA      s   z2WagtailAdminFormPageForm.clean.<locals>.<listcomp>c                 3   s    | ]}  |d kr|V  qdS )   N)count)r?   n)clean_namesr   r   rQ      s      z1WagtailAdminFormPageForm.clean.<locals>.<genexpr>c                 3   s    | ]}|j   kr|V  qd S r   )re   rY   r>   )duplicate_clean_namer   r   rQ      s   r[   zPThere is another field with the label %(label_name)s, please change one of them.Z
label_name)r   cleanZformsetsr    Zis_validnextZ	add_errorr   ZValidationErrorrc   re   r[   )r   r    formZduplicate_form_fieldr   )ri   rj   r   rk      s4    


 

zWagtailAdminFormPageForm.clean)r   r   r   rk   r   r   r   r   r   rd      s   rd   )collectionsr   Zdjango.formsr   Zdjango.confr   Zdjango.utils.htmlr   Zdjango.utils.translationr   rc   Zwagtail.admin.formsr   r    ZFormr   r   r`   rd   r   r   r   r   <module>   s   
 