a
    Dgx'                     @   s   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mZmZmZ d dlmZmZ d d	lmZ d d
l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G dd deZee e G dd deZ dS )    )forms)ValidationErrorrender_to_string)cached_property)gettext_lazy)BlockComparisonStructBlockComparison)BooleanBlock	CharBlockChooserBlockStructBlock)StructBlockAdapterStructBlockValidationError)AbstractImage)register   )get_rendition_or_not_foundc                   @   sD   e Zd Zedd Zedd ZdddZdd	 ZG d
d dZdS )ImageChooserBlockc                 C   s   ddl m} | S )Nr   )get_image_model)Zwagtail.imagesr   )selfr    r   T/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/images/blocks.pytarget_model   s    zImageChooserBlock.target_modelc                 C   s   ddl m} | S )Nr   )AdminImageChooser)Zwagtail.images.widgetsr   )r   r   r   r   r   widget   s    zImageChooserBlock.widgetNc                 C   s   |rt |d S dS d S )Noriginal )r   Zimg_tagr   valuecontextr   r   r   render_basic   s    zImageChooserBlock.render_basicc                 C   s   t S N)ImageChooserBlockComparisonr   r   r   r   get_comparison_class#   s    z&ImageChooserBlock.get_comparison_classc                   @   s   e Zd ZdZdS )zImageChooserBlock.MetaimageN)__name__
__module____qualname__iconr   r   r   r   Meta&   s   r+   )N)	r'   r(   r)   r   r   r   r!   r%   r+   r   r   r   r   r      s   


r   c                   @   s   e Zd Zdd Zdd ZdS )r#   c                 C   s   t d||dS Nz"wagtailimages/widgets/compare.html)Zimage_aZimage_br   r   valr   r   r   	htmlvalue+   s    z%ImageChooserBlockComparison.htmlvaluec                 C   s   t d| j| jdS r,   )r   val_aval_br$   r   r   r   htmldiff4   s    z$ImageChooserBlockComparison.htmldiffN)r'   r(   r)   r/   r2   r   r   r   r   r#   *   s   	r#   c                       s  e Zd ZdZeddZeddeddZe	deddZ
d5 fd	d
	Zdd Zdd Zedd Zdd Zdd Zdd Z fddZ fddZ fddZdd Z fdd Zd6 fd#d$	Zd%d& Zd'd( Zd)d* Zd+d, Zd7 fd-d.	Zd8d/d0Z fd1d2ZG d3d4 d4Z   Z!S )9
ImageBlocka  
    An usage of ImageChooserBlock with support for alt text.
    For backward compatibility, this block overrides necessary methods to change
    the StructValue to be an Image model instance, making it compatible in
    places where ImageChooserBlock was used.
    TrequiredFImage is decorativedefaultr5   labelAlt textr5   r9   c                    sJ   t  jdt|dfdtddtddfdtdtdd	fgfi | d S )
Nr&   r4   
decorativeFr6   r7   alt_textr:   r;   )super__init__r   r
   _r   )r   r5   kwargs	__class__r   r   r?   L   s    
zImageBlock.__init__c                 C   s   dg | j fS )a  
        For typical StructBlock subclasses, it makes sense for the deconstructed block object to be a basic StructBlock
        with the child blocks passed to the constructor (because this is largely functionally identical to the
        subclass, and avoids embedding a reference to a potentially-volatile custom class in migrations).

        This is not the case for ImageBlock, as it overrides enough of StructBlock's behaviour that a basic StructBlock
        is not a suitable substitute - and also has an incompatible constructor signature (as we don't want to support
        passing child blocks to it).

        Therefore, we opt out of the standard StructBlock deconstruction behaviour here, and always
        deconstruct an ImageBlock as an ImageBlock.
         wagtail.images.blocks.ImageBlock)Z_constructor_kwargsr$   r   r   r   deconstruct[   s    zImageBlock.deconstructc                 C   s   |   S r"   )rE   )r   lookupr   r   r   deconstruct_with_lookupj   s    z"ImageBlock.deconstruct_with_lookupc                 O   s   | f i |S r"   r   )clsrF   argsrA   r   r   r   construct_from_lookupm   s    z ImageBlock.construct_from_lookupc                 C   s    | j r
|sg S | jd |jS )Nr=   )Zsearch_indexchild_blocksget_searchable_contentcontextual_alt_textr   r   r   r   r   rL   q   s
    

z!ImageBlock.get_searchable_contentc                 C   s6   | d}| d}|r2|r dn| d|_||_|S )Nr&   r<   r   r=   )getrM   r<   )r   struct_valuer&   r<   r   r   r   _struct_value_to_imagey   s    

