a
    Dg                     @   s  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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m Z m!Z!m"Z" d dl#m$Z$m%Z% ddl&m'Z' zd dl(m)Z) W n  e*y   d dl+m)Z) Y n0 G dd de'Z,G dd de$Z-e%e- e, G dd de,Z.G dd de,Z/G dd de/Z0G dd de,Z1G dd  d e,Z2G d!d" d"e,Z3G d#d$ d$e,Z4G d%d& d&e,Z5G d'd( d(e,Z6G d)d* d*e,Z7G d+d, d,e,Z8G d-d. d.e,Z9G d/d0 d0e,Z:G d1d2 d2e,Z;G d3d4 d4e;Z<G d5d6 d6e;Z=G d7d8 d8e,Z>G d9d: d:e,Z?G d;d< d<e,Z@G d=d> d>e@ZAe,e.e4e>e?e@eAe/e5e6e7e8e<e=e9e:e1e2e3e0gZBd?d@ eBD ZCdAdB eBD ZDdS )C    NDecimal)forms)Model)BLANK_CHOICE_DASH)
parse_dateparse_datetime
parse_time)	force_str)cached_propertyformat_html	mark_safe)gettext)versioned_static)camelcase_to_underscoreresolve_model_string)RichTextRichTextMaxLengthValidator!extract_references_from_rich_textget_text_for_indexing)Adapterregister   )Block)CallableChoiceIteratorc                       sr   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd Zdd Z fddZG dd dZ  ZS )
FieldBlockz&A block that wraps a Django form fieldc                 C   s   | j j|S N)fieldwidgetid_for_label)selfprefix r$   Y/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/blocks/field_block.pyr!   %   s    zFieldBlock.id_for_labelc                 C   s   |S )a  
        The value that we get back from the form field might not be the type
        that this block works with natively; for example, the block may want to
        wrap a simple value such as a string in an object that provides a fancy
        HTML rendering (e.g. EmbedBlock).

        We therefore provide this method to perform any necessary conversion
        from the form field value to the block's native value. As standard,
        this returns the form field value unchanged.
        r$   r"   valuer$   r$   r%   value_from_form(   s    zFieldBlock.value_from_formc                 C   s   |S )z
        Reverse of value_from_form; convert a value of this block's native value type
        to one that can be rendered by the form field
        r$   r&   r$   r$   r%   value_for_form5   s    zFieldBlock.value_for_formc                 C   s   |  | jj|||S r   )r(   r   r    value_from_datadictr"   datafilesr#   r$   r$   r%   r*   <   s    zFieldBlock.value_from_datadictc                 C   s   | j j|||S r   )r   r    value_omitted_from_datar+   r$   r$   r%   r.   A   s    z"FieldBlock.value_omitted_from_datac                 C   s   |  | j| |S r   )r(   r   cleanr)   r&   r$   r$   r%   r/   D   s    zFieldBlock.cleanc                 C   s   | j jS r   )r   requiredr"   r$   r$   r%   r0   J   s    zFieldBlock.requiredc                 C   s   | j j| j | |S r   )r   r    Zformat_valueZprepare_valuer)   r&   r$   r$   r%   get_form_stateO   s    zFieldBlock.get_form_statec                    s   t   p| jjpdS N )superget_descriptionr   	help_textr1   	__class__r$   r%   r6   T   s    zFieldBlock.get_descriptionc                   @   s   e Zd ZdZdZdS )zFieldBlock.MetaplaceholderN)__name__
__module____qualname__icondefaultr$   r$   r$   r%   MetaW   s   r@   )r;   r<   r=   __doc__r!   r(   r)   r*   r.   r/   propertyr0   r2   r6   r@   __classcell__r$   r$   r8   r%   r   "   s   
r   c                   @   s$   e Zd ZdZdd Zedd ZdS )FieldBlockAdapterzwagtail.blocks.FieldBlockc                 C   s   ddt |jjj dt |jjjj g}t|jdd}|rH|| t|jdd}|rd|| |j|	 |j
|jj|j|jd|t|jjddd	td
id	}|jjr|jj|d< t|dr|jd ur|j|d< |j|jj|gS )Nzw-fieldz	w-field--form_classnamer4   	classname Zshow_add_comment_buttonTZADD_COMMENTzAdd Comment)	labeldescriptionr0   r>   Z
blockDefIdZisPreviewablerF   ZshowAddCommentButtonstringsZhelpText
max_lengthZ	maxLength)r   r   r9   r;   r    getattrmetaappendrH   r6   r0   r>   Zdefinition_prefixZis_previewablejoin_r7   hasattrrK   name)r"   blockrF   rE   Zlegacy_classnamerM   r$   r$   r%   js_argsb   s<    




