
    	eU$                         d dl Z d dlZd dlmZ d dlmZ d dlmc mZ	 d dl
mZ d dlmZ d dlmZ ddlmZ d	Zd
ZdZdZ G d de          Zd Z G d de          Z G d de          ZdS )    N)defaultdict)
HTMLParser)
ModelEvent)	DataModel)	LayoutDOM   )HTMLBoxz{%-? endfor -?%}z:{%-? for (\s*[A-Za-z_]\w*\s*) in (\s*[A-Za-z_]\w*\s*) -?%}zY{%-? for \s*[A-Za-z_]\w*\s*, (\s*[A-Za-z_]\w*\s*) in (\s*[A-Za-z_]\w*\s*)\.items\(\) -?%}zF{%-? for (\s*[A-Za-z_]\w*\s*) in (\s*[A-Za-z_]\w*\s*)\.values\(\) -?%}c                   2     e Zd Zd fd	Zd Zd Zd Z xZS )ReactiveHTMLParserTc                    t                                                       || _        || _        t	          t
                    | _        i | _        g | _        g | _	        t          j        d          | _        t          j        d          | _        d | _        g | _        d| _        i | _        t	          t
                    | _        d S )Nz\$\{[^}]+\}z\{\{[^}]+\}\}F)super__init__templateclsr   listattrschildrennodesloopedrecompile_template_re_literal_re_current_node_node_stack	_open_forloop_maploop_var_map)selfr   r   	__class__s      :lib/python3.11/site-packages/panel/models/reactive_html.pyr   zReactiveHTMLParser.__init__   s      &&

J~66:&677!'--    c                    t          |          }|                    dd           }d | _        | j                            ||f           |sL|                                D ]4\  }}|	g g }}| j                            |          D ]p}|dd         }|                    d          r"|| j	        j
        v r|                    |           Ft          | j	        |          r|                    |           q|r4t          d| d| d|d          d	| d
| d| d|d          d| d          |rd|                    d|d          dd|d          d          }	t          d| d| d|d          d| d
| d| d| d| d| d| d|	 d| d          6d S || j        v rt          d| d          || _        | j                            |           |                                D ]\  }}|g }
| j                            |          D ]<}|dd                             d          s|
                    |dd                    =|
r7| j        |                             ||
|                    dd          f           d S )Nid   model.z?DOM nodes with an attached callback must declare an id. Found <z> node with the `z` callback referencing the `r   z*` method. Add an id attribute like this: <z id="z" z="${z}>...</z>.${}z{{z}}zHDOM node with a linked parameter declaration must declare an id. Found <z` attribute referencing the `z5` parameter. Either declare an id on the node, i.e. <z="z">...</z&>, or insert the value as a literal: < zMultiple DOM nodes with id="z" found.{)dictpopr   r   appenditemsr   findall
startswithr   paramhasattr
ValueErrorreplacer   r   )r   tagr   dom_idattrvalueparamsmethodsmatchliteralmatchess              r!   handle_starttagz"ReactiveHTMLParser.handle_starttag'   s   U4&&!f...  	${{}}  e="$b!.66u== . .E!!B$KE''11 ! ..e,,,, 511 .u--- $W),W W?CW W,3AJW W  	W W (+	W W 04	W W <C1:	W W PS	W W W    
#mm,?&),?,?,?AWq	AWAWAWXXG$D69D D $D DCI!9D D "%	D D -0	D D 59	D D >C	D D MP	D D  D D #'D D ,3D D =@D D D  
 FTZLFLLLMMM#
&!!! ;;== 	U 	UKD%}G*22599 0 0QrT{--h77 0NN52;/// U
6"))4%--c:R:R*STTT	U 	Ur"   c                 z    | j                                          | j         r| j         d         d         nd | _        d S )Nr&   r   )r   r-   r   )r   r6   s     r!   handle_endtagz ReactiveHTMLParser.handle_endtag]   s?    8<8HRT-b1!44dr"   c           	         | j         sd S | j        }g }| j                            |          D ]}|dd                                         }|dd         | j        |         vr(| j        |                             |dd                    |                    d          r|                    d|z             |                    d|z             g }| j                            |          D ]d}|dd                                         }|                    d          r|                    d|z             L|                    d|z             et          j        t          |          }t          j        t          |          }t          j        t          |          }	t          |          t          |          z   t          |	          z   }
|
d	k    r|
r| j        rt          d
          |
rMd |||	fD             d         }|d         \  }}|| j        j        v rt          d| d|           || j        |<   t          j        d|          }t          j        t(          |          }|rH| j        :| j        d         d         }t          d| d|                                           d| _        |r3|
r*|                                |                                k    rd| _        | j        ru|rst          |          d	k    r#|d         dd                                         }nd }|r9|| j        v r0| j        r)| j        |         }| j                            ||f           | j        r|sd S t          |          d	k    r#|d         dd                                         }n@|D ];}| j        j                            |d          }|dk    rt          d| d          <d }|r|                                | j        v sd|v r| j        r|                                | j        v r@| j        |                                         }d|z  ||                    d|z            <   |}nd|v r|                    d          \  }}|                    dd          }| j                            ||f           | j        j                            |d          }|| j        j        v r|dk    r|| j        |<   d S g }|D ]}|dd         }|                    d          r"|| j        j        vrRd|vrNt?          j         |tC          | j        j                            }t          | j        j"         d| d| d          |                    |           | j#        |                             d||                    d d!          f           d S )"Nr%   r&   z.index0z	${%s }}]}z${%s}z	{{%s }}]}z{{ %s }}r   z6Nested for loops currently not supported in templates.c                     g | ]}||S  rE   ).0loops     r!   
<listcomp>z2ReactiveHTMLParser.handle_data.<locals>.<listcomp>   s    RRRTTRDRRRr"   r   zLoop variable zd clashes with parameter name. Ensure loop variables have a unique name. Relevant template section:

