
    [6gyS                     D   d dl 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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 dd	lmZmZmZm Z  dd
l!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(  G d d          Z) G d de)          Z* G d de)          Z+ G d de)          Z,dS )    )	BaseFormBaseFormSet
BoundFieldCheckboxInputCheckboxSelectMultipleClearableFileInputMultiWidgetRadioSelectSelect)InputSelectMultipleTextarea)conditional_escapeformat_html
strip_tags)	mark_safe   )get_bootstrap_setting)merge_css_classes)render_fieldrender_formrender_label)DEFAULT_SIZESIZE_MDget_size_class
parse_size)
text_value)render_template_file)RadioSelectButtonGroupReadOnlyPasswordHashWidgetis_widget_with_placeholderc                   x    e Zd ZdZdZdZdZd Zed             Z	ed             Z
ed             Zd	 Zd
 Zd ZdS )BaseRendererzA content renderer.z#django_bootstrap5/field_errors.htmlz&django_bootstrap5/field_help_text.htmlz"django_bootstrap5/form_errors.htmlc                    |                     dd          | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dd          | _        |                     dd          | _        |                     dd          | _        |                     d	d          | _        |                     d
d          | _	        |                     dd          | _
        t          |                     dd          t                    | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dt          d                    | _        |                     dd           | _        |                     dd           | _        |                     dd           | _        |                     dd          | _        d S )Nlayout wrapper_classinline_wrapper_classfield_classlabel_class	show_helpT
show_labelexcludeset_placeholdersize)defaulthorizontal_label_classhorizontal_field_classcheckbox_layoutcheckbox_stylehorizontal_field_offset_classinline_field_classserver_side_validationerror_css_classrequired_css_classsuccess_css_classalert_error_type
non_fields)getr%   r   r'   r(   r)   r*   r+   r,   r-   r.   r   r   r/   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   )selfkwargss     Z/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django_bootstrap5/renderers.py__init__zBaseRenderer.__init__!   s\   jj2..#ZZ9N9_9_``$*JJ/EG\]sGtGt$u$u!!::mR88!::mR88K66 **\488zz)R00%zz*;TBBvzz&"55wGGG	&,jj$&;<T&U&U'
 '
# '-jj$&;<T&U&U'
 '
#  &zz*;=RSd=e=eff$jj)9;PQa;b;bcc-3ZZ+-BCb-c-c.
 .
* #)**-ACXYmCnCn"o"o&,jj$&;<T&U&U'
 '
#  &zz*;TBB"(**-A4"H"H!',?!F!F &

+=| L L    c                     | j         dk    S )z<Return whether to render `form-control` widgets as floating.floatingr%   r>   s    r@   is_floatingzBaseRenderer.is_floating@   s     {j((rB   c                     | j         dk    S )z+Return whether to render form horizontally.
horizontalrE   rF   s    r@   is_horizontalzBaseRenderer.is_horizontalE   s     {l**rB   c                     | j         dk    S )z4Return whether to render widgets with inline layout.inlinerE   rF   s    r@   	is_inlinezBaseRenderer.is_inlineJ   s     {h&&rB   c                 D    | j         dv rt          | j         |          ndS )z#Return size class for given prefix.)smlg)prefixr&   )r/   r   )r>   rQ   s     r@   r   zBaseRenderer.get_size_classO   s)    ;?9;T;T~di7777Z\\rB   c                 8   i d| j         d| j        d| j        d| j        d| j        d| j        d| j        d| j        d	| j        d
| j	        d| j
        d| j        d| j        d| j        d| j        d| j        d| j        | j        | j        d}|S )z,Return kwargs to pass on to child renderers.r%   r'   r)   r*   r+   r,   r-   r.   r/   r1   r2   r5   r3   r4   r6   r8   r:   )r9   r;   )r%   r'   r)   r*   r+   r,   r-   r.   r/   r1   r2   r5   r3   r4   r6   r8   r:   r9   r;   )r>   contexts     r@   
get_kwargszBaseRenderer.get_kwargsS   s#   
dk
T/
 4+
 4+	

 
 $/
 t|
 t3
 DI
 %d&A
 %d&A
 ,T-O
 t3
 d1
 !$"9
  t3!
