U
    XKšf6W  ã                   @   sR  d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ ddlmZ ddlmZ ddlmZmZmZm Z m!Z!m"Z" dd	l#m$Z$ dd
l%m&Z&m'Z' zd dl(m)Z) W n e*k
rì   dZ)Y nX G dd„ de+ƒZ,G dd„ de,ƒZ-G dd„ de,ƒZ.G dd„ de,ƒZ/G dd„ de/ƒZ0G dd„ de/ƒZ1dS )é    )ÚBeautifulSoup)ÚBaseFormÚBaseFormSetÚ
BoundFieldÚCheckboxInputÚCheckboxSelectMultipleÚ	DateInputÚ
EmailInputÚ	FileInputÚMultiWidgetÚNumberInputÚPasswordInputÚRadioSelectÚSelectÚSelectDateWidgetÚ	TextInput)Úconditional_escapeÚescapeÚ
strip_tags)Ú	mark_safeé   )Úget_bootstrap_setting)ÚBootstrapError)ÚFORM_GROUP_CLASSÚis_widget_with_placeholderÚrender_fieldÚrender_formÚrender_form_groupÚrender_label)Ú
text_value)Úadd_css_classÚrender_template_file)ÚReadOnlyPasswordHashWidgetNc                   @   s:   e Zd ZdZdd„ Zdd„ Zddd„Zd	d
„ Zdd„ ZdS )ÚBaseRendererzA content renderer.c                 O   s¬   |  dd¡| _|  dt¡| _|  dd¡| _|  dd¡| _|  dd¡| _|  dd¡| _|  d	d¡| _|  d
d¡| _	|  
|  dd¡¡| _|  dtdƒ¡| _|  dtdƒ¡| _d S )NÚlayoutÚ Úform_group_classÚfield_classÚlabel_classÚ	show_helpTÚ
show_labelÚexcludeÚset_placeholderÚsizeÚhorizontal_label_classÚhorizontal_field_class)Úgetr$   r   r&   r'   r(   r)   r*   r+   r,   Ú
parse_sizer-   r   r.   r/   )ÚselfÚargsÚkwargs© r5   úx/home/adriano.carvalho/ftp/files/ProjetoGabarito/ifmuz/gabarito/venv/lib/python3.8/site-packages/bootstrap5/renderers.pyÚ__init__-   s"     ÿ ÿzBaseRenderer.__init__c                 C   sD   t |ƒ ¡  ¡ }|dkrdS |dkr(dS |dkr4dS td| ƒ‚d S )N)ÚsmÚsmallr9   )ZlgÚlarger:   )ÚmdÚmediumr%   r<   zJInvalid value "%s" for parameter "size" (expected "sm", "md", "lg" or "").)r   ÚlowerÚstripr   )r2   r-   r5   r5   r6   r1   ?   s    zBaseRenderer.parse_sizeúform-controlc                 C   s(   | j dkr|d S | j dkr$|d S dS )Nr9   z-smr:   z-lgr%   )r-   )r2   Úprefixr5   r5   r6   Úget_size_classI   s
    

zBaseRenderer.get_size_classc                 C   s   dS ©Nr%   r5   ©r2   r5   r5   r6   Ú_renderP   s    zBaseRenderer._renderc                 C   s   t |  ¡ ƒS ©N)r   rD   rC   r5   r5   r6   ÚrenderS   s    zBaseRenderer.renderN)r?   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   r1   rA   rD   rF   r5   r5   r5   r6   r#   *   s   

