
    FUg6W                        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' 	 d dl(m)Z) n# e*$ r dZ)Y nw xY w G d de+          Z, G d de,          Z- G d de,          Z. G d de,          Z/ G d de/          Z0 G 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                   2    e Zd ZdZd Zd Zd	dZd Zd ZdS )
BaseRendererzA content renderer.c                    |                     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_sizer0   r   r1   r2   )selfargskwargss      S/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/bootstrap5/renderers.py__init__zBaseRenderer.__init__-   s$   jj2.. &

+=?O P P!::mR88!::mR88K66 **\488zz)R00%zz*;TBBOOFJJvr$:$:;;	&,jj$&;<T&U&U'
 '
# '-jj$&;<T&U&U'
 '
###    c                     t          |                                                                          }|dv rdS |dv rdS |dv rdS t          d|z            )N)smsmallr=   )lglarger?   )mdmediumr(   rA   zJInvalid value "%s" for parameter "size" (expected "sm", "md", "lg" or "").)r    lowerstripr   )r5   r0   s     r8   r4   zBaseRenderer.parse_size?   sm    $%%''--//?""7?""7'''8ilppqqqr:   form-controlc                 F    | j         dk    r|dz   S | j         dk    r|dz   S dS )Nr=   z-smr?   z-lgr(   )r0   )r5   prefixs     r8   get_size_classzBaseRenderer.get_size_classI   s5    9E>!9E>!rr:   c                     dS Nr(    r5   s    r8   _renderzBaseRenderer._renderP   s    rr:   c                 D    t          |                                           S N)r   rL   rK   s    r8   renderzBaseRenderer.renderS   s    (((r:   N)rD   )	__name__
__module____qualname____doc__r9   r4   rG   rL   rO   rJ   r:   r8   r%   r%   *   sm        
 
 
$r r r     ) ) ) ) )r:   r%   c                   F     e Zd ZdZ fdZ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        |i | d S )Nz:Parameter "formset" should contain a valid Django Formset.)
isinstancer   r   formsetsuperr9   )r5   rX   r6   r7   	__class__s       r8   r9   zFormsetRenderer.__init__Z   sN    ';// 	_ !]^^^$)&)))))r:   c                 4    t          | j        j                  S rN   )r    rX   management_formrK   s    r8   render_management_formz&FormsetRenderer.render_management_form`   s    $,6777r:   c                     t          |fi |S rN   )r   )r5   formr7   s      r8   r   zFormsetRenderer.render_formc   s    4**6***r:   c                 $   g }| j         j        D ]m}|                    |                     || j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j                             nd                    |          S )N)r'   r)   r*   r+   r-   r,   r.   r/   r0   r1   r2   
)rX   formsappendr   r'   r)   r*   r+   r-   r,   r.   r/   r0   r1   r2   join)r5   rendered_formsr_   s      r8   render_formszFormsetRenderer.render_formsf   s    L& 	 	D!!  ;%)%: $ 0 $ 0#"n L$($8+/+F+/+F !       yy(((r:   c                 4    | j                                         S rN   )rX   non_form_errorsrK   s    r8   get_formset_errorsz"FormsetRenderer.get_formset_errors{   s    |++---r:   c                 p    |                                  }|rt          d|| j        | j        d          S dS )Nbootstrap5/form_errors.html)errorsr_   r'   contextr(   )ri   r"   rX   r'   )r5   formset_errorss     r8   render_errorszFormsetRenderer.render_errors~   sO    0022 	'-#14<SWS^__    rr:   c                     d                     |                                 |                                 |                                 g          S rI   )rd   rp   r]   rf   rK   s    r8   rL   zFormsetRenderer._render   s?    ww**,,d.I.I.K.KTM^M^M`M`abbbr:   )rP   rQ   rR   rS   r9   r]   r   rf   ri   rp   rL   __classcell__rZ   s   @r8   rU   rU   W   s        ##* * * * *8 8 8+ + +) ) )*. . .  c c c c c c cr:   rU   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        |i | |                    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)rW   r   r   r_   rY   r9   r3   rw   rx   ry   rz   r|   )r5   r_   r6   r7   rZ   s       r8   r9   zFormRenderer.__init__   s    $)) 	Y !WXXX	$)&)))%zz*;TBB"(**-A4"H"H%zz*;TBB &

+=| L L &

+=| L Lr:   c                 6   g }| j         D ]{}|                    t          |f| j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        | j        | j        d           |d                    |          S )N)r'   r)   r*   r+   r|   r-   r,   r.   r/   r0   r1   r2   rw   rx   ry   ra   )r_   rc   r   r'   r)   r*   r+   r|   r-   r,   r.   r/   r0   r1   r2   rw   rx   ry   rd   )r5   rendered_fieldsfields      r8   render_fieldszFormRenderer.render_fields   s    Y 	 	E"";%)%: $ 0 $ 0%)%:#"n L$($8+/+F+/+F$($8'+'>$($8!     ( yy)))r:   c                 N    g }| j         D ]}|j        s|j        r
||j        z  }|S rN   )r_   	is_hiddenrl   )r5   form_errorsr   s      r8   get_fields_errorszFormRenderer.get_fields_errors   s>    Y 	, 	,E? ,u| ,u|+r:   allc                 ,   d }|dk    r/|                                  | j                                        z   }n:|dk    r|                                  }n|dk    r| j                                        }|r t          d|| j        | j        |d          S dS )Nr   fieldsr{   rk   )rl   r_   r'   typerm   r(   )r   r_   non_field_errorsr"   r'   )r5   r   r   s      r8   rp   zFormRenderer.render_errors   s    5==0022TY5O5O5Q5QQKKX0022KK\!!)4466K 	'-#.	T[bfgg   
 rr:   c                 `    |                      | j                  |                                 z   S rN   )rp   rz   r   rK   s    r8   rL   zFormRenderer._render   s*    !!$"7884;M;M;O;OOOr:   )r   )
rP   rQ   rR   rS   r9   r   r   rp   rL   rr   rs   s   @r8   ru   ru      s          	M 	M 	M 	M 	M* * *2     "P P P P P P Pr:   ru   c                        e Zd ZdZeeeefZ fdZ	d Z
ddZddZddZd Zd	 Zd
 Zd Zd Zd Zd Zd Zed             Zd Zd Zd Zd Z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                 d   t          |t                    st          d          || _         t	                      j        |i | |j        j        | _        t          |j        j        t                    | _        | j        j	        
                                | _        | j        r(|j        r!t          t          |j                            nd| _        d |j        D             | _        |                    dd          | _        d|v 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           }||| _        n(t=          |j        dt-          d                    | _        ||| _         n(t=          |j        dt-          d                    | _         ||| _!        n(t=          |j        dt-          d                    | _!        | j        j        j"        r	d| _         d S d S )Nz;Parameter "field" should contain a valid Django BoundField.r(   c                 F    g | ]}t          t          |                    S rJ   )r   r    ).0errors     r8   
<listcomp>z*FieldRenderer.__init__.<locals>.<listcomp>   s)    ]]]u/
50A0ABB]]]r:   r|   r}   placeholderr/   addon_beforeaddon_afteraddon_before_classzinput-group-textaddon_after_classrw   rx   ry   success_css_class)#rW   r   r   r   rY   r9   widgetr   is_multi_widgetattrscopyinitial_attrsr,   	help_textr    r   
field_helprl   field_errorsr3   r|   r   r   labelpopr   r   r   r   rw   getattrr_   rx   r   empty_permitted)r5   r   r6   r7   rw   rx   ry   rZ   s          r8   r9   zFieldRenderer.__init__   s   %,, 	` !^___
$)&)))k()%+*<kJJ![.3355DHNnW\Wfn*Yu%?%?@@@ln]]PUP\]]] &