"  !7#
$ #'"9 $ 5'
 
 
* rB   c                     dS )zRender to string.r&    rF   s    r@   renderzBaseRenderer.renderl   s    rrB   N)__name__
__module____qualname____doc__field_errors_templatefield_help_text_templateform_errors_templaterA   propertyrG   rJ   rM   r   rT   rW   rV   rB   r@   r#   r#      s         BG?M M M> ) ) X) + + X+ ' ' X'] ] ]  2    rB   r#   c                   @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )FormsetRendererzDefault formset renderer.c                     t          |t                    st          d          || _         t	                      j        di | d S )Nz:Parameter "formset" should contain a valid Django Formset.rV   )
isinstancer   	TypeErrorformsetsuperrA   )r>   re   r?   	__class__s      r@   rA   zFormsetRenderer.__init__t   sO    ';// 	ZXYYY""6"""""rB   c                 4    t          | j        j                  S )z Return HTML for management form.)r   re   management_formrF   s    r@   render_management_formz&FormsetRenderer.render_management_formz   s    $,6777rB   c                     t          d          }|                                 }| j        j        D ]}|t	          |fi |z  }|S Nr&   )r   rT   re   formsr   )r>   rendered_formsr?   forms       r@   render_formszFormsetRenderer.render_forms~   sR    "2""L& 	: 	:Dk$99&999NNrB   c                 4    | j                                         S N)re   non_form_errorsrF   s    r@   get_formset_errorsz"FormsetRenderer.get_formset_errors   s    |++---rB   c                     |                                  }|r$t          | j        || j        | j        d          S t          d          S )N)errorsro   r%   rS   r&   )rt   r   r^   re   r%   r   )r>   formset_errorss     r@   render_errorszFormsetRenderer.render_errors   s]    0022 	'), L"k     }}rB   c                     t          |                                 dz   |                                 |                                           S )Nz{}{})r   rj   ry   rp   rF   s    r@   rW   zFormsetRenderer.render   s>    466886A4CUCUCWCWY]YjYjYlYlmmmrB   )rX   rY   rZ   r[   rA   rj   rp   rt   ry   rW   __classcell__rg   s   @r@   ra   ra   q   s        ### # # # #8 8 8  . . .  n n n n n n nrB   ra   c                   <     e Zd ZdZ fdZd Zd ZddZd Z xZ	S )	FormRendererzDefault form renderer.c                     t          |t                    st          d          || _         t	                      j        di | d S )Nz4Parameter "form" should contain a valid Django Form.rV   )rc   r   rd   ro   rf   rA   )r>   ro   r?   rg   s      r@   rA   zFormRenderer.__init__   sO    $)) 	TRSSS	""6"""""rB   c                     t          d          }|                                 }| j        D ]}|t          |fi |z  }|S rl   )r   rT   ro   r   )r>   rendered_fieldsr?   fields       r@   render_fieldszFormRenderer.render_fields   sO    #B--""Y 	= 	=E|E<<V<<<OOrB   c                 N    g }| j         D ]}|j        s|j        r
||j        z  }|S rr   )ro   	is_hiddenrv   )r>   form_errorsr   s      r@   get_fields_errorszFormRenderer.get_fields_errors   s>    Y 	, 	,E? ,u| ,u|+rB   allc                 P   d }|dk    r/|                                  | j                                        z   }n:|dk    r|                                  }n|dk    r| j                                        }|r%t          | j        || j        | j        |d          S t          d          S )Nr   fieldsr<   )rv   ro   r%   typerw   r&   )r   ro   non_field_errorsr   r^   r%   r   )r>   r   r   s      r@   ry   zFormRenderer.render_errors   s    5==0022TY5O5O5Q5QQKKX0022KK\!!)4466K 	')#.	T[bfgg   
 }}rB   c                 h    |                      | j                  }|                                 }||z   S rr   )ry   r;   r   )r>   rv   r   s      r@   rW   zFormRenderer.render   s3    ##D$9::##%%rB   )r   )
rX   rY   rZ   r[   rA   r   r   ry   rW   r{   r|   s   @r@   r~   r~      s          # # # # #       "      rB   r~   c                        e Zd ZdZ fdZe fd            Zed             Zd Zd Z	ddZ
d	 Zd
 ZddZddZd ZddZd ZddZd Zd Zd Zd Zd Zd Zd Zd Z xZS )FieldRendererzDefault field renderer.c                    t          |t                    st          d          || _         t	                      j        di | |j        j        | _        t          |j        j        t                    | _        | j        j	        
                                | _        | j        r|j        rt          |j                  nd| _        d |j        D             | _        t          |                    d| j                            | _        |                    d| j        j	                            dd                    | _        |                    d| j        j	                            dd                    | _        |                    d| j        j	                            dd                    | _        |                    d	| j        j	                            d	d                    | _        |                    d
d           }|#t3          |j        d
t7          d
                    n|| _        |                    dd           }|#t3          |j        dt7          d                    n|| _        | j        j        j        rd| _        |                    dd           }|#t3          |j        dt7          d                    n|| _        d S )Nz;Parameter "field" should contain a valid Django BoundField.r&   c                 F    g | ]}t          t          |                    S rV   )r   r   ).0errors     r@   
<listcomp>z*FieldRenderer.__init__.<locals>.<listcomp>   s)    ]]]u/
50A0ABB]]]rB   placeholderaddon_beforeaddon_afteraddon_before_classzinput-group-textaddon_after_classr8   r9   r:   rV   ) rc   r   rd   r   rf   rA   widgetr	   is_multi_widgetattrscopyinitial_attrsr+   	help_textr   rv   field_errorsr=   default_placeholderr   popr   r   r   r   getattrro   r   r8   r9   empty_permittedr:   )r>   r   r?   r8   r9   r:   rg   s         r@   rA   zFieldRenderer.__init__   s   %,, 	[YZZZ
""6"""k()%+*<kJJ![.33558<b5?bEO444`b]]PUP\]]]%fjj@X&Y&YZZ"JJ~t{7H7L7L^]_7`7`aa!::mT[5F5J5J=Z\5]5]^^"(** $+"3"7"78LN`"a"a#
 #
 "(!2!6!67JL^!_!_"
 "

 !**%6== & EJ 13HIZ3[3[\\\  	 $ZZ(<dCC ") EJ 46KL`6a6abbb# 	
 :?* 	)&(D#"JJ':DAA !( EJ 35JK^5_5_```" 	rB   c                 ~    t                      j        o)|                     | j                  o| j         o| j         S rr   )rf   rG   can_widget_floatr   r   r   )r>   rg   s    r@   rG   zFieldRenderer.is_floating   sJ     GG %%%dk22%%%% $$		
rB   c                 <    t          d          r| j        j        ndS )z%Return default placeholder for field.r.   r&   )r   r   labelrF   s    r@   r   z!FieldRenderer.default_placeholder  s#     $99J#K#KStzQSSrB   c                 L    | j                                         | j        _        d S rr   )r   r   r   r   rF   s    r@   restore_widget_attrsz"FieldRenderer.restore_widget_attrs  s!     .3355rB   c                 >    t          |t                    r|j        ndS )z%Return input type of widget, or None.N)rc   r   
input_typer>   r   s     r@   get_widget_input_typez#FieldRenderer.get_widget_input_type
  s    $.vu$=$=Gv  4GrB   Nc                     |p| j         }t          |t                    r|                     |          dv S t          |t                    S )N)textnumberemailurlteldatetimepassword)r   rc   r   r   r   r   s     r@   is_form_control_widgetz$FieldRenderer.is_form_control_widget  sR    &4;fe$$ 
	--f55 	: 	 	 &(+++rB   c                 4    |                      |          dk    S )zPReturn whether given widget can be rendered with server-side validation classes.color)r   r   s     r@   &can_widget_have_server_side_validationz4FieldRenderer.can_widget_have_server_side_validation  s    ))&11W<<rB   c                     |                      |          rdS t          |t                    r-| j        t          k    ot          |t
          t          f           S dS )zCReturn whether given widget can be set to `form-floating` behavior.TF)r   rc   r   r/   r   r   r
   r   s     r@   r   zFieldRenderer.can_widget_float"  sZ    &&v.. 	4ff%% 	g9,fZYdHe5f5f1ffurB   c                    || j         }d}g }|j                            dd          t          | j                  g}t
          +t          |t
                    r|                    d           nt          |t                    r|                    d           d}nt          |t                    r|                    d           nt          |t          t          f          rc|                     |          }|dk    r|                    d           n2|                    d	           |d