r#   c                       sP   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
‡  ZS )ÚFormsetRendererzDefault formset renderer.c                    s*   t |tƒstdƒ‚|| _tƒ j||Ž d S )Nz:Parameter "formset" should contain a valid Django Formset.)Ú
isinstancer   r   ÚformsetÚsuperr7   )r2   rM   r3   r4   ©Ú	__class__r5   r6   r7   Z   s    
zFormsetRenderer.__init__c                 C   s   t | jjƒS rE   )r   rM   Zmanagement_formrC   r5   r5   r6   Úrender_management_form`   s    z&FormsetRenderer.render_management_formc                 K   s   t |f|ŽS rE   )r   )r2   Úformr4   r5   r5   r6   r   c   s    zFormsetRenderer.render_formc                 C   sZ   g }| j jD ]B}| | j|| j| j| j| j| j| j	| j
| j| j| j| jd¡ qd |¡S )N)r$   r&   r'   r(   r*   r)   r+   r,   r-   r.   r/   Ú
)rM   ÚformsÚappendr   r$   r&   r'   r(   r*   r)   r+   r,   r-   r.   r/   Újoin)r2   Zrendered_formsrR   r5   r5   r6   Úrender_formsf   s&    ôÿzFormsetRenderer.render_formsc                 C   s
   | j  ¡ S rE   )rM   Znon_form_errorsrC   r5   r5   r6   Úget_formset_errors{   s    z"FormsetRenderer.get_formset_errorsc                 C   s(   |   ¡ }|r$td|| j| jdœdS dS )Núbootstrap5/form_errors.html)ÚerrorsrR   r$   ©Úcontextr%   )rX   r!   rM   r$   )r2   Zformset_errorsr5   r5   r6   Úrender_errors~   s    þzFormsetRenderer.render_errorsc                 C   s   d  |  ¡ |  ¡ |  ¡ g¡S rB   )rV   r]   rQ   rW   rC   r5   r5   r6   rD   ‡   s    zFormsetRenderer._render)rG   rH   rI   rJ   r7   rQ   r   rW   rX   r]   rD   Ú__classcell__r5   r5   rO   r6   rK   W   s   	rK   c                       sB   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	d
„Zdd„ Z‡  Z	S )ÚFormRendererzDefault form renderer.c                    sp   t |tƒstdƒ‚|| _tƒ j||Ž | dd ¡| _| dd ¡| _| dd ¡| _	| dd¡| _
| dd¡| _d S )	Nz4Parameter "form" should contain a valid Django Form.Úerror_css_classÚrequired_css_classÚbound_css_classÚalert_error_typeÚ
non_fieldsÚform_check_classú
form-check)rL   r   r   rR   rN   r7   r0   r`   ra   rb   rc   re   )r2   rR   r3   r4   rO   r5   r6   r7   Ž   s    
zFormRenderer.__init__c                 C   sf   g }| j D ]P}| t|| j| j| j| j| j| j| j	| j
| j| j| j| j| j| j| jd¡ q
d |¡S )N)r$   r&   r'   r(   re   r*   r)   r+   r,   r-   r.   r/   r`   ra   rb   rS   )rR   rU   r   r$   r&   r'   r(   re   r*   r)   r+   r,   r-   r.   r/   r`   ra   rb   rV   )r2   Zrendered_fieldsÚfieldr5   r5   r6   Úrender_fields™   s.    
ðÿzFormRenderer.render_fieldsc                 C   s*   g }| j D ]}|js
|jr
||j7 }q
|S rE   )rR   Ú	is_hiddenrZ   )r2   Úform_errorsrg   r5   r5   r6   Úget_fields_errors²   s
    
zFormRenderer.get_fields_errorsÚallc                 C   sf   d }|dkr |   ¡ | j ¡  }n$|dkr2|   ¡ }n|dkrD| j ¡ }|rbtd|| j| j|dœdS dS )Nrl   Úfieldsrd   rY   )rZ   rR   r$   Útyper[   r%   )rk   rR   Znon_field_errorsr!   r$   )r2   rn   rj   r5   r5   r6   r]   ¹   s    

þzFormRenderer.render_errorsc                 C   s   |   | j¡|  ¡  S rE   )r]   rc   rh   rC   r5   r5   r6   rD   Ê   s    zFormRenderer._render)rl   )
rG   rH   rI   rJ   r7   rh   rk   r]   rD   r^   r5   r5   rO   r6   r_   ‹   s   
r_   c                       s  e Zd ZdZeeeefZ‡ fdd„Z	dd„ Z
d9dd„Zd:d	d
„Zd;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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$‡  Z%S )<ÚFieldRendererzDefault field renderer.c                    sà  t |tƒstdƒ‚|| _tƒ j||Ž |jj| _t |jjtƒ| _| jj	 
¡ | _| jrh|jrhtt|jƒƒnd| _dd„ |jD ƒ| _| dd¡| _d|kr¢|d | _ntdƒr´|j| _nd| _| jrÌt| jƒ| _| d	| jj	 d	d¡¡| _| d
| jj	 d
d¡¡| _| d| jj	 dd¡¡| _| d| jj	 dd¡¡| _| dd ¡}| dd ¡}| dd ¡}|d k	rj|| _nt|jdtdƒƒ| _|d k	r|| _ nt|jdtdƒƒ| _ |d k	r¶|| _!nt|jdtdƒƒ| _!| jjj"rÜd| _ d S )Nz;Parameter "field" should contain a valid Django BoundField.r%   c                 S   s   g | ]}t t|ƒƒ‘qS r5   )r   r   )Ú.0Úerrorr5   r5   r6   Ú
<listcomp>Þ   s     z*FieldRenderer.__init__.<locals>.<listcomp>re   rf   Úplaceholderr,   Úaddon_beforeÚaddon_afterÚaddon_before_classzinput-group-textÚaddon_after_classr`   ra   rb   Úsuccess_css_class)#rL   r   r   rg   rN   r7   Úwidgetr   Úis_multi_widgetÚattrsÚcopyÚinitial_attrsr)   Ú	help_textr   r   Ú
field_helprZ   Úfield_errorsr0   re   rs   r   ÚlabelÚpoprt   ru   rv   rw   r`   ÚgetattrrR   ra   rx   Zempty_permitted)r2   rg   r3   r4   r`   ra   rb   rO   r5   r6   r7   Ô   sZ    

 
 ÿ ÿ

  ÿ