+=| L LF""%m4D"#455 	"${D  "D 	<)$*:;;D"JJ~t{7H7L7L^]_7`7`aa!::mT[5F5J5J=Z\5]5]^^"(** $+"3"7"78LN`"a"a#
 #
 "(!2!6!67JL^!_!_"
 "
 !**%6==#ZZ(<dCC **%6==&#2D  #*5:7HJ_`qJrJr#s#sD )&8D##&-
02GH\2]2]' 'D# &%4D""%,UZ9JLabuLvLv%w%wD" :?* 	)&(D###	) 	)r:   c                 L    | j                                         | j        _        d S rN   )r   r   r   r   rK   s    r8   restore_widget_attrsz"FieldRenderer.restore_widget_attrs  s!     .3355r:   Nc                    || j         }|j                            dd          }t          (t	          |t                    rt          |dd          }nt	          || j                  s5t          |dd          }t          ||                                           }nOt	          |t                    rt          |dd          }n't	          |t                    rt          |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)prependrD   form-check-inputzform-select)r   r   r3   r#   rW   r!   WIDGETS_NO_FORM_CONTROLrG   r   r   r   rl   rw   r_   is_boundr   )r5   r   classess      r8   add_class_attrszFieldRenderer.add_class_attrs  sK   >[F,""7B//%1jIc6d6d1#G-BDQQQGGFD$@AA 	J#G^TJJJG#GT-@-@-B-BCCGG.. 	J#G-?NNNGG'' 	J#G]DIIIG: 	I# G'1EFFz' I'1GHH 'Wr:   c                     || j         }|j                            d| j                  }|r"| j        rt          |          r||j        d<   d S d S d S d S )Nr   )r   r   r3   r   r/   r   )r5   r   r   s      r8   add_placeholder_attrsz#FieldRenderer.add_placeholder_attrs*  sz    >[Fl&&}d6FGG 	64/ 	64Nv4V4V 	6*5FL'''	6 	6 	6 	6 	6 	6r:   c                     || j         }t          |t                    sD|j                            dt          t          | j                                      |j        d<   d S d S )Ntitle)r   rW   r   r   r3   r   r   r   )r5   r   s     r8   add_help_attrszFieldRenderer.add_help_attrs2  se    >[F&-00 	c$*L$4$4WfZPTP_E`E`>a>a$b$bFL!!!	c 	cr:   c                     | j         r| j        j        }n| j        g}|D ]A}|                     |           |                     |           |                     |           Bd S rN   )r   r   widgetsr   r   r   )r5   r   r   s      r8   add_widget_attrszFieldRenderer.add_widget_attrs8  sz     	$k)GG{mG 	( 	(F  (((&&v...''''	( 	(r:   c                 f   t          ||                                           }dd                    |          fddd                    | j                  fdg}|D ]\  }}|                    ||          }t          |d	
          }|                    dd|i          }|r|                    d          D ]k}	|	j        	                    dg           dgz   |	j        d<   	 |	j
        j        	                    dg           dgz   |	j
        j        d<   \# t          $ r Y hw xY wt          |          S )Nz<ulz<div class="{classes}")r   )z</ul></div>z<liz<div class="{form_check_class}")r|   )z</li>r   zhtml.parser)featuresdivr   r   form-check-labelr   )r!   rG   formatr|   replacer   findfind_allr   r3   inputAttributeErrorstr)
