o
    h6                      @   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                          e Zd Z fddZ  ZS )BaseFormc                    s>   | dd |dd | _|dd | _t j|i | d S )Nlabel_suffix userpage)
setdefaultpopr   r   super__init__)selfargskwargs	__class__ [/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/forms/forms.pyr      s   zBaseForm.__init__)__name__
__module____qualname__r   __classcell__r   r   r   r   r          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di |S )N   
max_lengthr   )djangoforms	CharFieldr   fieldoptionsr   r   r   create_singleline_field   s   z#FormBuilder.create_singleline_fieldc                 C      t jjddt jji|S Nwidgetr   )r"   r#   r$   Textarear%   r   r   r   create_multiline_field      z"FormBuilder.create_multiline_fieldc                 C      t jjdi |S Nr   )r"   r#   	DateFieldr%   r   r   r   create_date_field!      zFormBuilder.create_date_fieldc                 C   r/   r0   )r"   r#   DateTimeFieldr%   r   r   r   create_datetime_field$   r3   z!FormBuilder.create_datetime_fieldc                 C   r/   r0   )r"   r#   
EmailFieldr%   r   r   r   create_email_field'   r3   zFormBuilder.create_email_fieldc                 C   r/   r0   )r"   r#   URLFieldr%   r   r   r   create_url_field*   r3   zFormBuilder.create_url_fieldc                 C   r/   r0   )r"   r#   DecimalFieldr%   r   r   r   create_number_field-   r3   zFormBuilder.create_number_fieldc                 C       |  ||d< tjjdi |S Nchoicesr   )get_formatted_field_choicesr"   r#   ChoiceFieldr%   r   r   r   create_dropdown_field0      z!FormBuilder.create_dropdown_fieldc                 C   r<   r=   )r?   r"   r#   MultipleChoiceFieldr%   r   r   r   create_multiselect_field4   rB   z$FormBuilder.create_multiselect_fieldc                 C   s(   |  ||d< tjjddtjji|S )Nr>   r+   r   )r?   r"   r#   r@   RadioSelectr%   r   r   r   create_radio_field8   s   zFormBuilder.create_radio_fieldc                 C   s6   |  ||d< | ||d< tjjddtjji|S )Nr>   initialr+   r   )r?   get_formatted_field_initialr"   r#   rC   CheckboxSelectMultipler%   r   r   r   create_checkboxes_field<   s   
z#FormBuilder.create_checkboxes_fieldc                 C   r/   r0   )r"   r#   BooleanFieldr%   r   r   r   create_checkbox_fieldC   r3   z!FormBuilder.create_checkbox_fieldc                 C   r)   r*   )r"   r#   r$   HiddenInputr%   r   r   r   create_hidden_fieldF   r.   zFormBuilder.create_hidden_fieldc                 C   sR   t | d| d}|r|S ddl}dd || j|jD }td| dd| )	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   create__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   typecreate_field_functionrX   method_listr   r   r   get_create_field_functionI   s   z%FormBuilder.get_create_field_functionc                 C   >   d|j v rdd |j dD }|S 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   s4    | ]}|  d   |  d   fV  qdS ),NstriprstriprT   xr   r   r   	<genexpr>i   s    
z:FormBuilder.get_formatted_field_choices.<locals>.<genexpr>
c                 s   s     | ]}|  |  fV  qd S r   re   rg   r   r   r   ri   q   s    rc   )r>   split)r   r&   r>   r   r   r   r?   a   s   


z'FormBuilder.get_formatted_field_choicesc                 C   ra   )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.
        rb   c                 S   s   g | ]}|  d   qS )rc   rd   rg   r   r   r   rV   }   s    z;FormBuilder.get_formatted_field_initial.<locals>.<listcomp>rj   c                 S   s   g | ]}|  qS r   rk   rg   r   r   r   rV      s    rc   )default_valuerl   )r   r&   valuesr   r   r   rH   u   s   

z'FormBuilder.get_formatted_field_initialc                 C   sH   t  }| jD ]}| |}| |j}|jp| }|||||< q|S r   )r   r   get_field_optionsr`   
field_type
clean_nameget_field_clean_name)r   
formfieldsr&   r'   create_fieldrq   r   r   r   rs      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label!WAGTAILFORMS_HELP_TEXT_ALLOW_HTMLF	help_textrequiredrG   )ru   rW   r   rw   r   rx   rm   r%   r   r   r   ro      s   


zFormBuilder.get_field_optionsc                 C   s   t dtf| jS )NWagtailForm)r]   r   rs   )r   r   r   r   get_form_class   s   zFormBuilder.get_form_classN)r   r   r   r   r(   r-   r2   r5   r7   r9   r;   rA   rD   rF   rJ   rL   rN   r`   r?   rH   propertyrs   ro   rz   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)rx   r+   zDate toN)
r   r   r   r"   r#   r4   	DateInput_	date_fromdate_tor   r   r   r   r|      s    
r|   c                       r   )WagtailAdminFormPageFormc              	      s   ddl m  t  } fdd| jjjD }|D ]M}|| jvr!q| j| j}|D ]}|	  q)dd |D t
fddD drft
fd	d| j| jD }|d
tjtdd|jji  q|S )z
        Dynamically detect all related AbstractFormField subclasses to ensure
        validation is applied regardless of the related_name or if there are multiple
        AbstractFormField subclasses related to this page.
           AbstractFormFieldc                    s   g | ]}t |j r|jqS r   )
issubclassrelated_modelrelated_name)rT   related_objectr   r   r   rV      s    
z2WagtailAdminFormPageForm.clean.<locals>.<listcomp>c                 S   s   g | ]}|j jp|j  qS r   )instancerq   rr   rS   r   r   r   rV      s    c                 3   s"    | ]}  |d kr|V  qdS )r   N)count)rT   n)clean_namesr   r   ri      s     z1WagtailAdminFormPageForm.clean.<locals>.<genexpr>Nc                 3   s"    | ]}|j   kr|V  qd S r   )r   rr   rS   )duplicate_clean_namer   r   ri      s    ru   zPThere is another field with the label %(label_name)s, please change one of them.
label_name)modelsr   r   cleanr   _metarelated_objectsformsetsr#   is_validnext	add_errorr"   ValidationErrorr   ru   )r   cleaned_dataform_fields_related_namesr   r#   formduplicate_form_fieldr   )r   r   r   r   r      sB   






zWagtailAdminFormPageForm.clean)r   r   r   r   r   r   r   r   r   r      r   r   )collectionsr   django.formsr"   django.confr   django.utils.htmlr   django.utils.translationr   r   wagtail.admin.formsr   r#   Formr   r   r|   r   r   r   r   r   <module>   s    
 