zFieldBlockAdapter.js_argsc                 C   s   t jtdgdS )Nz"wagtailadmin/js/telepath/blocks.js)Zjs)r   ZMediar   r1   r$   r$   r%   media   s    zFieldBlockAdapter.mediaN)r;   r<   r=   Zjs_constructorrT   r   rU   r$   r$   r$   r%   rD   _   s   )rD   c                       s&   e Zd Zd fdd	Zdd Z  ZS )		CharBlockTNr$   c                    s2   || _ tj|||||d| _t jf i | d S N)r0   r7   rK   
min_length
validators)search_indexr   	CharFieldr   r5   __init__)r"   r0   r7   rK   rX   rY   rZ   kwargsr8   r$   r%   r\      s    zCharBlock.__init__c                 C   s   | j rt|gS g S r   rZ   r
   r&   r$   r$   r%   get_searchable_content   s    z CharBlock.get_searchable_content)TNNNr$   T)r;   r<   r=   r\   r_   rC   r$   r$   r8   r%   rV      s         rV   c                       s@   e Zd Zd fdd	Zedd Zd	d
 ZG dd dZ  ZS )	TextBlockTNr   r$   c           	         s4   |||||d| _ || _|| _t jf i | d S rW   )field_optionsrowsrZ   r5   r\   )	r"   r0   r7   rb   rK   rX   rZ   rY   r]   r8   r$   r%   r\      s    zTextBlock.__init__c                 C   s<   ddl m} d|d| jidi}|| j tjf i |S )Nr   )AdminAutoHeightTextInputr    rb   )attrs)wagtail.admin.widgetsrc   rb   updatera   r   r[   )r"   rc   field_kwargsr$   r$   r%   r      s    zTextBlock.fieldc                 C   s   | j rt|gS g S r   r^   r&   r$   r$   r%   r_      s    z TextBlock.get_searchable_contentc                   @   s   e Zd ZdZdS )zTextBlock.MetapilcrowNr;   r<   r=   r>   r$   r$   r$   r%   r@      s   r@   )TNr   NNTr$   )	r;   r<   r=   r\   r   r   r_   r@   rC   r$   r$   r8   r%   r`      s          
r`   c                   @   s$   e Zd ZdddZG dd dZdS )BlockQuoteBlockNc                 C   s   |rt d|S dS d S )Nz<blockquote>{0}</blockquote>r4   r   r"   r'   contextr$   r$   r%   render_basic   s    
zBlockQuoteBlock.render_basicc                   @   s   e Zd ZdZdS )zBlockQuoteBlock.MetaZ	openquoteNri   r$   r$   r$   r%   r@      s   r@   )N)r;   r<   r=   rm   r@   r$   r$   r$   r%   rj      s   
rj   c                       s,   e Zd Zd fdd	ZG dd dZ  ZS )	
FloatBlockTNr$   c                    s*   t j||||d| _t j|i | d S )N)r0   	max_value	min_valuerY   )r   Z
FloatFieldr   r5   r\   )r"   r0   ro   rp   rY   argsr]   r8   r$   r%   r\      s    	zFloatBlock.__init__c                   @   s   e Zd ZdZdS )zFloatBlock.MetadecimalNri   r$   r$   r$   r%   r@      s   r@   )TNNr$   r;   r<   r=   r\   r@   rC   r$   r$   r8   r%   rn      s       rn   c                       s4   e Zd Zd
 fdd	Zdd ZG dd	 d	Z  ZS )DecimalBlockTNr$   c           
   	      s0   t j|||||||d| _t j|i |	 d S )N)r0   r7   ro   rp   