z!ImageBlock._struct_value_to_imagec                 C   s   ||o
|j |o|jdS )Nr&   r=   r<   )rM   r<   )r   r&   r   r   r   _image_to_struct_value   s    z!ImageBlock._image_to_struct_valuec                    sP   |d u st |tr:| jd |}|d|r0|jndd}nt |}| |S )Nr&   Fr   r&   r<   r=   )
isinstanceintrK   	to_pythondefault_alt_textr>   rQ   )r   r   r&   rP   rB   r   r   rW      s    zImageBlock.to_pythonc                    s\   t |}|r>tdd |D r> jd |}dd |D }nt |} fdd|D S )Nc                 s   s    | ]}|d u pt |tV  qd S r"   )rU   rV   ).0r   r   r   r   	<genexpr>       z,ImageBlock.bulk_to_python.<locals>.<genexpr>r&   c                 S   s"   g | ]}|d |r|j nddqS )Fr   rT   )rX   )rY   r&   r   r   r   
<listcomp>   s
   z-ImageBlock.bulk_to_python.<locals>.<listcomp>c                    s   g | ]}  |qS r   )rQ   )rY   rP   r$   r   r   r\      s   )listallrK   bulk_to_pythonr>   )r   valuesZimage_valuesZstruct_valuesrB   r$   r   r_      s    
zImageBlock.bulk_to_pythonc                    s   t  |||}| |S r"   )r>   value_from_datadictrQ   )r   datafilesprefixrP   rB   r   r   ra      s    zImageBlock.value_from_datadictc              
   C   sr   z| j d | W n2 tyF } ztd|idW Y d }~n
d }~0 0 |rn|jsn|jsntdttdid|S )Nr&   )Zblock_errorsr=   z@Please add some alt text for your image or mark it as decorative)rK   cleanr   r   rM   r<   r@   )r   r   er   r   r   re      s     
zImageBlock.cleanc                    s0   |d u st |tr|S t |}| |S d S r"   )rU   r   r>   	normalizerQ   )r   r   rP   rB   r   r   rg      s    zImageBlock.normalizer   Nc                    s6   ||o
|j |o|jd}t j|||d}||d< |S )NrR   )rd   errorsZsuggested_alt_text)rM   r<   r>   get_form_context)r   r   rd   rh   Z
dict_valuer    rB   r   r   ri      s    zImageBlock.get_form_contextc                 C   s$   | j d ||o|j|o|jdS Nr&   rR   )rK   get_form_staterM   r<   rN   r   r   r   rk      s    zImageBlock.get_form_statec                 C   s$   | j d ||o|j|o|jdS rj   )rK   get_prep_valuerM   r<   rN   r   r   r   rl      s    zImageBlock.get_prep_valuec                 C   s   | j d |S )Nr&   )rK   extract_referencesrN   r   r   r   rm      s    zImageBlock.extract_referencesc                 C   s   t S r"   )ImageBlockComparisonr$   r   r   r   r%      s    zImageBlock.get_comparison_classc                    s   t  j| ||dS )Nr    )r>   get_api_representationrS   r   rB   r   r   rp      s    
z!ImageBlock.get_api_representationc                 C   s   | j d j||dS )Nr&   ro   )rK   r!   r   r   r   r   r!      s    zImageBlock.render_basicc                    s&   |rt  | ||S | |S d S r"   )r>   get_block_by_content_pathrS   bind)r   r   Zpath_elementsrB   r   r   rq      s
    
z$ImageBlock.get_block_by_content_pathc                   @   s   e Zd ZdZdZdS )zImageBlock.Metar&   z wagtailimages/widgets/image.htmlN)r'   r(   r)   r*   templater   r   r   r   r+     s   r+   )T)r   N)N)N)"r'   r(   r)   __doc__r   r&   r
   r@   r<   r   r=   r?   rE   rG   classmethodrJ   rL   rQ   rS   rW   r_   ra   re   rg   ri   rk   rl   rm   r%   rp   r!   rq   r+   __classcell__r   r   rB   r   r3   >   s8   




r3   c                       s$   e Zd ZdZe fddZ  ZS )ImageBlockAdapterrD   c                    s    t  j}tj|jdg |jdS )Nzwagtailimages/js/image-block.js)Zjscss)r>   mediar   ZMediaZ_jsZ_css)r   Zstructblock_mediarB   r   r   ry   	  s
    
zImageBlockAdapter.media)r'   r(   r)   Zjs_constructorr   ry   rv   r   r   rB   r   rw     s   rw   c                       s(   e Zd Z fddZ fddZ  ZS )rn   c              	      s$   t  ||||||| d S r"   )r>   r?   rS   )r   blockZexists_aZexists_br0   r1   rB   r   r   r?     s    zImageBlockComparison.__init__c                    s.   t |trt | j|S t |S d S r"   )rU   r   r>   r/   rz   rS   r-   rB   r   r   r/     s    
zImageBlockComparison.htmlvalue)r'   r(   r)   r?   r/   rv   r   r   rB   r   rn     s   	rn   N)!Zdjangor   Zdjango.core.exceptionsr   Zdjango.template.loaderr   Zdjango.utils.functionalr   Zdjango.utils.translationr   r@   Zwagtail.admin.comparer   r	   Zwagtail.blocksr
   r   r   r   Zwagtail.blocks.struct_blockr   r   Zwagtail.images.modelsr   Zwagtail.telepathr   Z	shortcutsr   r   r#   r3   rw   rn   r   r   r   r   <module>   s"    I