
    !4Dh^                        S r SSKJr  SSKrSSKJr  SSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJr  SSKr " S S\R>                  5      r  " S S\ \RB                  5      r"S r#S r$S r%g)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                   \   ^  \ rS rSrSrS	U 4S jjrS rS rS
S jrS r	\
" \	5      rSrU =r$ )TinyMCE   au  
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                 p   > [         TU ]  U5        U=(       d    0 nX0l        SU R                  S'   Xl        g )N   strict_loading_mode)super__init__	mce_attrscontent_language)selfr   attrsr   	__class__s       A/var/www/html/env/lib/python3.13/site-packages/tinymce/widgets.pyr   TinyMCE.__init__+   s3    O	"01,- 0    c                     g)NF )r   argss     r   use_required_attributeTinyMCE.use_required_attribute2   s    r   c                    [         R                  R                  R                  5       nSU;  a  [	        5       US'   US   S:X  a  US	 O[        US   5      US'   UR                  [        U R                  =(       d    UR                  SS5      5      5        [         R                  R                  (       a  SUS'   UR                  U R                  5        UR                  S5      (       d  SUS    3US'   U$ )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_config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                    Uc  SnU R                  U R                  U5      nXS'   UR                  SS 5      c  SUS'   O*SR                  US   R	                  S5      S/-   5      US'   SU;   d   S5       eU R                  U5      n[        R                  " U[        S9n[        R                  R                  (       aQ  UR                  S	S5      UR                  S
S5      UR                  SS5      SSS.n[        R                  " U5      US'   XuS'   S[        U5       S[        U5       S3/n	[        SR                  U	5      5      $ )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   r4   joinsplitr7   jsondumpsr   r-   r   USE_COMPRESSORr	   r   r   )
r   r;   valuer   rendererfinal_attrsr6   mce_jsoncompressor_confightmls
             r   renderTinyMCE.renderI   s>   =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                    S n[         R                  R                  (       a  [        S5      /nO[         R                  R	                  5       /n[         R                  R
                  (       a  UR                  [        S5      5        [         R                  R                  (       ay  S[         R                  R                  ;   a   U[         R                  R                  S   -  nS[         R                  R                  ;   a  [         R                  R                  S   nUR                  S5        [        R                  " XS9$ )Nztinymce-compressorztinymce-filebrowserjscsszdjango_tinymce/init_tinymce.js)rX   rW   )
r-   r   rM   r
   
get_js_urlr5   appendUSE_EXTRA_MEDIAr   Media)r   rX   rW   s      r   _mediaTinyMCE._mediab   s    **./0B""--/0B++IIg345++w''777g&&66t<<((888&&66u=
		23{{s**r   )r   r   )NNN)NN)__name__
__module____qualname____firstlineno____doc__r   r#   r7   rT   r]   propertymedia__static_attributes____classcell__)r   s   @r   r   r      s-     1&*2+" VEr   r   c                       \ rS rSrSrg)AdminTinyMCEv   r!   N)r_   r`   ra   rb   rf   r!   r   r   ri   ri   v   s    r   ri   c                  >    [        5       n U b  [        U 5      n U $ Sn U $ )Nr'   )r   r   )r&   s    r   r0   r0   z   s+    ~H&.&:y"HO AHHOr   c                    U R                  S5      (       a  U $ [        [        5      R                  S-  S-  S-  nUR	                  5        Vs/ s H   o"R
                  S:X  d  M  UR                  PM"     nnX;   a  U $ U SS U;   a  U SS $ U Vs0 s H  oDSS U_M
     nnU SS U;   a  XPSS    $ [        R                  " SU  S	3[        5        g
s  snf s  snf )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   r1   r1      s     tN))H4y@7JM*7*?*?*A[*A\\UZEZ*%***AJ[BQx:BQx+56:R!fbj:N6BQx>!2Ah''MM3D69QRTbc \
 7s   C$CCc                    U S S n 0 n[        5       n[        R                   H4  u  p4US S U;  a  / X#S S '   X#S S    R                  [	        U5      5        M6     / nUR                  5        H6  u  p6X0:X  a  SnOSnUR                  U SR                  U5       SU 35        M8     U [        R                  ;   a  SUS'   U$ SUS'   U$ )	Nrp   +r:   z / =rtldirectionalityltr)r   r   	LANGUAGESrZ   _itemsrI   LANGUAGES_BIDI)r   config
lang_namesrz   r;   sp_langsnamesdefaults           r   r3   r3      s    '+FJ((
8:%#%JBQx 8##AdG, ) H!'')#GG7)EJJu$5#6av>? * 8222#(  M $) Mr   )&rc   collectionsr   rK   pathlibr   rw   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   AdminTextareaWidgetri   r0   r1   r3   r!   r   r   <module>r      so    $       9 : &  $ - J J Yenn Yx	7M== 	,r   