r5   htmlklassr   mappingkvsoupenclosing_divr   s
             r8   list_to_classzFieldRenderer.list_to_classB  sc   t':':'<'<==,33G3DDE5<<dNc<dde	
  	& 	&DAq<<1%%DD
 TM:::		%'7);<< 	&//88  ',{w'C'CGYFZ'ZG$161B1F1FwPR1S1SWiVj1jEK%g..%   D4yys   "1D
D! D!c           
          |t          | j        j        | j        j        t	          t          | j                            d          z   S )Nr   )content	label_forlabel_titler+   )r   r   r   id_for_labelr   r   r   r5   r   s     r8   add_checkbox_labelz FieldRenderer.add_checkbox_label[  sH    lJ$j-z$/::;;*	
 
 
 
 	
r:   c                     d}d}|                     d|dz             }|                     dd|z             }d                    |          S )Nz<div class="col-4">r   z<selectz	</select>z4<div class="row bootstrap5-multi-input">{html}</div>r   )r   r   )r5   r   div1div2s       r8   fix_date_select_inputz#FieldRenderer.fix_date_select_inputc  sT    $||Iti'788||Kt);<<ELLRVLWWWr:   c                     d|z   }|S )Nz<br>rJ   r   s     r8   fix_file_input_labelz"FieldRenderer.fix_file_input_labelj  s    }r:   c                    t          | j        t                    r|                     |d          }nt          | j        t                    r|                     |d          }nt          | j        t
                    r|                     |          }nft          | j        t                    r| j        r| 	                    |          }n/t          | j        t                    r|                     |          }|S )Nzradio radio-successcheckbox)rW   r   r   r   r   r   r   r   r-   r   r   r   r   s     r8   post_widget_renderz FieldRenderer.post_widget_rendern  s    dk;// 		3%%d,ABBDD%;<< 	3%%dJ77DD%566 	3--d33DD]33 	3 	3**400DDY// 	3,,T22Dr:   c                 f    t          | j        t                    rd                    |          }|S )Nz$<div class="form-check">{html}</div>r   )rW   r   r   r   r   s     r8   wrap_widgetzFieldRenderer.wrap_widget{  s4    dk=11 	L :@@d@KKDr:   c                 j    |sdS |rd                     ||          }d                     ||          S )Nr(   z,<span class="{inner_class}">{content}</span>)inner_classr   z*<div class="{outer_class}">{content}</div>)outer_classr   )r   )r5   r   r   r   s       r8   make_input_group_addonz$FieldRenderer.make_input_group_addon  sL     	2 	vDKKXcmtKuuG;BB{dkBlllr:   c                     t           t          t          t          t          t
          f}| j        s| j        ot          | j	        |          S rN   )
