a
    7ñ»j¢  ã                   @   s,   d Z ddlmZ G dd„ deƒZdd„ ZdS )z*Convert CSS selectors into XPath selectorsé    )ÚGenericTranslatorc                       sJ   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚConvertibleToCssTranslatorzàAn implementation of :py:class:`cssselect.GenericTranslator` with
    XPath output that more readily converts back to CSS selectors.
    The simplified examples in https://devhints.io/xpath were used as a
    reference here.ú//c                    s   t ƒ  ||¡S )N)ÚsuperÚcss_to_xpath)ÚselfÚcssÚprefix©Ú	__class__© úHE:\soccer\ml_env\Lib\site-packages\seleniumbase/fixtures/css_to_xpath.pyr      s    z'ConvertibleToCssTranslator.css_to_xpathc                 C   s   |  d||  |¡f ¡ |S )Nz%s=%s©Úadd_conditionÚxpath_literal©r   ÚxpathÚnameÚvaluer   r   r   Úxpath_attrib_equals   s    z.ConvertibleToCssTranslator.xpath_attrib_equalsc                 C   s<   ddl m} ||ƒr.| d||  |¡f ¡ n
| d¡ |S )Nr   )Úis_non_whitespaceúcontains(%s, %s)Ú0)Úcssselect.xpathr   r   r   )r   r   r   r   r   r   r   r   Úxpath_attrib_includes   s    ÿ
z0ConvertibleToCssTranslator.xpath_attrib_includesc                 C   s,   |r|  d||  |¡f ¡ n
|  d¡ |S )Nr   r   r   r   r   r   r   Úxpath_attrib_substringmatch   s    ÿ
z6ConvertibleToCssTranslator.xpath_attrib_substringmatchc                 C   s   |   |j¡}|  |d|j¡S )Nz@class)r   Úselectorr   Ú
class_name)r   Zclass_selectorr   r   r   r   Úxpath_class'   s    ÿz&ConvertibleToCssTranslator.xpath_classc                 C   s   |  d|¡S )z;right is a child, grand-child or further descendant of leftr   )Újoin)r   ÚleftÚrightr   r   r   Úxpath_descendant_combinator-   s    z6ConvertibleToCssTranslator.xpath_descendant_combinator)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r"   Ú__classcell__r   r   r
   r   r      s   
r   c                 C   s   t ƒ  | ¡}|S )z¥Convert CSS Selectors to XPath Selectors.
    Example:
        convert_css_to_xpath('button:contains("Next")')
        Output => "//button[contains(., 'Next')]"
    )r   r   )r   r   r   r   r   Úconvert_css_to_xpath2   s    r(   N)r&   r   r   r   r(   r   r   r   r   Ú<module>   s   -