max_digitsdecimal_placesrY   )r   ZDecimalFieldr   r5   r\   )
r"   r0   r7   ro   rp   ru   rv   rY   rq   r]   r8   r$   r%   r\      s    	zDecimalBlock.__init__c                 C   s   |d u r|S t |S d S r   r   r&   r$   r$   r%   	to_python  s    zDecimalBlock.to_pythonc                   @   s   e Zd ZdZdS )zDecimalBlock.Metarr   Nri   r$   r$   r$   r%   r@     s   r@   )TNNNNNr$   )r;   r<   r=   r\   rw   r@   rC   r$   r$   r8   r%   rt      s          rt   c                       s,   e Zd Zd fdd	ZG dd dZ  ZS )	
RegexBlockTNr$   c           
   	      s0   t j|||||||d| _t j|i |	 d S )N)regexr0   r7   rK   rX   error_messagesrY   )r   Z
RegexFieldr   r5   r\   )
r"   ry   r0   r7   rK   rX   rz   rY   rq   r]   r8   r$   r%   r\     s    	zRegexBlock.__init__c                   @   s   e Zd ZdZdS )zRegexBlock.Metary   Nri   r$   r$   r$   r%   r@   3  s   r@   )TNNNNr$   rs   r$   r$   r8   r%   rx     s         rx   c                       s,   e Zd Zd fdd	ZG dd dZ  ZS )	URLBlockTNr$   c                    s,   t j|||||d| _t jf i | d S rW   )r   ZURLFieldr   r5   r\   r"   r0   r7   rK   rX   rY   r]   r8   r$   r%   r\   8  s    	zURLBlock.__init__c                   @   s   e Zd ZdZdS )zURLBlock.Metazlink-externalNri   r$   r$   r$   r%   r@   J  s   r@   )TNNNr$   rs   r$   r$   r8   r%   r{   7  s        r{   c                       s4   e Zd Zd	 fdd	Zdd ZG dd dZ  ZS )
BooleanBlockTNc                    s&   t j||d| _t jf i | d S )N)r0   r7   )r   ZBooleanFieldr   r5   r\   )r"   r0   r7   r]   r8   r$   r%   r\   O  s    zBooleanBlock.__init__c                 C   s   t |S r   )boolr&   r$   r$   r%   r2   W  s    zBooleanBlock.get_form_statec                   @   s   e Zd ZdZdS )zBooleanBlock.Metaztick-inverseNri   r$   r$   r$   r%   r@   ]  s   r@   )TN)r;   r<   r=   r\   r2   r@   rC   r$   r$   r8   r%   r}   N  s   r}   c                       s@   e Zd Zd fdd	Zedd Zdd	 ZG d
d dZ  ZS )	DateBlockTNr$   c                    sR   |||d| _ z|d| j d< W n ty4   Y n0 || _t jf i | d S )Nr0   r7   rY   Zinput_formats)ra   popKeyErrorformatr5   r\   r"   r0   r7   r   rY   r]   r8   r$   r%   r\   b  s    zDateBlock.__init__c                 C   s8   ddl m} d|| jdi}|| j tjf i |S )Nr   )AdminDateInputr    r   )re   r   r   rf   ra   r   Z	DateField)r"   r   rg   r$   r$   r%   r   q  s
    zDateBlock.fieldc                 C   s$   |d u st |tjr|S t|S d S r   )
isinstancedatetimedater   r&   r$   r$   r%   rw   {  s    zDateBlock.to_pythonc                   @   s   e Zd ZdZdS )zDateBlock.Metar   Nri   r$   r$   r$   r%   r@     s   r@   )TNNr$   	r;   r<   r=   r\   r   r   rw   r@   rC   r$   r$   r8   r%   r   a  s    
		r   c                       s@   e Zd Zd fdd	Zedd Zdd	 ZG d
