
    9iiS                     *   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,y)    )	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                   d    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y)BaseRendererzA content renderer.z#django_bootstrap5/field_errors.htmlz&django_bootstrap5/field_help_text.htmlz"django_bootstrap5/form_errors.htmlc                    |j                  dd      | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        |j                  d	d      | _        |j                  d
d      | _	        |j                  dd      | _
        t        |j                  dd      t              | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dt        d            | _        |j                  dd       | _        |j                  dd       | _        |j                  dd       | _        |j                  dd      | _        y )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     R/var/www/apihucms/venv/lib/python3.12/site-packages/django_bootstrap5/renderers.py__init__zBaseRenderer.__init__!   s   jj2.#ZZ9N9_`$*JJ/EG\]sGt$u!!::mR8!::mR8K6 **\48zz)R0%zz*;TBvzz&"5wG	&,jj$&;<T&U'
# '-jj$&;<T&U'
#  &zz*;=RSd=ef$jj)9;PQa;bc-3ZZ+-BCb-c.
* #)**-ACXYmCn"o&,jj$&;<T&U'
#  &zz*;TB"(**-A4"H!',?!F &

+=| 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                 P    | j                   dv rt        | j                   |      S 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$    ;?99;T~dii7\Z\\rB   c                    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   sM   
dkk
T//
 4++
 4++	

 
 $//
 t||
 t33
 DII
 %d&A&A
 %d&A&A
 ,T-O-O
 t33
 d11
 !$"9"9
  t33!
"  !7!7#
$ #'"9"9 $ 5 5'
* rB   c                      y)zRender to string.r&    rF   s    r@   renderzBaseRenderer.renderl   s    rB   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#      sl     BG?M> ) ) + + ' ']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                 h    t        |t              st        d      || _        t	        |   di | y )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   s0    ';/XYY"6"rB   c                 @    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677rB   c                     t        d      }| j                         }| j                  j                  D ]  }|t	        |fi |z  } |S Nr&   )r   rT   re   formsr   )r>   rendered_formsr?   forms       r@   render_formszFormsetRenderer.render_forms~   sJ    "2"LL&& 	:Dk$9&99N	:rB   c                 6    | j                   j                         S N)re   non_form_errorsrF   s    r@   get_formset_errorsz"FormsetRenderer.get_formset_errors   s    ||++--rB   c                     | j                         }|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   sK    002')), LL"kk  }rB   c                 v    t        | j                         dz   | j                         | j                               S )Nz{}{})r   rj   ry   rp   rF   s    r@   rW   zFormsetRenderer.render   s2    46686A4CUCUCWY]YjYjYlmmrB   )rX   rY   rZ   r[   rA   rj   rp   rt   ry   rW   __classcell__rg   s   @r@   ra   ra   q   s%    ##8.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                 h    t        |t              st        d      || _        t	        |   di | y )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__   s0    $)RSS	"6"rB   c                 |    t        d      }| j                         }| j                  D ]  }|t        |fi |z  } |S rl   )r   rT   ro   r   )r>   rendered_fieldsr?   fields       r@   render_fieldszFormRenderer.render_fields   sD    #B-"YY 	=E|E<V<<O	=rB   c                 ~    g }| j                   D ]+  }|j                  r|j                  s||j                  z  }- |S rr   )ro   	is_hiddenrv   )r>   form_errorsr   s      r@   get_fields_errorszFormRenderer.get_fields_errors   s=    YY 	,E??u||u||+	, rB   c                 L   d }|dk(  r,| j                         | j                  j                         z   }n5|dk(  r| j                         }n|dk(  r| j                  j                         }|r0t        | j                  || j                  | j
                  |d      S t        d      S )Nall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2TYY5O5O5QQKX002K\!))446K'))#.		T[[bfg 
 }rB   c                 b    | j                  | j                        }| j                         }||z   S rr   )ry   r;   r   )r>   rv   r   s      r@   rW   zFormRenderer.render   s0    ##D$9$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	        |   di | |j                  j                  | _        t        |j                  j                  t              | _        | j                  j                  j                         | _        | j                  r!|j                  rt        |j                        nd| _        |j                  D cg c]  }t!        t        |             c}| _        t        |j%                  d| j&                              | _        |j%                  d| j                  j                  j+                  dd            | _        |j%                  d| j                  j                  j+                  dd            | _        |j%                  d| j                  j                  j+                  dd            | _        |j%                  d| j                  j                  j+                  dd            | _        |j%                  d	d       }| t5        |j6                  d	t9        d	            n|| _        |j%                  d
d       }| t5        |j6                  d
t9        d
            n|| _        | j                  j6                  j>                  rd| _        |j%                  dd       }|&t5        |j6                  dt9        d            | _         y || _         y c c}w )Nz;Parameter "field" should contain a valid Django BoundField.r&   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   r   field_errorsr=   default_placeholderr   popr   r   r   r   getattrro   r   r8   r9   empty_permittedr:   )r>   r   r?   errorr8   r9   r:   rg   s          r@   rA   zFieldRenderer.__init__   sw   %,YZZ
