o
    ["<f                     @   s   d Z ddlmZ ddl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 ddlmZmZ dd	lmZ dd
lmZ ddlZeeZedZdddZdd Zdd ZdS )z
Based on "TinyMCE Compressor PHP" from MoxieCode.

http://tinymce.moxiecode.com/

Copyright (c) 2008 Jason Davies
Licensed under the terms of the MIT License (see LICENSE.txt)
    )datetimeN)finders)cache)HttpResponse)render_to_string)patch_response_headerspatch_vary_headers)	http_date)compress_stringz^[a-zA-Z][a-zA-Z0-9_/-]*$Fc              	   C   s   t tjd|  d}|st tjd|  d}zt|}| W  d    W S 1 s1w   Y  W d S  ttfyO   t	
d| d|   Y dS w )Ntinymcez.jsz.min.jszCouldn't load file: z for  )r   findospathjoinopenreadIOError	TypeErrorloggererror)filenamesource	file_pathfh r   I/var/www/html/kck/venv/lib/python3.10/site-packages/tinymce/compressor.pyget_file_contents   s   
(r   c                 C   s   | dkrg S |  dS )Nr   ,)split)strr   r   r   split_commas-   s   
r!   c                 C   s  t | jdd}t | jdd}t | jdd}t | jdd}| jdddk}| jdddk}| jd	ddk}g }t }	d
|	d< |sX|	tddtjji |	S t	|	dg t
 }
|
d|	d< d|| | }t|}|d urd|v r| jd}||d krd|	_d|	_d|	d< |	S d|v r| jd}||d krd|	_d|	_d|	d< |	S tjjdd}|dt| d dg}|D ]
}|d|  q|D ]}|d| d |D ]}|d| d |  qq|D ]}|d!| d" |D ]}|d!| d |  qq|D ]}t|sq|t||d# q|d$d%|d&  |rRtd'd(d) |D }d*|	d+< tt||	d< |	| d,}t|	| |	dsit |	d< t||	d |	ddd- |	S ).Npluginsr   	languagesthemesfilessrctruejscompressztext/javascriptzContent-Typeztinymce/tiny_mce_gzip.jsbase_urlzAccept-Encodingz%a, %d %b %Y %H:%M:%S GMTDate|ETagHTTP_IF_NONE_MATCHi0  0zContent-LengthLast-ModifiedHTTP_IF_MODIFIED_SINCE)basesuffixzvar tinyMCEPreInit=;r   zlangs/zplugins/z/pluginz/langs/zthemes/z/theme)r   ztinymce.each("{}".split(",")r   zL, function(f){tinymce.ScriptLoader.markDone(tinyMCE.baseURL+"/"+f+".js");});    c                 S   s   g | ]}| d qS )zutf-8)encode).0cr   r   r   
<listcomp>   s    z#gzip_compressor.<locals>.<listcomp>gzipzContent-Encodingi / )r0   r-   ) r!   GETgetr   writer   r   settingsJS_BASE_URLr   r   utcnowstrftimer   r   METAstatus_codecontentappendjsondumpssafe_filename_rematchr   formatr
   r    lenr   
has_headerr	   set)requestr"   r#   r$   r%   r   isJSr)   rD   responsenowcacheKey	cacheDataif_none_matchif_modified_sincetinyMCEPreInitlangpluginthemeftimeoutr   r   r   gzip_compressor3   s   



r\   )F)__doc__r   rF   loggingr   redjango.contrib.staticfilesr   django.core.cacher   django.httpr   django.template.loaderr   django.utils.cacher   r   django.utils.httpr	   django.utils.textr
   tinymce.settingsr   	getLogger__name__r   compilerH   r   r!   r\   r   r   r   r   <module>   s&    	