zFieldRenderer.__init__c                 C   s   | j  ¡ | j_d S rE   )r}   r|   ry   r{   rC   r5   r5   r6   Úrestore_widget_attrs  s    z"FieldRenderer.restore_widget_attrsNc                 C   sÚ   |d kr| j }|j dd¡}td k	r>t|tƒr>t|ddd}n\t|| jƒsht|ddd}t||  ¡ ƒ}n2t|tƒr‚t|ddd}nt|t	ƒršt|ddd}| j
jr¶| jrÌt|| jƒ}n| j
jjrÌt|| jƒ}||jd< d S )	NÚclassr%   zform-control-staticT)Úprependr?   úform-check-inputzform-select)ry   r{   r0   r"   rL   r    ÚWIDGETS_NO_FORM_CONTROLrA   r   r   rg   rZ   r`   rR   Úis_boundrx   )r2   ry   Úclassesr5   r5   r6   Úadd_class_attrs  s$    


zFieldRenderer.add_class_attrsc                 C   s>   |d kr| j }|j d| j¡}|r:| jr:t|ƒr:||jd< d S )Nrs   )ry   r{   r0   rs   r,   r   )r2   ry   rs   r5   r5   r6   Úadd_placeholder_attrs*  s
    z#FieldRenderer.add_placeholder_attrsc                 C   s:   |d kr| j }t|tƒs6|j dtt| jƒƒ¡|jd< d S )NÚtitle)ry   rL   r   r{   r0   r   r   r   )r2   ry   r5   r5   r6   Úadd_help_attrs2  s    
zFieldRenderer.add_help_attrsc                 C   sD   | j r| jj}n| jg}|D ]"}|  |¡ |  |¡ |  |¡ qd S rE   )rz   ry   Úwidgetsr‹   rŒ   rŽ   )r2   r   ry   r5   r5   r6   Úadd_widget_attrs8  s    


zFieldRenderer.add_widget_attrsc           
   	   C   sØ   t ||  ¡ ƒ}ddj|dfdddj| jdfdg}|D ]\}}| ||¡}q8t|d	d
}| dd|i¡}|rÐ| d¡D ]V}	|	j 	dg ¡dg |	jd< z"|	j
j 	dg ¡dg |	j
jd< W qx tk
rÌ   Y qxX qxt|ƒS )Nz<ulz<div class="{classes}")rŠ   )z</ul>ú</div>z<liz<div class="{form_check_class}")re   )z</li>r‘   zhtml.parser)ÚfeaturesÚdivr…   r   úform-check-labelr‡   )r    rA   Úformatre   Úreplacer   ÚfindZfind_allr{   r0   ÚinputÚAttributeErrorÚstr)
r2   ÚhtmlÚklassrŠ   ÚmappingÚkÚvZsoupZenclosing_divr   r5   r5   r6   Úlist_to_classB  s$    ü"zFieldRenderer.list_to_classc                 C   s&   |t | jj| jjtt| jƒƒdd S )Nr”   )ÚcontentÚ	label_forZlabel_titler(   )r   rg   r   Úid_for_labelr   r   r   ©r2   r›   r5   r5   r6   Úadd_checkbox_label[  s    üz FieldRenderer.add_checkbox_labelc                 C   s4   d}d}|  d|d ¡}|  dd| ¡}dj|dS )Nz<div class="col-4">r‘   z<selectz	</select>z4<div class="row bootstrap5-multi-input">{html}</div>©r›   )r–   r•   )r2   r›   Zdiv1Zdiv2r5   r5   r6   Úfix_date_select_inputc  s
    z#FieldRenderer.fix_date_select_inputc                 C   s   d| }|S )Nz<br>r5   r¤   r5   r5   r6   Úfix_file_input_labelj  s    z"FieldRenderer.fix_file_input_labelc                 C   s„   t | jtƒr|  |d¡}nft | jtƒr4|  |d¡}nLt | jtƒrL|  |¡}n4t | jtƒrj| jrj|  	|¡}nt | jt