"6"kk(()%++*<*<kJ![[..3358<5??EOO4`bPUP\P\]u/
50AB]%fjj@X@X&YZ"JJ~t{{7H7H7L7L^]_7`a!::mT[[5F5F5J5J=Z\5]^"(** $++"3"3"7"78LN`"a#
 "(!2!2!6!67JL^!_"

 !**%6= & EJJ 13HIZ3[\  	 $ZZ(<dC ") EJJ 46KL`6ab# 	
 ::??**&(D#"JJ':DA !( EJJ 35JK^5_` 	 # 	? ^s   "K:c                     t         |   xr9 | j                  | j                        xr | j                   xr | j
                   S rr   )rf   rG   can_widget_floatr   r   r   )r>   rg   s    r@   rG   zFieldRenderer.is_floating   sM     G %%%dkk2%%%%% $$$		
rB   c                 H    t        d      r| j                  j                  S dS )z%Return default placeholder for field.r.   r&   )r   r   labelrF   s    r@   r   z!FieldRenderer.default_placeholder  s"     $99J#KtzzSQSSrB   c                 V    | j                   j                         | j                  _        y rr   )r   r   r   r   rF   s    r@   restore_widget_attrsz"FieldRenderer.restore_widget_attrs  s     ..335rB   c                 >    t        |t              r|j                  S 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$=v  G4GrB   c                     |xs | j                   }t        |t              r| j                  |      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  sF    &4;;fe$--f5 	: 	 	 &(++rB   c                 *    | j                  |      dk7  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    ))&1W<<rB   c                     | j                  |      ryt        |t              r,| j                  t        k(  xr t        |t
        t        f       S y)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"  sD    &&v.ff%99,fZYdHe5f1ffrB   c                 6   || j                   }d}g }|j                  j                  dd      t        | j                        g}t
        "t        |t
              r|j                  d       nt        |t              r|j                  d       d}nt        |t              r|j                  d       ngt        |t        t        f      rQ| j                  |      }|dk(  r|j                  d       n)|j                  d	       |d
k(  r|j                  d       d	}|r)|j                  t        | j                  |ddg             | j                  r0| j!                  |      r|j                  | j#                                ||z   }t%        | |j                  d<   y)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*  sR   >[[F<<##GR0*T=M=M2NO%1jIc6dMM/0'MM-('K.MM,- 1233F;JW$l+n-(MM"67,NN>$))KtUYl[\&&4+V+VW]+^NN4BBDE7" 17 ;WrB   c                     || j                   }|j                  j                  d| j                        }|r;| j                  r.t        |      r"t        t        |            |j                  d<   yyyy)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  sb    >[[Fll&&}d6F6FG4//4Nv4V*<Z=T*UFLL' 5W/;rB   c                 B   | j                   r| j                  j                  }n| j                  g}|D ]j  }| j                  |       | j	                  |       t        |t        t        f      rt        |t              sd|_	        St        |t              sdd|_	        l y)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    kk))G{{mG 	]F''/&&v.&;0F"GHQ[.R (U$F$67'\$	]rB   c                 "   t        | j                        g}| j                  s|j                  d       t        | S t	        | 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$456  !23 !-00 $++}5%7"%6"%6t7R7RTd%e"%1"/0=@M -00rB   c                     | j                          | j                  j                  | 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  sA    ZZ))0A0A)B
!!#rB   c                     | j                   dk(  rdn| j                  j                  }| j                  j                  }|rt	        ||| j                  |            }|S )zReturn value for label.r   r&   rI   )	label_forr*   )r,   r   r   id_for_labelr   r   )r>   rI   
label_htmlr   s       r@   get_label_htmlzFieldRenderer.get_label_html}  sY    ??f4R$**:J:J
JJ++	%# 00J0GJ
 rB   c           	         | j                   xs d}|r{| j                  j                  | j                  j                        }|j                  d      }t        | j                  | j                  ||| j                  | j                  d      S y)zReturn HTML for help text.r&   zaria-describedby)r   r   id_help_textr%   r+   rw   )
r   r   build_widget_attrsr   r   r=   r   r]   r%   r+   )r>   r   widget_attrsaria_describedbys       r@   get_help_htmlzFieldRenderer.get_help_html  s~    NN(b	::889J9JKL+//0BC'--!ZZ!*$4"kk!%	 	 rB   c                     | j                   }|r:t        | j                  | j                  || j                  | j
                  d      S y)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  sH    (('**!ZZ$0"kk!%	  rB   c                 `    | j                   ry| j                  j                  j                  ryy)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%    ZZ__%%rB   c                 "    | j                   xs 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|j                  d       | j                  dk(  r|j                  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  sI    .(*NN=)8+NN./ '**rB   c                    g }| j                   r;|j                  | j                                |j                  | j                         n8| j                  r|j                  d       |j                  | j
                         | j                  r|j                  d       | j                  j                  r|j                  | j                         n;| j                  j                  j                  r|j                  | j                         | j                  j                  j                  r|j                  | 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    >>""4#>#>#@A""4#<#<=!!&&u-""4#5#56""?3 ::""4#7#78ZZ__%%""4#9#9:::$$""4#:#:; /22rB   c                 R    t        | j                  t              xs | 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I9I9IIrB   c                    | j                   j                  | j                  j                  dd      j	                  d      v rt        d      S | j                   j                  rt        | j                         S | j                         }| j                         rA| j                         }||z   }t        d      }t        | j                  | j                        }n(| j                  | j                        }| j                  }| j                         }| 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|rKd}| j.                  r+| j1                         rt        |d      }|xs t        d      }t)        d	|||||      }d}t3        | j4                  t6              r!t)        d
| j9                         |||      }d}d}t)        d|||      }	| j                  rt)        d||	      }	t)        d| j;                         ||	      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  sd   ::??dll223;AA#FFR= ::djj))##%""$'')EEMEbME01L1LdNpNpq''43E3E'FE#::!!#%%'&&(&&.#00 ((   <d>U>UW[WhWhi 
 %%-".. ''   <d>T>TVZVfVfg 
 {'..43Z3Z3\/9IJG#?y'?F#$Dg|]bdoqwxdkk=1 >@Y@Y@[]bdjlpqEFD%05&$%O")4*,<>X*& V 44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    !-
^ 
 
 T T6H, =!<FV] 1"
$3+34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      s{   
 
 
 A @ I I - ' " : : C C  ' c cU Up%nl %nP+< +\T
L T
rB   