z{%-? forztLoops may only be used inside a DOM node with an assigned ID. The following loop could not be expanded because the <z)> node did not have an assigned id:

    TFmodelr   z$Cannot match multiple variables in 'z' mode.[z-{{ loop.index0 }} r'   .z- HTML template references unknown parameter 'z', similar parameters include r   r(   r+   )$r   r   r   r0   stripr   r.   endswithr   r   list_iter_revalues_iter_reitems_iter_relenr   r4   r   r2   r   searchendforr   startr   _child_configgetindexsplitr5   r   r1   difflibget_close_matchesr   __name__r   )r   datar7   r>   r<   varliteral_matches	list_loopvalues_loop
items_loopnloopsrG   objopen_forend_fornodeliteral_matchmode
loop_match_	templatesr:   s                         r!   handle_datazReactiveHTMLParser.handle_dataa   s]   } 	F#&..t44 	. 	.E"+##%%CQrT{$"3C"888!#&--eAbDk:::||I&& .{S01111w}----%--d33 	; 	;E!B$K%%''E~~i(( ;&&{U':;;;;&&zE'9:::: J|T22	j66Zt44
Y#k"2"22S__DA::&:T^:UVVV 		%RRij%IRRRSTUDAwHCdhn$$ 3S 3 3,03 3  
 "%DM#9[$//)FD)) 	"!)'+A. JMQJ J;?::<<J J  
 "DN 	#F 	#gmmoo8H8H&H&H"DN 	</ 	<?##q(( / 21R4 8 > > @ @ $ <-4="@"@dn"@ $m <""FM#:;;;" 	w 	Fw<<1AJqt$**,,EE  [ [x-11%AA:%%$%YD%Y%Y%YZZZ &E  	0ekkmmt}44u$.{{}}--!]5;;==9
:AJ:Ngo667" ;;s++q^^$8"==FK///x%))%99DHN""tz'9'9$)DM&!F	 		$ 		$E!B$KE)) DHN**s%/?/? 25$tx~:N:NOO DH$5 "6 "67<"6 "6,2"6 "6 "6 7 7 7 U####
6!!:y$,,tS:Q:Q"RSSSSSr"   )T)r\   
__module____qualname__r   r?   rA   rm   __classcell__r    s   @r!   r   r      s        . . . . . . 4U 4U 4UlS S ShT hT hT hT hT hT hTr"   r   c                 V    t                      }|                    |            |j        S )N)r   feedr   )htmlps     r!   
find_attrsrv      s#    AFF4LLL7Nr"   c                   $     e Zd ZdZd fd	Z xZS )DOMEvent	dom_eventNc                 h    || _         || _        t                                          |           d S )N)rI   )r]   rg   r   r   )r   rI   rg   r]   r    s       r!   r   zDOMEvent.__init__   s2    		u%%%%%r"   )NN)r\   rn   ro   
event_namer   rp   rq   s   @r!   rx   rx      sB        J& & & & & & & & & &r"   rx   c                   0    e Zd Z ej        ej         ej         ej        ej         ej        ej                  ej                                      Z ej        ej         ej         ej        ej        ej                                      Z	 ej        ej         ej
         ej         ej
         ej        e          ej                            ej                            Z ej        e          Z ej        ej         ej        ej        ej                            Z ej                    Z ej        ej                  Z ej        ej                  Z ej        ej         ej        ej                            Z fdZ xZS )ReactiveHTMLc                 z    d|vrd|v rt          |d                   |d<    t                      j        di | d S )Nr   rt   rE   )rv   r   r   )r   propsr    s     r!   r   zReactiveHTML.__init__   sN    %FeOO'f66E'N!!5!!!!!r"   )r\   rn   ro   bpDictStringListTupler   	callbacksEitherInstancer   r   r   r]   Booleventsrt   r   r   scriptsr   rp   rq   s   @r!   r}   r}      s       BGBIwrwxrx	72729;M;Mry'Y'YZZ[[E	727828BIry+I+I#J#JKKIrwry)")GBGIBIkbk)>T>TVXV_4`4`,a,acecl"m"mnnH2;y!!DRWRY	27 ; ;<<F29;;DRWRYFBGBIEbgbi!3!344G" " " " " " " " "r"   r}   )rZ   r   collectionsr   html.parserr   bokeh.core.propertiescore
propertiesr   bokeh.eventsr   bokeh.modelr   bokeh.modelsr   layoutr	   rT   rO   rQ   rP   r   rv   rx   r}   rE   r"   r!   <module>r      sZ    				 # # # # # # " " " " " " " " " " " " " " " # # # # # # ! ! ! ! ! ! " " " " " "      	LlZtT tT tT tT tT tT tT tTp  & & & & &z & & &" " " " "7 " " " " "r"   