d dZ  ZS )	TimeBlockTNr$   c                    s*   |||d| _ || _t jf i | d S Nr   ra   r   r5   r\   r   r8   r$   r%   r\     s    zTimeBlock.__init__c                 C   s8   ddl m} d|| jdi}|| j tjf i |S )Nr   )AdminTimeInputr    r   )re   r   r   rf   ra   r   Z	TimeField)r"   r   rg   r$   r$   r%   r     s    zTimeBlock.fieldc                 C   s$   |d u st |tjr|S t|S d S r   )r   r   timer	   r&   r$   r$   r%   rw     s    zTimeBlock.to_pythonc                   @   s   e Zd ZdZdS )zTimeBlock.Metar   Nri   r$   r$   r$   r%   r@     s   r@   )TNNr$   r   r$   r$   r8   r%   r     s    
r   c                       s@   e Zd Zd fdd	Zedd Zdd	 ZG d
d dZ  ZS )DateTimeBlockTNr$   c                    s*   |||d| _ || _t jf i | d S r   r   r   r8   r$   r%   r\     s    zDateTimeBlock.__init__c                 C   s8   ddl m} d|| jdi}|| j tjf i |S )Nr   )AdminDateTimeInputr    r   )re   r   r   rf   ra   r   ZDateTimeField)r"   r   rg   r$   r$   r%   r     s
    zDateTimeBlock.fieldc                 C   s$   |d u st |tjr|S t|S d S r   )r   r   r   r&   r$   r$   r%   rw     s    zDateTimeBlock.to_pythonc                   @   s   e Zd ZdZdS )zDateTimeBlock.Metar   Nri   r$   r$   r$   r%   r@     s   r@   )TNNr$   r   r$   r$   r8   r%   r     s    
	r   c                       s,   e Zd Zd fdd	ZG dd dZ  ZS )	
EmailBlockTNr$   c                    s(   t j|||d| _t jf i | d S r   )r   Z
EmailFieldr   r5   r\   r"   r0   r7   rY   r]   r8   r$   r%   r\     s    zEmailBlock.__init__c                   @   s   e Zd ZdZdS )zEmailBlock.MetamailNri   r$   r$   r$   r%   r@     s   r@   )TNr$   rs   r$   r$   r8   r%   r     s   r   c                       s,   e Zd Zd fdd	ZG dd dZ  ZS )	IntegerBlockTNr$   c                    s,   t j|||||d| _t jf i | d S )N)r0   r7   rp   ro   rY   )r   ZIntegerFieldr   r5   r\   )r"   r0   r7   rp   ro   rY   r]   r8   r$   r%   r\     s    	zIntegerBlock.__init__c                   @   s   e Zd ZdZdS )zIntegerBlock.Metar:   Nri   r$   r$   r$   r%   r@     s   r@   )TNNNr$   rs   r$   r$   r8   r%   r     s        r   c                       s:   e Zd ZdZd
 fdd	ZdddZG dd	 d	Z  ZS )BaseChoiceBlockr$   NTc                    s   || _ || _|| _|d u r | j}t|r6|}	t|}nt| }	}| | _|	| jd< |durh|| jd< |d urz|| jd< | 	|}
| j
|
||||d| _t jf d|i| d S )NchoicesTr0   r7   )r   r0   r7   rY   r    r?   )	_required_defaultrZ   r   callabler   listcopy_constructor_kwargs_get_callable_choices	get_fieldr   r5   r\   )r"   r   r?   r0   r7   rZ   r    rY   r]   Zchoices_for_constructorZcallable_choicesr8   r$   r%   r\     s0    





zBaseChoiceBlock.__init__c                    s    fdd}|S )z
        Return a callable that we can pass into `forms.ChoiceField`, which will provide the
        choices list with the addition of a blank choice (if blank_choice=True and one does not
        already exist).
        c                     sl   t }  s| S d}| D ]B\}}t|t tfrJtdd |D }|rZ q\q|dv rd} q\q|sht|  S | S )NFc                 s   s   | ]\}}|d v V  qdS )r4   NNr$   ).0r'   rH   r$   r$   r%   	<genexpr>=      zRBaseChoiceBlock._get_callable_choices.<locals>.choices_callable.<locals>.<genexpr>r   T)r   r   tupleanyr   )Zlocal_choicesZhas_blank_choiceZv1v2blank_choicer   r$   r%   choices_callable+  s    z?BaseChoiceBlock._get_callable_choices.<locals>.choices_callabler$   )r"   r   r   r   r$   r   r%   r   $  s     z%BaseChoiceBlock._get_callable_choicesc                   @   s   e Zd ZdZdS )zBaseChoiceBlock.Metar:   Nri   r$   r$   r$   r%   r@   M  s   r@   )NNTNTNr$   )T)r;   r<   r=   r   r\   r   r@   rC   r$   r$   r8   r%   r     s          7
)r   c                       s6   e Zd Zdd Zd
 fdd	Zdd Zdd	 Z  ZS )ChoiceBlockc                 K   s   t jf i |S r   )r   ZChoiceFieldr"   r]   r$   r$   r%   r   U  s    zChoiceBlock.get_fieldNc                    s&   |d u r| j o| j }t j||dS )Nr   )r   r   r5   r   r"   r   r   r8   r$   r%   r   X  s    z!ChoiceBlock._get_callable_choicesc                 C   s   dg | j fS )a  
        Always deconstruct ChoiceBlock instances as if they were plain ChoiceBlocks with their
        choice list passed in the constructor, even if they are actually subclasses. This allows
        users to define subclasses of ChoiceBlock in their models.py, with specific choice lists
        passed in, without references to those classes ending up frozen into migrations.
        zwagtail.blocks.ChoiceBlockr   r1   r$   r$   r%   deconstruct^  s    zChoiceBlock.deconstructc                 C   s   | j s
