o
    ["<f                     @   s   d Z ddlmZ ddlZddlm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 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ZG dd dejZG dd deejZ dd Z!dd Z"dd Z#dS )z
This TinyMCE widget was copied and extended from this code by John D'Agostino:
http://code.djangoproject.com/wiki/CustomWidgetsTinyMCE
    )OrderedDictN)Path)forms)settings)widgets)flatatt)reverse)escape)	mark_safe)get_languagegettext	to_localec                       sL   e Zd ZdZd fdd	Zdd Zdd Zdd	d
Zdd Ze	eZ
  ZS )TinyMCEa  
    TinyMCE widget. Set settings.TINYMCE_JS_URL to set the location of the
    javascript file. Default is "STATIC_URL + 'tinymce/tinymce.min.js'".
    You can customize the configuration with the mce_attrs argument to the
    constructor.

    In addition to the standard configuration you can set the
    'content_language' parameter. It takes the value of the 'language'
    parameter by default.

    In addition to the default settings from settings.TINYMCE_DEFAULT_CONFIG,
    this widget sets the 'language', 'directionality' and
    'spellchecker_languages' parameters by default. The first is derived from
    the current Django language, the others from the 'content_language'
    parameter.
    Nc                    sB   t  | |p	i }|| _d| jvrd| jd< d| jd< || _d S )Nmodeexact   strict_loading_mode)super__init__	mce_attrscontent_language)selfr   attrsr   	__class__ F/var/www/html/kck/venv/lib/python3.10/site-packages/tinymce/widgets.pyr   +   s   



zTinyMCE.__init__c                 G   s   dS )NFr   )r   argsr   r   r   use_required_attribute4   s   zTinyMCE.use_required_attributec                 C   s   t jj }d|vrt |d< |d dkr|d= nt|d |d< |t| jp,|	dd t jj
r7d|d< || j |d dkrI|d |d< |S )	Nlanguageen_USdjangoFileBrowserfile_picker_callbackr   r   idelements)tinymcer   DEFAULT_CONFIGcopyget_language_from_djangomatch_language_with_tinymceupdateget_language_configr   getUSE_FILEBROWSERr   )r   r   
mce_configr   r   r   get_mce_config8   s   
zTinyMCE.get_mce_configc           
      C   s   |d u rd}|  | j|}||d< |dd d u rd|d< nd|d ddg |d< d|v s5J d| |}t|}tj	j
r^|dd|d	d
|ddddd}t||d< ||d< dt| dt| dg}	td|	S )N nameclassr%    r#   z+TinyMCE widget attributes must contain 'id'pluginsthemeadvancedr   TF)r4   themes	languages	diskcachedebugzdata-mce-gz-confzdata-mce-confz	<textarea>z</textarea>
)build_attrsr   r,   joinsplitr/   jsondumpsr%   r   USE_COMPRESSORr   r	   r
   )
r   r1   valuer   rendererfinal_attrsr.   mce_jsoncompressor_confightmlr   r   r   renderJ   s*   





zTinyMCE.renderc                 C   s   d }t jjrtdg}nt jjg}t jjr|td t jjr:dt jjv r.|t jjd 7 }dt jjv r:t jjd }|d tj	||dS )Nztinymce-compressorztinymce-filebrowserjscsszdjango_tinymce/init_tinymce.js)rK   rJ   )
r%   r   rB   r   JS_URLr-   appendUSE_EXTRA_MEDIAr   Media)r   rK   rJ   r   r   r   _mediac   s   

zTinyMCE._media)NNN)NN)__name__
__module____qualname____doc__r   r   r/   rI   rP   propertymedia__classcell__r   r   r   r   r      s    	
r   c                   @   s   e Zd ZdS )AdminTinyMCEN)rQ   rR   rS   r   r   r   r   rX   w   s    rX   c                  C   s"   t  } | d urt| } | S d} | S )Nr    )r   r   )r   r   r   r   r(   {   s
   r(   c                 C   s   |  dr| S ttjd d d }dd | D }| |v r!| S | dd |v r/| dd S d	d
 |D }| dd |v rF|| dd  S td|  dt dS )z
    Language codes in TinyMCE are inconsistent. E.g. Hebrew is he_IL.js, while
    Danish is da.js. So we apply some heuristic to find a language code
    with an existing TinyMCE translation file.
    enstaticr%   langsc                 S   s   g | ]
}|j d kr|jqS )z.js)suffixstem).0file_r   r   r   
<listcomp>   s    z/match_language_with_tinymce.<locals>.<listcomp>N   c                 S   s   i | ]	}|d d |qS )Nra   r   )r^   lgr   r   r   
<dictcomp>   s    z/match_language_with_tinymce.<locals>.<dictcomp>zNo TinyMCE language found for 'z', defaulting to 'en_US'r    )
startswithr   __file__parentiterdirwarningswarnRuntimeWarning)langtiny_lang_dir
tiny_langstwo_letter_mapr   r   r   r)      s   
r)   c                 C   s   | d d } i }t  }tjD ]!\}}|d d |vr"g ||d d < ||d d  t| qg }| D ]\}}|| krAd}nd}|| d| d|  q6d||d< | tjv rdd|d	< nd
|d	< tjj	rrt
d|d< |S )Nra   +r0   z / =,spellchecker_languagesrtldirectionalityltrztinymce-spellcheckspellchecker_rpc_url)r   r   	LANGUAGESrM   _itemsr>   LANGUAGES_BIDIr%   USE_SPELLCHECKERr   )r   config
lang_namesrk   r1   sp_langsnamesdefaultr   r   r   r+      s(    

r+   )$rT   collectionsr   r@   pathlibr   rh   djangor   django.confr   django.contrib.adminr   admin_widgetsdjango.forms.utilsr   django.urlsr   django.utils.htmlr	   django.utils.safestringr
   django.utils.translationr   r   rx   r   tinymce.settingsr%   Textarear   AdminTextareaWidgetrX   r(   r)   r+   r   r   r   r   <module>   s&   ^