k    r|                    d           d	}|r,|                    t          | j        |ddg                     | j        r<|                     |          r'|                    |                                            ||z   }t%          | |j        d<   dS )zAdd class attribute to widget.Nclassr&   zform-control-staticzform-selectzform-check-inputrangez
form-rangezform-controlr   zform-control-colorxsmd)rQ   skip)r   r   r=   r   r)   r    rc   appendr   r   r   r   r   r   r/   r7   r   "get_server_side_validation_classesr   )r>   r   size_prefixbeforeclassesr   s         r@   add_widget_class_attrsz$FieldRenderer.add_widget_class_attrs*  s   >[F<##GR00*T=M2N2NO%1jIc6d6d1MM/0000'' 	-MM-((('KK.. 
	-MM,---- 122 	-33F;;JW$$l++++n---((MM"6777, 	]NN>$)KtUYl[[[\\\& 	F4+V+VW]+^+^ 	FNN4BBDDEEE7" 17 ;WrB   c                     || j         }|j                            d| j                  }|r<| j        r7t          |          r*t          t          |                    |j        d<   dS dS dS dS )z$Add placeholder attribute to widget.Nr   )r   r   r=   r   r.   r!   r   r   )r>   r   r   s      r@   add_placeholder_attrsz#FieldRenderer.add_placeholder_attrsM  s    >[Fl&&}d6FGG 	V4/ 	V4Nv4V4V 	V*<Z=T=T*U*UFL'''	V 	V 	V 	V 	V 	VrB   c                 F   | j         r| j        j        }n| j        g}|D ]}|                     |           |                     |           t          |t          t          f          rt          |t                    sd|_	        et          |t                    rd|_	        dS )z*Return HTML attributes for widget as dict.z+django_bootstrap5/widgets/radio_select.htmlz3django_bootstrap5/widgets/clearable_file_input.htmlN)r   r   widgetsr   r   rc   r
   r   r   template_namer   )r>   r   r   s      r@   add_widget_attrszFieldRenderer.add_widget_attrsU  s     	$k)GG{mG 	] 	]F''///&&v...&;0F"GHH ]Q[.R R ] (U$$F$677 ]'\$	] 	]rB   Fc                    t          | j                  g}| j        s|                    d           nGt	          | j        t                    rd}n$| j        rd}n|rt          | j	        d          }nd}|g|z   }t          | S )zReturn CSS class for label.zvisually-hiddenzform-check-labelzcol-form-labelz
