o
    OygÇ  ã                   @   sV  d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl mZ! ddgZ"ej#dd� e $e%¡Z&ej'r{ej'nej(Z)e& *e)¡ dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/G dd„ deƒZ0G dd „ d e0ej1ƒZ2dS )!z 
TinyMCE 4 forms widget

This TinyMCE widget was copied and extended from this code by John D'Agostino:
http://code.djangoproject.com/wiki/CustomWidgetsTinyMCE
é    N)Úsettings)Úfinders)ÚDjangoJSONEncoder)ÚTextareaÚMedia)Úflatatt)Ú	smart_str)Ú	mark_safe)Úescape)Úget_languageÚget_language_bidi)Úrender_to_string)Úreverse)Úwidgets)Újsminé   ÚTinyMCEÚrender_tinymce_init_jsz5[%(asctime)s] %(module)s: %(levelname)s - %(message)s)Úformatc                 C   s,   d  | ¡}tj dddd|¡}t |¡duS )z»
    Check if TinyMCE has a language file for the specified lang code

    :param language_code: language code
    :type language_code: str
    :return: check result
    :rtype: bool
    z{0}.jsÚtinymceÚjsÚlangsN)r   ÚosÚpathÚjoinr   Úfind)Úlanguage_codeÚfilenamer   © r   úF/var/www/html/raya/env/lib/python3.10/site-packages/tinymce/widgets.pyÚlanguage_file_exists#   s   
	r    c                  C   sV   t tƒ ptjƒ} t| ƒs| dd… } t| ƒsd} d| i}tƒ r%d|d< |S d|d< |S )z­
    Creates a language configuration for TinyMCE4 based on Django project settings

    :return: language- and locale-related parameters for TinyMCE 4
    :rtype: dict
    Né   ÚenÚlanguageÚrtlÚdirectionalityÚltr)Úconvert_language_coder   r   ÚLANGUAGE_CODEr    r   )r   Úconfigr   r   r   Úget_language_config1   s   ÿr*   c                  C   s°   i } t jrVddlm} |ƒ }t d |¡¡ g }tjD ]3\}}t	|ƒ}||vr-|dd… }||vr:t 
d |¡¡ q|  d¡du rE|| d< | d ||¡¡ qd	 |¡| d
< | S )zˆ
    Create TinyMCE spellchecker config based on Django settings

    :return: spellchecker parameters for TinyMCE
    :rtype: dict
    r   )Úlist_languageszEnchant languages: {0}Nr!   z$Missing {0} spellchecker dictionary!Úspellchecker_languagez{0}={1}ú,Úspellchecker_languages)Úmce_settingsÚUSE_SPELLCHECKERÚenchantr+   ÚloggerÚdebugr   r   Ú	LANGUAGESr'   ÚwarningÚgetÚappendr   )r)   r+   Úenchant_languagesÚ
lang_namesÚlangÚnamer   r   r   Úget_spellcheck_configF   s$   r<   c                 C   sB   |   d¡}zd |d |d  ¡ f¡W S  ty    |d  Y S w )zÙ
    Converts Django language codes "ll-cc" into ISO codes "ll_CC" or "ll"

    :param django_lang: Django language code as ll-cc
    :type django_lang: str
    :return: ISO language code as ll_CC
    :rtype: str
    ú-Ú_r   r   )Úsplitr   ÚupperÚ
IndexError)Údjango_langÚlang_and_countryr   r   r   r'   a   s   
	ÿr'   c                 C   sx   t jrd|vrd|d< t jrd|vrd|d< |r%|  dd¡d |¡ | d< tj| td�d	d
… }td||d|v dœd�S )aA  
    Renders TinyMCE.init() JavaScript code

    :param mce_config: TinyMCE 4 configuration
    :type mce_config: dict
    :param callbacks: TinyMCE callbacks
    :type callbacks: dict
    :param id_: HTML element's ID to which TinyMCE is attached.
    :type id_: str
    :return: TinyMCE.init() code
    :rtype: str
    Úfile_browser_callbackÚdjangoFileBrowserÚspellchecker_callbackÚtinymce4_spellcheckÚselectorÚtextareaz#{0})Úclsr   éÿÿÿÿztinymce/tinymce_init.jsÚ
