o
    hM                     @   s  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
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mZ d dlmZ G dd deZ G dd de Z!G dd deZ"eeddG dd deZ#dS )    )time)unquote)PermissionDenied)Http404JsonResponse)	QueryDict)get_object_or_404)TemplateResponse)method_decorator)cached_property)gettext)TemplateViewView)get_edit_handler)Block)PreviewableMixinRevisionMixin)"xframe_options_sameorigin_overridec                       s   e Zd ZdZdZdZdZdZ fddZ fddZ	d	d
 Z
edd Zdd Zdd Zdd Zdd Zdd Zdd Zeedd Zdd Z  ZS )PreviewOnEditN)postgetdeleteiQ zwagtail-preview-c                    s(   t  j|g|R i | |  | _d S N)supersetup
get_objectobjectselfrequestargskwargs	__class__ c/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/views/generic/preview.pyr      s   zPreviewOnEdit.setupc                    s*   t | jtstt j|g|R i |S r   )
isinstancer   r   r   r   dispatchr   r"   r$   r%   r'      s   zPreviewOnEdit.dispatchc                    sD   t  j   fddjj D }|D ]	}jj| qd S )Nc                    s,   g | ]\}}| jr|d   k r|qS )   )
startswithsession_key_prefix).0kv
expirationr   r$   r%   
<listcomp>&   s    
z9PreviewOnEdit.remove_old_preview_data.<locals>.<listcomp>)r   preview_expiration_timeoutr   sessionitemspop)r   expired_keysr,   r$   r.   r%   remove_old_preview_data$   s   
z%PreviewOnEdit.remove_old_preview_datac                 C   s:   | j jj}| j jj}| d| d| jj }| j | S N-)model_meta	app_label
model_namer   pkr*   )r   r;   r<   
unique_keyr$   r$   r%   session_key/   s   

zPreviewOnEdit.session_keyc                 C   s2   t | jtt| jd d}t|tr| }|S )Nr=   r=   )r   r9   r   strr!   r&   r   get_latest_revision_as_object)r   objr$   r$   r%   r   6   s   
zPreviewOnEdit.get_objectc                 C   s   | j r| j S t| j S r   )
form_classr   r9   get_form_classr   r$   r$   r%   rE   <   s   zPreviewOnEdit.get_form_classc                 C   s2   |   }|s|| j| jjdS ||| j| jjdS )N)instancefor_user)rE   r   r   user)r   
query_dictrD   r$   r$   r%   get_formA   s   zPreviewOnEdit.get_formc                 C   s,   | j j| jd\}}t|tsd}t|S )N)NN )r   r2   r   r?   r&   rA   r   )r   	post_data_r$   r$   r%   _get_data_from_sessionJ   s   
z$PreviewOnEdit._get_data_from_sessionc                 O   sb   |    | |j}| }|r|j t f|j| j< d}n| |  }| }t	||dS )NT)is_validis_available)
r6   rK   POSTrP   	urlencoder   r2   r?   rO   r   )r   r   r    r!   formrP   rQ   r$   r$   r%   r   P   s   zPreviewOnEdit.postc                 C   s   t | jdd| jiS )Nz'wagtailadmin/generic/preview_error.htmlr   )r	   r   r   rF   r$   r$   r%   error_response`   s
   zPreviewOnEdit.error_responsec                 O   sz   |  |  }| s|  S |jdd z|jd| jj}W n	 t	y)   t
w |jddkdd}| j|||S )NF)commitmodein_preview_paneltrueT)rX   
is_editing)rK   rO   rP   rU   saveGETr   r   default_preview_mode
IndexErrorr   make_preview_request)r   r   r    r!   rT   preview_modeextra_attrsr$   r$   r%   r   g   s   zPreviewOnEdit.getc                 O   s   |j | jd  tddiS )NsuccessT)r2   r4   r?   r   r   r$   r$   r%   r   |   s   zPreviewOnEdit.delete)__name__
__module____qualname__r9   rD   http_method_namesr1   r*   r   r'   r6   propertyr?   r   rE   rK   rO   r   rU   r
   r   r   r   __classcell__r$   r$   r"   r%   r      s(    
	