ƒr€|  |¡}|S )Nzradio radio-successZcheckbox)rL   ry   r   r    r   r   r§   r   r*   r¥   r
   r¨   r¤   r5   r5   r6   Úpost_widget_rendern  s    
z FieldRenderer.post_widget_renderc                 C   s   t | jtƒrdj|d}|S )Nz$<div class="form-check">{html}</div>r¦   )rL   ry   r   r•   r¤   r5   r5   r6   Úwrap_widget{  s    zFieldRenderer.wrap_widgetc                 C   s(   |sdS |rdj ||d}dj ||dS )Nr%   z,<span class="{inner_class}">{content}</span>)Úinner_classr¡   z*<div class="{outer_class}">{content}</div>)Úouter_classr¡   )r•   )r2   r«   r¬   r¡   r5   r5   r6   Úmake_input_group_addon‚  s
    z$FieldRenderer.make_input_group_addonc                 C   s(   t tttttf}| js| jo&t| j	|ƒS rE   )
r   r   r   r   r   r	   rt   ru   rL   ry   )r2   Zallowed_widget_typesr5   r5   r6   Úis_input_group‰  s    zFieldRenderer.is_input_groupc                 C   sP   | j rL|  | jd| j¡}|  | jd| j¡}|  dj|||d¡}dj|d}|S )Nzinput-group-prependzinput-group-appendz{before}{html}{after})Úbeforer›   Úafterz%<div class="input-group">{html}</div>r¦   )r®   r­   rv   rt   rw   ru   Úappend_errorsr•   )r2   r›   r¯   r°   r5   r5   r6   Úmake_input_groupŽ  s    zFieldRenderer.make_input_groupc                 C   s6   | j pd }|r2td| j|| j| jdœd}||7 }|S )Nzbootstrap5/field_help_text.html)rg   r   r$   r)   r[   )r   r!   rg   r$   r)   )r2   r›   r   Z	help_htmlr5   r5   r6   Úappend_help–  s    
üþ	zFieldRenderer.append_helpc                 C   s2   | j }|r.td| j|| j| jdœd}||7 }|S )Nzbootstrap5/field_errors.html)rg   r€   r$   r)   r[   )r€   r!   rg   r$   r)   )r2   r›   r€   Zerrors_htmlr5   r5   r6   r±   ¥  s    üþ	zFieldRenderer.append_errorsc                 C   s*   t | jtƒr|S | js |  |¡}|  |¡S rE   )rL   ry   r   r®   r±   r³   r¤   r5   r5   r6   Úappend_to_field´  s
    
