
    Fi                        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 ddlmZmZmZ ddlZ G d dej>                        Z  G d de ejB                        Z"d Z#d Z$d Z%y)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)DjangoJSONEncoder)flatatt)reverse)escape)	mark_safe)get_languagegettext	to_localec                   N     e Zd ZdZd fd	Zd Zd ZddZd Z e	e      Z
 x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' and 'directionality' parameters by default.
    The first is derived from the current Django language, the second from the
    'content_language' parameter.
    c                 j    t         |   |       |xs i }|| _        d| j                  d<   || _        y )N   strict_loading_mode)super__init__	mce_attrscontent_language)selfr   attrsr   	__class__s       F/var/www/apihucms/venv/lib/python3.12/site-packages/tinymce/widgets.pyr   zTinyMCE.__init__+   s7    O	"01,- 0    c                      y)NF )r   argss     r   use_required_attributezTinyMCE.use_required_attribute2   s    r   c                    t         j                  j                  j                         }d|vrt	               |d<   |d   dk(  r|d= nt        |d         |d<   |j                  t        | j                  xs |j                  dd                   t         j                  j                  rd|d<   |j                  | j                         |j                  d      sd|d    |d<   |S )Nlanguageen_USdjangoFileBrowserfile_picker_callbackselector#id)tinymcer   DEFAULT_CONFIGcopyget_language_from_djangomatch_language_with_tinymceupdateget_language_configr   getUSE_FILEBROWSERr   )r   r   
mce_configs      r   get_mce_configzTinyMCE.get_mce_config6   s    %%4499;
Z'%=%?Jz"j!W,:&%@JAW%XJz" 5 5 \
T[9\]	
 ++1DJ-.$..)~~j)'(t%6Jz"r   c                    |d}| j                  | j                  |      }||d<   |j                  dd       d|d<   n*dj                  |d   j	                  d      dgz         |d<   d|v sJ d       | j                  |      }t        j                  |t              }t        j                  j                  rP|j                  d	d      |j                  d
d      |j                  dd      ddd}t        j                  |      |d<   ||d<   dt        |       dt        |       dg}	t        dj                  |	            S )N nameclassr*    r)   z+TinyMCE widget attributes must contain 'id')clspluginsthemeadvancedr#   TF)r;   themes	languages	diskcachedebugzdata-mce-gz-confzdata-mce-confz	<textarea>z</textarea>
)build_attrsr   r1   joinsplitr4   jsondumpsr   r*   r   USE_COMPRESSORr	   r   r   )
r   r7   valuer   rendererfinal_attrsr3   mce_jsoncompressor_confightmls
             r   renderzTinyMCE.renderI   sB   =E&&tzz59"F??7D)1#,K #&88K,@,F,Fs,Kyk,Y#ZK {"Q$QQ"((5
::j.?@**%>>)R8$..*='^^J;!! /3jj9J.KK*+'/O$GK016%=/MN4))r   c                 h   d }t         j                  j                  rt        d      g}nt         j                  j	                         g}t         j                  j
                  r|j                  t        d             t         j                  j                  rudt         j                  j                  v r |t         j                  j                  d   z  }dt         j                  j                  v rt         j                  j                  d   }|j                  d       t        j                  ||      S )Nztinymce-compressorztinymce-filebrowserjscsszdjango_tinymce/init_tinymce.js)rS   rR   )
r*   r   rI   r
   
get_js_urlr2   appendUSE_EXTRA_MEDIAr   Media)r   rS   rR   s      r   _mediazTinyMCE._mediab   s    **./0B""--/0B++IIg345++w''777g&&66t<<((888&&66u=
		23{{sr**r   )NNN)NN)__name__
__module____qualname____doc__r   r!   r4   rP   rX   propertymedia__classcell__r   s   @r   r   r      s-     1&*2+" VEr   r   c                   .     e Zd Z fdZ ee      Z xZS )AdminTinyMCEc                 P    ddgi}t        j                  |      t        |   z   S )Nallz django_tinymce/admin_tinymce.css)rS   )r   rW   r   r^   )r   rS   r   s     r   rX   zAdminTinyMCE._mediaw   s-    67
 {{s#egm33r   )rY   rZ   r[   rX   r]   r^   r_   r`   s   @r   rb   rb   v   s    4 VEr   rb   c                  <    t               } | t        |       } | S d} | S )Nr$   )r   r   )r#   s    r   r-   r-      s+    ~H&.&:y"HO AHHOr   c                    | j                  d      r| S t        t              j                  dz  dz  dz  }|j	                         D cg c]  }|j
                  dk(  s|j                    }}| |v r| S | dd |v r| dd S |D ci c]  }|dd |
 }}| dd |v r|| dd    S t        j                  d|  d	t               y
c c}w c c}w )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*   langsz.jsN   zNo TinyMCE language found for 'z', defaulting to 'en_US'r$   )

startswithr   __file__parentiterdirsuffixstemwarningswarnRuntimeWarning)langtiny_lang_dirfile_
tiny_langslgtwo_letter_maps         r   r.   r.      s     tN))H4y@7JM*7*?*?*A[U\\UZEZ%**[J[zBQx:BQx+56Rb!fbj6N6BQx>!d2Ah''MM3D69QRTbc \
 7s   C C Cc                    | d d } i }t               }t        j                  D ]4  \  }}|d d |vrg ||d d <   ||d d    j                  t	        |             6 g }|j                         D ]6  \  }}|| k(  rd}nd}|j                  | dj                  |       d|        8 | t        j                  v rd|d<   |S d|d<   |S )	Nrj   +r6   z / =rtldirectionalityltr)r   r   	LANGUAGESrU   _itemsrE   LANGUAGES_BIDI)r   config
lang_namesrt   r7   sp_langsnamesdefaults           r   r0   r0      s    '+FJ(( -
d8:%#%JtBQx 48##AdG,- H!'') @e##GG7)EJJu$5#6av>?@ 8222#(  M $) Mr   )&r\   collectionsr   rG   pathlibr   rq   djangor   django.confr   django.contrib.adminr   admin_widgetsdjango.core.serializers.jsonr   django.forms.utilsr	   django.urlsr
   django.utils.htmlr   django.utils.safestringr   django.utils.translationr   r   r   r   tinymce.settingsr*   Textarear   AdminTextareaWidgetrb   r-   r.   r0   r   r   r   <module>r      so    $       9 : &  $ - J J Yenn Yx7M== ,r   