g S t|}| jjD ]t\}}t|ttfrl|D ]4\}}||ksP|t|kr4t|t|g    S q4q||ks|t|krt|g  S qg S r   )rZ   r
   r   r   r   r   r   )r"   r'   
text_valuekvk2r   r$   r$   r%   r_   g  s    z"ChoiceBlock.get_searchable_content)Nr;   r<   r=   r   r   r   r_   rC   r$   r$   r8   r%   r   T  s   	r   c                       s6   e Zd Zdd Zd
 fdd	Zdd Zdd	 Z  ZS )MultipleChoiceBlockc                 K   s   t jf i |S r   )r   ZMultipleChoiceFieldr   r$   r$   r%   r   y  s    zMultipleChoiceBlock.get_fieldFc                    s   t  j||dS )z)Override to default blank choice to Falser   )r5   r   r   r8   r$   r%   r   |  s    z)MultipleChoiceBlock._get_callable_choicesc                 C   s   dg | j fS )a  
        Always deconstruct MultipleChoiceBlock instances as if they were plain
        MultipleChoiceBlocks with their choice list passed in the constructor,
        even if they are actually subclasses. This allows users to define
        subclasses of MultipleChoiceBlock in their models.py, with specific choice
        lists passed in, without references to those classes ending up frozen
        into migrations.
        z"wagtail.blocks.MultipleChoiceBlockr   r1   r$   r$   r%   r     s    	zMultipleChoiceBlock.deconstructc                 C   s   | j s
g S g }t|}| jjD ]x\}}t|ttfrt|D ]8\}}||ksT|t|kr8|t| |t| q8q||ks|t|kr|t| q|S r   )rZ   r
   r   r   r   r   r   rN   )r"   r'   contentr   r   r   r   r   r$   r$   r%   r_     s    z*MultipleChoiceBlock.get_searchable_content)Fr   r$   r$   r8   r%   r   x  s   r   c                       sp   e Zd Zd fdd	Zdd Zd	d
 Zdd Zedd Zdd Z	dd Z
dd Zdd ZG dd dZ  ZS )RichTextBlockTNr?   r$   c           	         sV   |d urt |t|g }|||d| _|| _|| _|| _|| _t jf i | d S r   )	r   r   ra   rK   editorfeaturesrZ   r5   r\   )	r"   r0   r7   r   r   rK   rY   rZ   r]   r8   r$   r%   r\     s    zRichTextBlock.__init__c                 C   s   t |S r   r   r&   r$   r$   r%   rw     s    zRichTextBlock.to_pythonc                 C   s   |j S r   sourcer&   r$   r$   r%   get_prep_value  s    zRichTextBlock.get_prep_valuec                 C   s   t |tr|S t|S r   )r   r   r&   r$   r$   r%   	normalize  s    
zRichTextBlock.normalizec                 C   s.   ddl m} tjf d|| j| jdi| jS )Nr   )get_rich_text_editor_widgetr    )r   )Zwagtail.admin.rich_textr   r   r[   r   r   ra   )r"   r   r$   r$   r%   r     s    zRichTextBlock.fieldc                 C   s   |j S r   r   r&   r$   r$   r%   r)     s    zRichTextBlock.value_for_formc                 C   s   t |S r   r   r&   r$   r$   r%   r(     s    zRichTextBlock.value_from_formc                 C   s   | j s
g S t|j}t|gS r   )rZ   r
   r   r   )r"   r'   r   r$   r$   r%   r_     s    