r   r   r	   r   r   r
   r   r   rW   r   )r5   allowed_widget_typess     r8   is_input_groupzFieldRenderer.is_input_group  s:     )=)[RXZde!5T%5h:dkSg;h;hhr:   c                    | j         r|                     | j        d| j                  }|                     | j        d| j                  }|                     d                    |||                    }d                    |          }|S )Nzinput-group-prependzinput-group-appendz{before}{html}{after})beforer   afterz%<div class="input-group">{html}</div>r   )r   r   r   r   r   r   append_errorsr   )r5   r   r   r   s       r8   make_input_groupzFieldRenderer.make_input_group  s     	M001HJ_aearssF//0FH\^b^nooE%%&=&D&DFY]ej&D&k&kllD:AAtALLDr:   c                 p    | j         pd }|r*t          d| j        || j        | j        d          }||z  }|S )Nzbootstrap5/field_help_text.html)r   r   r'   r,   rm   )r   r"   r   r'   r,   )r5   r   r   	help_htmls       r8   append_helpzFieldRenderer.append_help  sZ    _,
 
	,1!Z","k!%	   I IDr:   c                 l    | j         }|r*t          d| j        || j        | j        d          }||z  }|S )Nzbootstrap5/field_errors.html)r   r   r'   r,   rm   )r   r"   r   r'   r,   )r5   r   r   errors_htmls       r8   r   zFieldRenderer.append_errors  sV    ( 
	 ..!Z$0"k!%	   K KDr:   c                     t          | j        t                    r|S | j        s|                     |          }|                     |          S rN   )rW   r   r   r   r   r   r   s     r8   append_to_fieldzFieldRenderer.append_to_field  sO    dk=11 	 K" 	,%%d++D%%%r:   c                     t          | j        t                    s|S |                     |          }|                     |          S rN   )rW   r   r   r   r   r   s     r8   append_to_checkbox_fieldz&FieldRenderer.append_to_checkbox_field  sB    $+}55 	K!!$''%%%r:   c                 <    | j         }|s| j        dk    r| j        }|S )N
horizontal)r*   r'   r2   )r5   r*   s     r8   get_field_classzFieldRenderer.get_field_class  s,    & 	6t{l::5Kr:   c                 `    |                                  }|rd                    ||          }|S )Nz'<div class="{field_class}">{html}</div>)r*   r   )r   r   )r5   r   r*   s      r8   
wrap_fieldzFieldRenderer.wrap_field  s;    **,, 	h<CCP[bfCggDr:   c                     | j         }|s"| j        dk    r| j        }t          |d          }t	          |          }|sd}| j        r| j        dk    rt          |d          }|S )Nr   zcol-form-labelz
form-labelvisually-hidden)r+   r'   r1   r!   r    r-   )r5   r+   s     r8   get_label_classzFieldRenderer.get_label_class  s    & 	Gt{l::5K'5EFFK -- 	'&K 	H$/5F"F"F'5FGGKr:   c                     | 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-   rW   r   r   r   r   r'   r   )r5   r   s     r8   	get_labelzFieldRenderer.get_label  s^    ?f$$4]33 	%EEJ$E;,&&u&X&&&r:   c                     |                                  }|r1t          || j        j        |                                           |z   }|S )N)r   r+   )r   r   r   r   r   )r5   r   r   s      r8   	add_labelzFieldRenderer.add_label  sK       	u1HVZVjVjVlVlmmmpttDr:   c                 B   | j         }| j        j        r| j        rt	          || j                  }n&| j        j        j        rt	          || j                  }| j        j        j        r| j	        rt	          || j	                  }| j
        dk    rt	          |d          }|S )Nr   row)r)   r   rl   rw   r!   r_   r   r   requiredrx   r'   )r5   r)   s     r8   get_form_group_classz"FieldRenderer.get_form_group_class  s    0: 	[# Y#01A4CW#X#X z' [#01A4CY#Z#Z :$ 	X)@ 	X,-=t?VWW;,&&,-=uEEr:   c                 F    t          ||                                           S rN   )r   r  r   s     r8   wrap_label_and_fieldz"FieldRenderer.wrap_label_and_field  s     t'@'@'B'BCCCr:   c                    | j         j        | j                            dd                              d          v rdS | j         j        rt          | j                   S |                                  | j                             | j	        j
                  }|                                  |                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|S )N r(   ,)r   )r   namer.   r   splitr   r    r   	as_widgetr   r   r   r   r   r   r   r   r   r   r  r   s     r8   rL   zFieldRenderer._render  s-   :?dl223;;AA#FFFF2: 	*dj)))z##$+*;#<<!!###&&t,,,,T22%%$$T**##D))t$$~~d##((..r:   rN   )&rP   rQ   rR   rS   r   r   r   r   r   r9   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  rL   rr   rs   s   @r8   r   r      s       !!  -k;QSYZ8) 8) 8) 8) 8)t6 6 6( ( ( (26 6 6 6c c c c( ( (  2
 
 
