o
    Pf                     @   sx   d dl mZmZ d dlmZmZmZmZmZ d dl	m
Z
 d dlmZ G dd deZG dd deZG d	d
 d
eZdS )    )ListTuple)CssLinkElementFigureJavascriptLinkMacroElement)Template)JsCodec                	       s   e Zd ZU dZg Zeeeef  ed< g Z	eeeef  ed< d fddZ
ded	efd
dZded	efddZded	edeeeef  fddZ  ZS )
JSCSSMixinz6Render links to external Javascript and CSS resources.
default_jsdefault_cssreturnNc                    sx   |   }t|tsJ d| jD ]\}}|jjt||d q| jD ]\}}|jjt||d q"t	 j
di | d S )Nz8You cannot render this Element if it is not in a Figure.)name )get_root
isinstancer   r   header	add_childr   r   r   superrender)selfkwargsfigurer   url	__class__r   [/home/deployuser/azure_apps/autowriter/venv/lib/python3.10/site-packages/folium/elements.pyr      s   zJSCSSMixin.renderr   r   c                 C      |  ||| j dS )z Add or update css resource link.N)	_add_linkr   r   r   r   r   r   r   add_css_link      zJSCSSMixin.add_css_linkc                 C   r   )zAdd or update JS resource link.N)r   r   r    r   r   r   add_js_link!   r"   zJSCSSMixin.add_js_linkdefault_listc                 C   sB   t |D ]\}}|d |kr||f||<  dS q|||f dS )z^Modify a css or js link.

        If `name` does not exist, the link will be appended
        r   N)	enumerateappend)r   r   r   r$   ipairr   r   r   r   %   s   zJSCSSMixin._add_link)r   N)__name__
__module____qualname____doc__r   r   r   str__annotations__r   r   r!   r#   r   __classcell__r   r   r   r   r   	   s   
 *r   c                       s2   e Zd ZdZedZdedef fddZ  Z	S )EventHandlera  
    Add javascript event handlers.

    Examples
    --------
    >>> import folium
    >>> from folium.utilities import JsCode
    >>>
    >>> m = folium.Map()
    >>>
    >>> geo_json_data = {
    ...     "type": "FeatureCollection",
    ...     "features": [
    ...         {
    ...             "type": "Feature",
    ...             "geometry": {
    ...                 "type": "Polygon",
    ...                 "coordinates": [
    ...                     [
    ...                         [100.0, 0.0],
    ...                         [101.0, 0.0],
    ...                         [101.0, 1.0],
    ...                         [100.0, 1.0],
    ...                         [100.0, 0.0],
    ...                     ]
    ...                 ],
    ...             },
    ...             "properties": {"prop1": {"title": "Somewhere on Sumatra"}},
    ...         }
    ...     ],
    ... }
    >>>
    >>> g = folium.GeoJson(geo_json_data).add_to(m)
    >>>
    >>> highlight = JsCode(
    ...     """
    ...    function highlight(e) {
    ...        e.target.original_color = e.layer.options.color;
    ...        e.target.setStyle({ color: "green" });
    ...    }
    ... """
    ... )
    >>>
    >>> reset = JsCode(
    ...     """
    ...    function reset(e) {
    ...       e.target.setStyle({ color: e.target.original_color });
    ...    }
    ... """
    ... )
    >>>
    >>> g.add_child(EventHandler("mouseover", highlight))
    >>> g.add_child(EventHandler("mouseout", reset))
    z
        {% macro script(this, kwargs) %}
            {{ this._parent.get_name()}}.on(
                {{ this.event|tojson}},
                {{ this.handler.js_code }}
            );
        {% endmacro %}
        eventhandlerc                    s    t    d| _|| _|| _d S )Nr0   )r   __init___namer1   r2   )r   r1   r2   r   r   r   r3   v   s   

zEventHandler.__init__)
r)   r*   r+   r,   r	   	_templater-   r
   r3   r/   r   r   r   r   r0   3   s    7r0   c                       s2   e Zd ZdZedZdedef fddZ  ZS )ElementAddToElementz4Abstract class to add an element to another element.z
        {% macro script(this, kwargs) %}
            {{ this.element_name }}.addTo({{ this.element_parent_name }});
        {% endmacro %}
    element_nameelement_parent_namec                    s   t    || _|| _d S )N)r   r3   r7   r8   )r   r7   r8   r   r   r   r3      s   

zElementAddToElement.__init__)	r)   r*   r+   r,   r	   r5   r-   r3   r/   r   r   r   r   r6   }   s    r6   N)typingr   r   branca.elementr   r   r   r   r   jinja2r	   folium.utilitiesr
   r   r0   r6   r   r   r   r   <module>   s    *J