z$RichTextBlock.get_searchable_contentc                 c   s   t t|jE d H  d S r   )r   r
   r   r&   r$   r$   r%   extract_references  s    z RichTextBlock.extract_referencesc                   @   s   e Zd ZdZdS )zRichTextBlock.Metarh   Nri   r$   r$   r$   r%   r@     s   r@   )TNr?   NNr$   T)r;   r<   r=   r\   rw   r   r   r   r   r)   r(   r_   r   r@   rC   r$   r$   r8   r%   r     s$          
r   c                       s\   e Zd Zd fdd	Zdd Zdd	 Zd
d Zdd Zdd Zdd Z	G dd dZ
  ZS )RawHTMLBlockTNr$   c                    s0   t j|||||t jd| _t jf i | d S )N)r0   r7   rK   rX   rY   r    )r   r[   ZTextarear   r5   r\   r|   r8   r$   r%   r\     s    	zRawHTMLBlock.__init__c                 C   s   |  | jjpdS r3   )r   rM   r?   r1   r$   r$   r%   get_default  s    zRawHTMLBlock.get_defaultc                 C   s   t |S r   r   r&   r$   r$   r%   rw      s    zRawHTMLBlock.to_pythonc                 C   s   t |S r   r   r&   r$   r$   r%   r     s    zRawHTMLBlock.normalizec                 C   s   t |d S r3   strr&   r$   r$   r%   r     s    zRawHTMLBlock.get_prep_valuec                 C   s   t |d S r3   r   r&   r$   r$   r%   r)     s    zRawHTMLBlock.value_for_formc                 C   s   t |S r   r   r&   r$   r$   r%   r(     s    zRawHTMLBlock.value_from_formc                   @   s   e Zd ZdZdS )zRawHTMLBlock.MetacodeNri   r$   r$   r$   r%   r@     s   r@   )TNNNr$   )r;   r<   r=   r\   r   rw   r   r   r)   r(   r@   rC   r$   r$   r8   r%   r     s        r   c                       s   e Zd Zd fdd	Zedd Zedd	 Zd
d Zdd Zdd Z	dd Z
dd Z fddZdd ZG dd dZ  ZS )ChooserBlockTNr$   c                    s(   || _ || _|| _t jf i | d S r   )r   
_help_text_validatorsr5   r\   r   r8   r$   r%   r\     s    zChooserBlock.__init__c                 C   s
   t | jS r   )r   target_modelr1   r$   r$   r%   model_class  s    zChooserBlock.model_classc                 C   s$   t j| jj | j| j| j| jdS )N)Zquerysetr    r0   rY   r7   )	r   ZModelChoiceFieldr   objectsallr    r   r   r   r1   r$   r$   r%   r   #  s    
zChooserBlock.fieldc                 C   s<   |d u r|S z| j jj|dW S  | j jy6   Y d S 0 d S Npk)r   r   getDoesNotExistr&   r$   r$   r%   rw   -  s    zChooserBlock.to_pythonc                 C   s^   | j j|}t }g }|D ]<}||}|durD||v rDt|}|| || q|S )a  Return the model instances for the given list of primary keys.

        The instances must be returned in the same order as the values and keep None values.
        If the same ID appears multiple times, a distinct object instance is created for each one.
        N)r   r   Zin_bulksetr   r   rN   add)r"   valuesr   Zseen_idsresultidobjr$   r$   r%   bulk_to_python7  s    