form-label)
r   r*   r,   r   rc   r   r   rM   r   r1   )r>   rI   label_classeswidget_label_classs       r@   get_label_classzFieldRenderer.get_label_classe  s    #D$4556 	A  !23333$+}55 2%7"" 2%6"" 2%6t7RTd%e%e""%1"/0=@M -00rB   c                     |                                   | j                            | j        j                  }|                                  |S )zReturn HTML for field.)r   )r   r   	as_widgetr   r   r   )r>   
field_htmls     r@   get_field_htmlzFieldRenderer.get_field_htmlv  sI    Z))0A)BB
!!###rB   c                     | j         dk    rdn| j        j        }t          | j        t
          t          f          rd}n| j        j        }|r&t          ||| 	                    |                    }|S )zReturn value for label.r   r&   NrI   )	label_forr*   )
r,   r   r   rc   r   r
   r   id_for_labelr   r   )r>   rI   
label_htmlr   s       r@   get_label_htmlzFieldRenderer.get_label_html}  s    ?f44RR$*:J
dkK1G#HII 	0II
/I 	%# 00J0GG  J
 rB   c                 p    | j         pd}|r*t          | j        | j        || j        | j        d          S dS )zReturn HTML for help text.r&   )r   r   r%   r+   rw   )r   r   r]   r   r%   r+   )r>   r   s     r@   get_help_htmlzFieldRenderer.get_help_html  sV    N(b	 		'-!Z!*"k!%	     rrB   c                 l    | j         }|r*t          | j        | j        || j        | j        d          S dS )zReturn HTML for field errors.)r   r   r%   r+   rw   r&   )r   r   r\   r   r%   r+   )r>   r   s     r@   get_errors_htmlzFieldRenderer.get_errors_html  sR    ( 		'*!Z$0"k!%	     rrB   c                 >    | j         rdS | j        j        j        rdS dS )z.Return CSS classes for server-side validation.z
is-invalidzis-validr&   )r   r   ro   is_boundrF   s    r@   r   z0FieldRenderer.get_server_side_validation_classes  s+     	<Z_% 	:rrB   c                     | j         pdS )z"Return CSS class for inline field.zcol-12)r6   rF   s    r@   get_inline_field_classz$FieldRenderer.get_inline_field_class  s    &2(2rB   c                     dg}| j         dk    r|                    d           | j        dk    r|                    d           t          | S )z Return CSS classes for checkbox.z
form-checkswitchzform-switchrL   zform-check-inline)r4   r   r3   r   )r>   r   s     r@   get_checkbox_classesz"FieldRenderer.get_checkbox_classes  sU    .(**NN=)))8++NN./// '**rB   c                 H   g }| j         rB|                    |                                            |                    | j                   n6| j        r|                    d           |                    | j                   | j        r|                    d           | j        j        r|                    | j	                   n+| j        j
        j        r|                    | j                   | j        j        j        r|                    | j                   t          | S )zReturn classes for wrapper.rowzform-floating)rM   r   r   r(   rJ   r'   rG   r   rv   r8   ro   r   r:   requiredr9   r   )r>   wrapper_classess     r@   get_wrapper_classesz!FieldRenderer.get_wrapper_classes  s!   > 	7""4#>#>#@#@AAA""4#<====! .&&u---""4#5666 	4""?333 : 	;""4#78888Z_% 	;""4#9::::$ 	<""4#:;;; /22rB   c                 D    t          | j        t                    p| j        S )z3Return whether field should be placed before label.)rc   r   r   rG   rF   s    r@   field_before_labelz FieldRenderer.field_before_label  s    $+}55I9IIrB   c                    | j         j        | j                            dd                              d          v rt          d          S | j         j        rt          | j                   S |                                 }| 	                                rC| 
                                }||z   }t          d          }t          | j        | j                  }n"| 
                    | j                  }| j        }|                                 }|                                 }|                                 r| j        | j        }n$| j        rt)          d| j        | j                  nd}| j        | j        }n$| j        rt)          d| j        | j                  nd}|s|rTd}| j        r5|                                 r!t          |d          }|pt          d          }t)          d	|||||          }d}t3          | j        t6                    r)t)          d