r   c                   @   s    e Zd Zedd Zdd ZdS )PreviewOnCreatec                 C   s(   | j jj}| j jj}| j | d| S r7   )r9   r:   r;   r<   r*   )r   r;   r<   r$   r$   r%   r?      s   

zPreviewOnCreate.session_keyc                 C   s   |   S r   )r9   rF   r$   r$   r%   r      s   zPreviewOnCreate.get_objectN)rc   rd   re   rg   r?   r   r$   r$   r$   r%   ri      s    
ri   c                       s<   e Zd ZdZdZ fddZdd Zdd Zd	d
 Z  Z	S )PreviewRevisionNr   c                    s>   t  j|g|R i | || _|| _|  | _|  | _d S r   )r   r   r=   revision_idr   r   get_revision_objectrevision_object)r   r   r=   rl   r    r!   r"   r$   r%   r      s
   
zPreviewRevision.setupc                 C   s(   t | jtstt| jtt| jdS )Nr@   )
issubclassr9   r   r   r   r   rA   r=   rF   r$   r$   r%   r      s   zPreviewRevision.get_objectc                 C   s   t | jj| jd}| S )N)id)r   r   	revisionsrl   	as_object)r   revisionr$   r$   r%   rm      s   z#PreviewRevision.get_revision_objectc                 O   s8   z|j d| jj}W n	 ty   tw | j||S )NrW   )r\   r   rn   r]   r^   r   r_   )r   r   r    r!   r`   r$   r$   r%   r      s   zPreviewRevision.get)
rc   rd   re   r9   rf   r   r   rm   r   rh   r$   r$   r"   r%   rj      s    rj   r   )namec                       sj   e Zd ZdZedd ZedefddZedd Zed	d
 Z	edd Z
dd Z fddZ  ZS )StreamFieldBlockPreviewrk   c                 C   s   | j jdS )Nrp   )r   r\   r   rF   r$   r$   r%   block_id   s   z StreamFieldBlockPreview.block_idreturnc                 C   s   t j| j }st|S r   )r   definition_registryr   rv   r   )r   blockr$   r$   r%   	block_def   s   z!StreamFieldBlockPreview.block_defc                 C   s
   | j  S r   )rz   get_preview_valuerF   r$   r$   r%   block_value   s   
z#StreamFieldBlockPreview.block_valuec                 C   s   t d| jj| jjjd S )Nz,Preview for %(block_label)s (%(block_type)s))block_label
block_type)r   rz   labelr#   rc   rF   r$   r$   r%   
page_title   s   z"StreamFieldBlockPreview.page_titlec                 C   s$   | j | j| jj| j| j| jdS )N)r   rz   block_classbound_blockr   )r   rz   r#   bindr|   r   rF   r$   r$   r%   base_context   s   z$StreamFieldBlockPreview.base_contextc                 C   s   | j | j| jS r   )rz   get_preview_templater|   r   rF   r$   r$   r%   get_template_names   s   z*StreamFieldBlockPreview.get_template_namesc                    s.   t  jdi |}|| j | j| j|S )Nr$   )r   get_context_dataupdater   rz   get_preview_contextr|   )r   r!   contextr"   r$   r%   r      s   z(StreamFieldBlockPreview.get_context_data)rc   rd   re   rf   r   rv   r   rz   r|   r   r   r   r   rh   r$   r$   r"   r%   ru      s    



ru   N)$r   django.contrib.admin.utilsr   django.core.exceptionsr   django.httpr   r   django.http.requestr   django.shortcutsr   django.template.responser	   django.utils.decoratorsr
   django.utils.functionalr   django.utils.translationr   django.views.genericr   r   wagtail.admin.panelsr   wagtail.blocks.baser   wagtail.modelsr   r   wagtail.utils.decoratorsr   r   ri   rj   ru   r$   r$   r$   r%   <module>   s(    m