zChooserBlock.bulk_to_pythonc                 C   s   |d u rd S |j S d S r   r   r&   r$   r$   r%   r   L  s    zChooserBlock.get_prep_valuec                 C   sH   |d u st || jr|S z| jjj|dW S  | jjyB   Y d S 0 d S r   )r   r   r   r   r   r&   r$   r$   r%   r(   S  s    zChooserBlock.value_from_formc                 C   s   | j |S r   r    Zget_value_datar&   r$   r$   r%   r2   ]  s    zChooserBlock.get_form_statec                    s   t || jr|j}t |S r   )r   r   r   r5   r/   r&   r8   r$   r%   r/   `  s    zChooserBlock.cleanc                 c   s.   |d ur*t | jtr*| jt|jddfV  d S r3   )
issubclassr   r   r   r   r&   r$   r$   r%   r   l  s    zChooserBlock.extract_referencesc                   @   s   e Zd ZdZdS )zChooserBlock.Metar:   Nri   r$   r$   r$   r%   r@   p  s   r@   )TNr$   )r;   r<   r=   r\   r   r   r   rw   r   r   r(   r2   r/   r   r@   rC   r$   r$   r8   r%   r     s   

	

r   c                       sn   e Zd Zd fdd	Zedd Zedd Zed	d
 Zdd ZdddZ	 fddZ
G dd dZ  ZS )PageChooserBlockNFc                    sH   |r|}|r"t |ttfs&|g}ng }|| _|| _t jf i | d S r   )r   r   r   	page_typecan_choose_rootr5   r\   )r"   r   r   r   r]   r8   r$   r%   r\   x  s    zPageChooserBlock.__init__c                 C   s    t | jdkr| jd S tdS )a  
        Defines the model used by the base ChooserBlock for ID <-> instance
        conversions. If a single page type is specified in target_model,
        we can use that to get the more specific instance "for free"; otherwise
        use the generic Page model.
        r   r   zwagtailcore.Page)lentarget_modelsr   r1   r$   r$   r%   r     s    
zPageChooserBlock.target_modelc                 C   s"   g }| j D ]}|t| q
|S r   )r   rN   r   )r"   r   r   r$   r$   r%   r     s    
zPageChooserBlock.target_modelsc                 C   s   ddl m} || j| jdS )Nr   )AdminPageChooser)r   r   )re   r   r   r   )r"   r   r$   r$   r%   r      s    zPageChooserBlock.widgetc                 C   s:   | j |}|d u rd S |d |d |d |d dS d S )Nr   Z	parent_idZdisplay_titleZedit_url)r   ZparentIdZ
adminTitleZeditUrlr   )r"   r'   Z
value_datar$   r$   r%   r2     s    zPageChooserBlock.get_form_statec                 C   s   |rt d|j|jS dS d S )Nz<a href="{0}">{1}</a>r4   )r   urltitlerk   r$   r$   r%   rm     s    zPageChooserBlock.render_basicc                    sl   t   \}}}d|v s d|v rbg }| jD ]"}|j}||j d|j  q*|dd  ||d< |||fS )Nr   r   .)r5   r   r   Z_metarN   Z	app_labelZobject_namer   )r"   rR   rq   r]   r   r   optsr8   r$   r%   r     s    
zPageChooserBlock.deconstructc                   @   s   e Zd ZdZdS )zPageChooserBlock.Metazdoc-empty-inverseNri   r$   r$   r$   r%   r@     s   r@   )NFN)N)r;   r<   r=   r\   r   r   r   r    r2   rm   r   r@   rC   r$   r$   r8   r%   r   w  s    



r   c                 C   s   i | ]}|d |j  qS )zwagtail.blocks.%sr;   r   clsr$   r$   r%   
<dictcomp>  r   r   c                 C   s   g | ]
}|j qS r$   r   r   r$   r$   r%   
<listcomp>  r   r   )Er   r   rr   r   Zdjangor   Zdjango.db.modelsr   Zdjango.db.models.fieldsr   Zdjango.utils.dateparser   r   r	   Zdjango.utils.encodingr
   Zdjango.utils.functionalr   Zdjango.utils.htmlr   Zdjango.utils.safestringr   Zdjango.utils.translationr   rP   Zwagtail.admin.staticfilesr   Zwagtail.coreutilsr   r   Zwagtail.rich_textr   r   r   r   Zwagtail.telepathr   r   baser   Zdjango.utils.choicesr   ImportErrorZdjango.forms.fieldsr   rD   rV   r`   rj   rn   rt   rx   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   Zblock_classesZDECONSTRUCT_ALIASES__all__r$   r$   r$   r%   <module>   s   =5&"' j$&K-a[