zFieldRenderer.append_to_fieldc                 C   s$   t | jtƒs|S |  |¡}|  |¡S rE   )rL   ry   r   r±   r³   r¤   r5   r5   r6   Úappend_to_checkbox_fieldÀ  s    
z&FieldRenderer.append_to_checkbox_fieldc                 C   s   | j }|s| jdkr| j}|S )NÚ
horizontal)r'   r$   r/   )r2   r'   r5   r5   r6   Úget_field_classÈ  s    zFieldRenderer.get_field_classc                 C   s   |   ¡ }|rdj||d}|S )Nz'<div class="{field_class}">{html}</div>)r'   r›   )r·   r•   )r2   r›   r'   r5   r5   r6   Ú
wrap_fieldÎ  s    zFieldRenderer.wrap_fieldc                 C   sR   | j }|s$| jdkr$| j}t|dƒ}t|ƒ}|s4d}| jrD| jdkrNt|dƒ}|S )Nr¶   zcol-form-labelz
form-labelúvisually-hidden)r(   r$   r.   r    r   r*   )r2   r(   r5   r5   r6   Úget_label_classÔ  s    

zFieldRenderer.get_label_classc                 C   sB   | j dkrd S t| jtƒr d }n| jj}| jdkr>|s>tdƒS |S )NÚskipr¶   z&#160;)r*   rL   ry   r   rg   r   r$   r   )r2   r   r5   r5   r6   Ú	get_labelà  s    
zFieldRenderer.get_labelc                 C   s*   |   ¡ }|r&t|| jj|  ¡ d| }|S )N)r¢   r(   )r¼   r   rg   r£   rº   )r2   r›   r   r5   r5   r6   Ú	add_labelë  s    zFieldRenderer.add_labelc                 C   sl   | j }| jjr"| jr8t|| jƒ}n| jjjr8t|| jƒ}| jjjrT| j	rTt|| j	ƒ}| j
dkrht|dƒ}|S )Nr¶   Úrow)r&   rg   rZ   r`   r    rR   r‰   rx   Úrequiredra   r$   )r2   r&   r5   r5   r6   Úget_form_group_classñ  s    


z"FieldRenderer.get_form_group_classc                 C   s   t ||  ¡ ƒS rE   )r   rÀ   r¤   r5   r5   r6   Úwrap_label_and_fieldÿ  s    z"FieldRenderer.wrap_label_and_fieldc                 C   s¨   | j j| j dd¡ d¡kr dS | j jr2t| j ƒS |  ¡  | j j| j	j
d}|  ¡  |  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|S )Nú r%   ú,)r{   )rg   Únamer+   r–   Úsplitri   r   r   Z	as_widgetry   r{   r„   r©   rµ   rª   r²   r´   r¸   r½   rÁ   r¤   r5   r5   r6   rD     s     








zFieldRenderer._render)N)N)N)&rG   rH   rI   rJ   r   r   r   r   rˆ   r7   r„   r‹   rŒ   rŽ   r   r    r¥   r§   r¨   r©   rª   r­   Úpropertyr®   r²   r³   r±   r´   rµ   r·   r¸   rº   r¼   r½   rÀ   rÁ   rD   r^   r5   r5   rO   r6   ro   Î   s<   :




ro   c                       sL   e Zd ZdZdd„ Z‡ fdd„Zdd„ Zdd	„ Z‡ fd
d„Zdd„ Z	‡  Z
S )ÚInlineFieldRendererzInline field renderer.c                 C   sB   | j j dd¡}|dd dd„ | jD ƒ¡ 7 }| ¡ | j jd< d S )Nr   r%   rÂ   c                 S   s   g | ]}t |ƒ‘qS r5   )r   )rp   Úer5   r5   r6   rr     s     z7InlineFieldRenderer.add_error_attrs.<locals>.<listcomp>)ry   r{   r0   rV   r€   r>   )r2   Zfield_titler5   r5   r6   Úadd_error_attrs  s    z#InlineFieldRenderer.add_error_attrsc                    s   t ƒ  ¡  |  ¡  d S rE   )rN   r   rÉ   rC   rO   r5   r6   r   !  s    
z$InlineFieldRenderer.add_widget_attrsc                 C   s   |S rE   r5   r¤   r5   r5   r6   r´   %  s    z#InlineFieldRenderer.append_to_fieldc                 C   s   | j S rE   )r'   rC   r5   r5   r6   r·   (  s    z#InlineFieldRenderer.get_field_classc                    s   | j tkrd| _ tƒ  ¡ S )Nzcol-auto)r&   r   rN   rÀ   rC   rO   r5   r6   rÀ   +  s    
z(InlineFieldRenderer.get_form_group_classc                 C   s   t | jdƒS )Nr¹   )r    r(   rC   r5   r5   r6   rº   0  s    z#InlineFieldRenderer.get_label_class)rG   rH   rI   rJ   rÉ   r   r´   r·   rÀ   rº   r^   r5   r5   rO   r6   rÇ     s   rÇ   c                   @   s   e Zd ZdZdd„ ZdS )ÚHorizontalFieldRendererzHorizontal field renderer.c                 C   s   |S rE   r5   r¤   r5   r5   r6   r¨   8  s    z,HorizontalFieldRenderer.fix_file_input_labelN)rG   rH   rI   rJ   r¨   r5   r5   r5   r6   rÊ   4  s   rÊ   )2Zbs4r   Zdjango.formsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Zdjango.utils.htmlr   r   r   Zdjango.utils.safestringr   Z	bootstrapr   Ú
exceptionsr   rT   r   r   r   r   r   r   Útextr   Úutilsr    r!   Zdjango.contrib.auth.formsr"   ÚRuntimeErrorÚobjectr#   rK   r_   ro   rÇ   rÊ   r5   r5   r5   r6   Ú<module>   s(   D 
-4C  M