X X X      m m m i i Xi      
& 
& 
&& & &    
 
 
	 	 	       D D D      r:   r   c                   D     e Zd ZdZd Z fdZd Zd Z fdZd Z	 xZ
S )InlineFieldRendererzInline field renderer.c                     | j         j                            dd          }|dd                    d | j        D                       z   z  }|                                | j         j        d<   d S )Nr   r(   r  c                 ,    g | ]}t          |          S rJ   )r   )r   es     r8   r   z7InlineFieldRenderer.add_error_attrs.<locals>.<listcomp>  s    &P&P&Pz!}}&P&P&Pr:   )r   r   r3   rd   r   rC   )r5   field_titles     r8   add_error_attrsz#InlineFieldRenderer.add_error_attrs  sj    k'++GR88sSXX&P&Pd>O&P&P&PQQQQ%0%6%6%8%8'"""r:   c                 p    t                                                       |                                  d S rN   )rY   r   r  r5   rZ   s    r8   r   z$InlineFieldRenderer.add_widget_attrs!  s1      """r:   c                     |S rN   rJ   r   s     r8   r   z#InlineFieldRenderer.append_to_field%      r:   c                     | j         S rN   )r*   rK   s    r8   r   z#InlineFieldRenderer.get_field_class(  s    r:   c                 r    | j         t          k    rd| _         t                                                      S )Nzcol-auto)r)   r   rY   r  r  s    r8   r  z(InlineFieldRenderer.get_form_group_class+  s0     $444$.D!ww++---r:   c                 ,    t          | j        d          S )Nr   )r!   r+   rK   s    r8   r   z#InlineFieldRenderer.get_label_class0  s    T-/@AAAr:   )rP   rQ   rR   rS   r  r   r   r   r  r   rr   rs   s   @r8   r  r    s          9 9 9
           . . . . .
B B B B B B Br:   r  c                       e Zd ZdZd ZdS )HorizontalFieldRendererzHorizontal field renderer.c                     |S rN   rJ   r   s     r8   r   z,HorizontalFieldRenderer.fix_file_input_label8  r  r:   N)rP   rQ   rR   rS   r   rJ   r:   r8   r  r  4  s)        $$    r:   r  )2bs4r   django.formsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   django.utils.htmlr   r   r   django.utils.safestringr   	bootstrapr   
exceptionsr   rb   r   r   r   r   r   r   textr    utilsr!   r"   django.contrib.auth.formsr#   RuntimeErrorobjectr%   rU   ru   r   r  r  rJ   r:   r8   <module>r)     s                                         " E D D D D D D D D D - - - - - - , , , , , , & & & & & &                      6 6 6 6 6 6 6 6&DDDDDDD & & &!%&*) *) *) *) *)6 *) *) *)Z1c 1c 1c 1c 1cl 1c 1c 1ch@P @P @P @P @P< @P @P @PFH H H H HL H H HV
B B B B B- B B B6    m     s   $A+ +A54A5