__prefix__)Ú	callbacksÚtinymce_configÚis_admin_inline)Úcontext)	r/   ÚUSE_FILEBROWSERr0   r6   r   ÚjsonÚdumpsr   r   )Ú
mce_configrM   Úid_r)   r   r   r   r   q   s   þÿc                       sB   e Zd ZdZd‡ fdd„	Zddd„Zddd„Zed	d
„ ƒZ‡  Z	S )r   a  
    TinyMCE 4 widget

    It replaces a textarea form widget with a rich-text WYSIWYG `TinyMCE 4`_ editor widget.

    :param attrs: General Django widget attributes.
    :type attrs: dict
    :param mce_attrs: Additional configuration parameters for TinyMCE 4.
        They *amend* the existing configuration.
    :type mce_attrs: dict
    :param profile: TinyMCE 4 configuration parameters.
        They *replace* the existing configuration.
    :type profile: dict

    .. _TinyMCE 4: https://www.tinymce.com/
    Nc                    s@   t t| ƒ |¡ |pi | _tƒ | _|ptj ¡ }| j 	|¡ d S ©N)
Úsuperr   Ú__init__Ú	mce_attrsr<   Úprofiler/   ÚCONFIGÚcopyÚupdate)ÚselfÚattrsrY   rZ   Údefault_profile©Ú	__class__r   r   rX   Ÿ   s
   
zTinyMCE.__init__c                 K   s"   t |fi |¤Ž}|r| |¡ |S rV   )Údictr]   )r^   Ú
base_attrsÚextra_attrsÚkwargsÚ
attributesr   r   r   Úbuild_attrs¦   s   
zTinyMCE.build_attrsc              	   C   sÌ   |d u rd}t |ƒ}|  | j|¡}||d< | dd¡d  ¡ |d< | j ¡ }| | j¡ d|vr6| t	ƒ ¡ | d¡rFd 
t|ƒt|ƒ¡}n
d 
t|ƒt|ƒ¡}|d	 
tt|tj ¡ |d
 ƒƒ¡7 }t|ƒS )NÚ r;   Úclassz tinymce4-editorr#   Úinlinez<div{0}>{1}</div>
z<textarea{0}>{1}</textarea>
z+<script type="text/javascript">{0}</script>Úid)r   rh   r_   r6   ÚlstriprZ   r\   r]   rY   r*   r   r   r
   r   r   r/   Ú	CALLBACKSr	   )r^   r;   Úvaluer_   ÚrendererÚfinal_attrsrT   Úhtmlr   r   r   Úrender¬   s(   

þÿzTinyMCE.renderc                 C   sp   t jg}t jr| tdƒ¡ t jr|t j7 }t jr | tdƒ¡ dtdƒgi}t jr2|d  t j¡ t||d�S )Nztinymce-filebrowserztinymce-spellcheck-callbackÚallztinymce-css)r   Úcss)	r/   ÚJS_URLrQ   r7   r   ÚADDIONAL_JS_URLSr0   ÚCSS_URLr   )r^   r   ru   r   r   r   ÚmediaÃ   s   
zTinyMCE.media)NNNrV   )NN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rX   rh   rs   Úpropertyry   Ú__classcell__r   r   ra   r   r   Ž   s    

c                   @   s   e Zd ZdZdS )ÚAdminTinyMCEz+TinyMCE 4 widget for Django Admin interfaceN)rz   r{   r|   r}   r   r   r   r   r€   Ò   s    r€   )3r}   rR   Úloggingr   Údjango.confr   Údjango.contrib.staticfilesr   Údjango.core.serializers.jsonr   Údjango.formsr   r   Údjango.forms.utilsr   Údjango.utils.encodingr   Údjango.utils.safestringr	   Údjango.utils.htmlr
   Údjango.utils.translationr   r   Údjango.template.loaderr   Údjango.urlsr   Údjango.contrib.adminr   Úadmin_widgetsr   ri   r/   Ú__all__ÚbasicConfigÚ	getLoggerrz   r2   ÚDEBUGÚWARNINGÚlogger_levelÚsetLevelr    r*   r<   r'   r   r   ÚAdminTextareaWidgetr€   r   r   r   r   Ú<module>   s<   

D