|                                 |||          }d}d}t)          d|||          }	| j        rt)          d||	          }	t)          d|                                 ||	          S )N r&   ,r   z<span class="{}">{}</span>zinput-groupzhas-validationz<div></div>z<div class="{}">{}{}{}{}</div>z<div class="{}">{}{}{}</div>z{}{}{}z<div class="{}">{}</div>zH<div class="{wrapper_classes}">{label}{field_with_errors_and_help}</div>)r   r   field_with_errors_and_help)r   namer-   replacesplitr   r   r   r   r   r   r   r2   r5   rJ   r   r   r   r   r   r   r   r   r7   r   rc   r   r   r   r   )
r>   r   r   horizontal_classhelprv   r   r   r   r   s
             r@   rW   zFieldRenderer.render  s   :?dl223;;AA#FFFFR== : 	*dj)))##%%""$$ 	;''))EEMEbMME01LdNpqq''43E'FFE#:!!##%%''&&(( 	&.#0 (K <d>UW[Whiii 
 %-". 'K <d>TVZVfggg 
  { '. @43Z3Z3\3\ @/9IJJG#?y'?'?F#$Dg|]bdoqwxxdk=11 	 >@Y@Y@[@[]bdjlpqqEFD%05&$%O%O" 	)4*,<>X* *& V 4466'A	
 
 
 	
rB   rr   )F)rX   rY   rZ   r[   rA   r_   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r{   r|   s   @r@   r   r      s       !!-
 -
 -
 -
 -
^ 
 
 
 
 X
 T T XT6 6 6H H H, , , , = = =  !< !< !< !<FV V V V] ] ] 1 1 1 1"            3 3 3+ + +3 3 34J J J>
 >
 >
 >
 >
 >
 >
rB   r   N)-django.formsr   r   r   r   r   r   r	   r
   r   django.forms.widgetsr   r   r   django.utils.htmlr   r   r   django.utils.safestringr   corer   cssr   rm   r   r   r   r/   r   r   r   r   r   r   utilsr   r   r   r    r!   r#   ra   r~   r   rV   rB   r@   <module>r      s9  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 A @ @ @ @ @ @ @ @ @ I I I I I I I I I I - - - - - - ' ' ' ' ' ' " " " " " " : : : : : : : : : : C C C C C C C C C C C C       ' ' ' ' ' ' c c c c c c c c c cU U U U U U U Up%n %n %n %n %nl %n %n %nP+ + + + +< + + +\U
 U
 U
 U
 U
L U
 U
 U
 U
 U
rB   