o
    h                     @   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w 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$   Z/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/blocks/field_block.pyr!   %   s   zFieldBlock.id_for_labelc                 C      |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   r&   )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      z"FieldBlock.value_omitted_from_datac                 C   s   |  | j| |S r   )r)   r   cleanr*   r'   r$   r$   r%   r1   D   s   zFieldBlock.cleanc                 C   s   | j jS r   )r   requiredr"   r$   r$   r%   r2   J      zFieldBlock.requiredc                 C   s   | j j| j | |S r   )r   r    format_value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_textr3   	__class__r$   r%   r;   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    rE   )r@   rA   rB   __doc__r!   r)   r*   r+   r/   r1   propertyr2   r7   r;   rE   __classcell__r$   r$   r=   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}|r$|| t|jdd}|r2|| |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rl|jd url|j|d< |j|jj|gS )Nzw-fieldz	w-field--form_classnamer9   	classname show_add_comment_buttonTADD_COMMENTzAdd Comment)	labeldescriptionr2   rC   
blockDefIdisPreviewablerK   showAddCommentButtonstringshelpText
max_length	maxLength)r   r   r>   r@   r    getattrmetaappendrO   r;   r2   rC   definition_prefixis_previewablejoin_r<   hasattrrV   name)r"   blockrK   rJ   legacy_classnamerY   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)js)r   Mediar   r3   r$   r$   r%   media   s   zFieldBlockAdapter.mediaN)r@   rA   rB   js_constructorrc   r   rf   r$   r$   r$   r%   rI   _   s
    )rI   c                       s2   e Zd Z						d fdd	Zdd Z  ZS )		CharBlockTNr$   c                    s2   || _ tj|||||d| _t jdi | d S N)r2   r<   rV   
min_length
validatorsr$   )search_indexr   	CharFieldr   r:   __init__)r"   r2   r<   rV   rj   rk   rl   kwargsr=   r$   r%   rn      s   zCharBlock.__init__c                 C      | j rt|gS g S r   rl   r
   r'   r$   r$   r%   get_searchable_content      z CharBlock.get_searchable_content)TNNNr$   T)r@   rA   rB   rn   rr   rH   r$   r$   r=   r%   rh      s    rh   c                       sN   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di | d S ri   )field_optionsrowsrl   r:   rn   )	r"   r2   r<   rv   rV   rj   rl   rk   ro   r=   r$   r%   rn      s   zTextBlock.__init__c                 C   s<   ddl m} d|d| jidi}|| j tjdi |S )Nr   )AdminAutoHeightTextInputr    rv   )attrsr$   )wagtail.admin.widgetsrw   rv   updateru   r   rm   )r"   rw   field_kwargsr$   r$   r%   r      s   zTextBlock.fieldc                 C   rp   r   rq   r'   r$   r$   r%   rr      rs   z TextBlock.get_searchable_contentc                   @      e Zd ZdZdS )zTextBlock.MetapilcrowNr@   rA   rB   rC   r$   r$   r$   r%   rE          rE   )TNr   NNTr$   )	r@   rA   rB   rn   r   r   rr   rE   rH   r$   r$   r=   r%   rt      s    
rt   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 )Nz<blockquote>{0}</blockquote>r9   r   r"   r(   contextr$   r$   r%   render_basic   s   
zBlockQuoteBlock.render_basicc                   @   r|   )zBlockQuoteBlock.Meta	openquoteNr~   r$   r$   r$   r%   rE      r   rE   r   )r@   rA   rB   r   rE   r$   r$   r$   r%   r      s    
r   c                       s4   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)r2   	max_value	min_valuerk   )r   
FloatFieldr   r:   rn   )r"   r2   r   r   rk   argsro   r=   r$   r%   rn      s   	zFloatBlock.__init__c                   @   r|   )zFloatBlock.MetadecimalNr~   r$   r$   r$   r%   rE      r   rE   TNNr$   r@   rA   rB   rn   rE   rH   r$   r$   r=   r%   r      s    r   c                       sB   e Zd Z							d
 fdd	Zdd ZG dd	 d	Z  ZS )DecimalBlockTNr$   c           
   	      0   t j|||||||d| _t j|i |	 d S )N)r2   r<   r   r   
max_digitsdecimal_placesrk   )r   DecimalFieldr   r:   rn   )
r"   r2   r<   r   r   r   r   rk   r   ro   r=   r$   r%   rn         	zDecimalBlock.__init__c                 C   s   |d u r|S t |S r   r   r'   r$   r$   r%   	to_python  s   zDecimalBlock.to_pythonc                   @   r|   )zDecimalBlock.Metar   Nr~   r$   r$   r$   r%   rE     r   rE   )TNNNNNr$   )r@   rA   rB   rn   r   rE   rH   r$   r$   r=   r%   r      s    r   c                       s8   e Zd Z						d fdd	ZG dd dZ  ZS )	
RegexBlockTNr$   c           
   	      r   )N)regexr2   r<   rV   rj   error_messagesrk   )r   
RegexFieldr   r:   rn   )
r"   r   r2   r<   rV   rj   r   rk   r   ro   r=   r$   r%   rn     r   zRegexBlock.__init__c                   @   r|   )zRegexBlock.Metar   Nr~   r$   r$   r$   r%   rE   3  r   rE   )TNNNNr$   r   r$   r$   r=   r%   r     s    r   c                       6   e Zd Z					d fdd	ZG dd dZ  ZS )	URLBlockTNr$   c                    ,   t j|||||d| _t jdi | d S ri   )r   URLFieldr   r:   rn   r"   r2   r<   rV   rj   rk   ro   r=   r$   r%   rn   8     	zURLBlock.__init__c                   @   r|   )zURLBlock.Metazlink-externalNr~   r$   r$   r$   r%   rE   J  r   rE   TNNNr$   r   r$   r$   r=   r%   r   7      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di | d S )N)r2   r<   r$   )r   BooleanFieldr   r:   rn   )r"   r2   r<   ro   r=   r$   r%   rn   O  s   zBooleanBlock.__init__c                 C      t |S r   )boolr'   r$   r$   r%   r7   W  s   zBooleanBlock.get_form_statec                   @   r|   )zBooleanBlock.Metaztick-inverseNr~   r$   r$   r$   r%   rE   ]  r   rE   )TN)r@   rA   rB   rn   r7   rE   rH   r$   r$   r=   r%   r   N  s    r   c                       B   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y   Y nw || _t jdi | d S )Nr2   r<   rk   input_formatsr$   )ru   popKeyErrorformatr:   rn   r"   r2   r<   r   rk   ro   r=   r$   r%   rn   b  s   zDateBlock.__init__c                 C   8   ddl m} d|| jdi}|| j tjdi |S )Nr   )AdminDateInputr    r   r$   )ry   r   r   rz   ru   r   	DateField)r"   r   r{   r$   r$   r%   r   q  
   zDateBlock.fieldc                 C       |d u s
t |tjr|S t|S r   )
isinstancedatetimedater   r'   r$   r$   r%   r   {  s   zDateBlock.to_pythonc                   @   r|   )zDateBlock.Metar   Nr~   r$   r$   r$   r%   rE     r   rE   r   	r@   rA   rB   rn   r   r   r   rE   rH   r$   r$   r=   r%   r   a  s    
		r   c                       r   )	TimeBlockTNr$   c                    *   |||d| _ || _t jdi | d S Nr   r$   ru   r   r:   rn   r   r=   r$   r%   rn        zTimeBlock.__init__c                 C   r   )Nr   )AdminTimeInputr    r   r$   )ry   r   r   rz   ru   r   	TimeField)r"   r   r{   r$   r$   r%   r     s   zTimeBlock.fieldc                 C   r   r   )r   r   timer	   r'   r$   r$   r%   r        zTimeBlock.to_pythonc                   @   r|   )zTimeBlock.Metar   Nr~   r$   r$   r$   r%   rE     r   rE   r   r   r$   r$   r=   r%   r     s    
r   c                       r   )DateTimeBlockTNr$   c                    r   r   r   r   r=   r$   r%   rn     r   zDateTimeBlock.__init__c                 C   r   )Nr   )AdminDateTimeInputr    r   r$   )ry   r   r   rz   ru   r   DateTimeField)r"   r   r{   r$   r$   r%   r     r   zDateTimeBlock.fieldc                 C   s    |d u s
t |tjr|S t|S r   )r   r   r   r'   r$   r$   r%   r     r   zDateTimeBlock.to_pythonc                   @   r|   )zDateTimeBlock.Metar   Nr~   r$   r$   r$   r%   rE     r   rE   r   r   r$   r$   r=   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di | d S r   )r   
EmailFieldr   r:   rn   r"   r2   r<   rk   ro   r=   r$   r%   rn     s   zEmailBlock.__init__c                   @   r|   )zEmailBlock.MetamailNr~   r$   r$   r$   r%   rE     r   rE   TNr$   r   r$   r$   r=   r%   r     s    r   c                       r   )	IntegerBlockTNr$   c                    r   )N)r2   r<   r   r   rk   r$   )r   IntegerFieldr   r:   rn   )r"   r2   r<   r   r   rk   ro   r=   r$   r%   rn     r   zIntegerBlock.__init__c                   @   r|   )zIntegerBlock.Metar?   Nr~   r$   r$   r$   r%   rE     r   rE   r   r   r$   r$   r=   r%   r     r   r   c                       sH   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|r|}	t|}nt| }	}| | _|	| jd< |dur4|| jd< |d ur=|| jd< | 	|}
| j
|
||||d| _t jdd|i| d S )NchoicesTr2   r<   )r   r2   r<   rk   r    rD   r$   )	_required_defaultrl   r   callabler   listcopy_constructor_kwargs_get_callable_choices	get_fieldr   r:   rn   )r"   r   rD   r2   r<   rl   r    rk   ro   choices_for_constructorcallable_choicesr=   r$   r%   rn     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 ]!\}}t|t tfr%tdd |D }|r$ n
q|dv r-d} nq|s4t|  S | S )NFc                 s   s    | ]	\}}|d v V  qdS )r9   NNr$   ).0r(   rO   r$   r$   r%   	<genexpr>=  s    zRBaseChoiceBlock._get_callable_choices.<locals>.choices_callable.<locals>.<genexpr>r   T)r   r   tupleanyr   )local_choiceshas_blank_choice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                   @   r|   )zBaseChoiceBlock.Metar?   Nr~   r$   r$   r$   r%   rE   M      rE   )NNTNTNr$   )T)r@   rA   rB   r   rn   r   rE   rH   r$   r$   r=   r%   r     s    
7)r   c                       6   e Zd Zdd Zd
 fdd	Zdd Zdd	 Z  ZS )ChoiceBlockc                 K      t jdi |S Nr$   )r   ChoiceFieldr"   ro   r$   r$   r%   r   U     zChoiceBlock.get_fieldNc                    s&   |d u r| j o	| j }t j||dS )Nr   )r   r   r:   r   r"   r   r   r=   r$   r%   r   X  s   z!ChoiceBlock._get_callable_choicesc                 C      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   r3   r$   r$   r%   deconstruct^  s   zChoiceBlock.deconstructc                 C   s   | j sg S t|}| jjD ]:\}}t|ttfr6|D ]\}}||ks(|t|kr4t|t|g    S qq||ks@|t|krGt|g  S qg S r   )rl   r
   r   r   r   r   r   )r"   r(   
text_valuekvk2r   r$   r$   r%   rr   g  s   z"ChoiceBlock.get_searchable_contentr   r@   rA   rB   r   r   r   rr   rH   r$   r$   r=   r%   r   T  s
    	r   c                       r   )MultipleChoiceBlockc                 K   r   r   )r   MultipleChoiceFieldr   r$   r$   r%   r   y  r   zMultipleChoiceBlock.get_fieldFc                    s   t  j||dS )z)Override to default blank choice to Falser   )r:   r   r   r=   r$   r%   r   |  s   z)MultipleChoiceBlock._get_callable_choicesc                 C   r   )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   r3   r$   r$   r%   r     s   	zMultipleChoiceBlock.deconstructc                 C   s   | j sg S g }t|}| jjD ]<\}}t|ttfr:|D ]\}}||ks*|t|kr8|t| |t| qq||ksD|t|krK|t| q|S r   )rl   r
   r   r   r   r   r   rZ   )r"   r(   contentr   r   r   r   r   r$   r$   r%   rr     s    z*MultipleChoiceBlock.get_searchable_content)Fr   r$   r$   r=   r%   r   x  s
    r   c                       s~   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 )RichTextBlockTNrD   r$   c           	         sV   |d urt |t|g }|||d| _|| _|| _|| _|| _t jdi | d S r   )	r   r   ru   rV   editorfeaturesrl   r:   rn   )	r"   r2   r<   r   r   rV   rk   rl   ro   r=   r$   r%   rn     s   zRichTextBlock.__init__c                 C   r   r   r   r'   r$   r$   r%   r     r4   zRichTextBlock.to_pythonc                 C      |j S r   sourcer'   r$   r$   r%   get_prep_value     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dd|| j| jdi| jS )Nr   )get_rich_text_editor_widgetr    )r   r$   )wagtail.admin.rich_textr   r   rm   r   r   ru   )r"   r   r$   r$   r%   r     s   zRichTextBlock.fieldc                 C   r   r   r   r'   r$   r$   r%   r*     r   zRichTextBlock.value_for_formc                 C   r   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   )rl   r
   r   r   )r"   r(   r   r$   r$   r%   rr     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                   @   r|   )zRichTextBlock.Metar}   Nr~   r$   r$   r$   r%   rE     r   rE   )TNrD   NNr$   T)r@   rA   rB   rn   r   r   r   r   r   r*   r)   rr   r  rE   rH   r$   r$   r=   r%   r     s&    
r   c                       sf   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di | d S )N)r2   r<   rV   rj   rk   r    r$   )r   rm   Textarear   r:   rn   r   r=   r$   r%   rn     s   	zRawHTMLBlock.__init__c                 C   s   |  | jjpdS r8   )r   rY   rD   r3   r$   r$   r%   get_default  r0   zRawHTMLBlock.get_defaultc                 C   r   r   r   r'   r$   r$   r%   r         zRawHTMLBlock.to_pythonc                 C   r   r   r   r'   r$   r$   r%   r     r  zRawHTMLBlock.normalizec                 C      t |d S r8   strr'   r$   r$   r%   r     s   zRawHTMLBlock.get_prep_valuec                 C   r  r8   r  r'   r$   r$   r%   r*     s   zRawHTMLBlock.value_for_formc                 C   r   r   r   r'   r$   r$   r%   r)     r  zRawHTMLBlock.value_from_formc                   @   r|   )zRawHTMLBlock.MetacodeNr~   r$   r$   r$   r%   rE     r   rE   r   )r@   rA   rB   rn   r  r   r   r   r*   r)   rE   rH   r$   r$   r=   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di | d S r   )r   
_help_text_validatorsr:   rn   r   r=   r$   r%   rn     s   zChooserBlock.__init__c                 C   s
   t | jS r   )r   target_modelr3   r$   r$   r%   model_class  s   
zChooserBlock.model_classc                 C   s$   t j| jj | j| j| j| jdS )N)querysetr    r2   rk   r<   )	r   ModelChoiceFieldr  objectsallr    r   r  r  r3   r$   r$   r%   r   #  s   
zChooserBlock.fieldc                 C   s8   |d u r|S z	| j jj|dW S  | j jy   Y d S w Npk)r  r  getDoesNotExistr'   r$   r$   r%   r   -  s   zChooserBlock.to_pythonc                 C   s^   | j j|}t }g }|D ]}||}|dur"||v r"t|}|| || 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  in_bulksetr  r   rZ   add)r"   valuesr  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 r   r  r'   r$   r$   r%   r   L  s   zChooserBlock.get_prep_valuec                 C   sD   |d u s
t || jr|S z	| jjj|dW S  | jjy!   Y d S w r  )r   r  r  r  r  r'   r$   r$   r%   r)   S  s   zChooserBlock.value_from_formc                 C   s   | j |S r   r    get_value_datar'   r$   r$   r%   r7   ]  s   zChooserBlock.get_form_statec                    s   t || jr	|j}t |S r   )r   r  r  r:   r1   r'   r=   r$   r%   r1   `  s   zChooserBlock.cleanc                 c   s8    |d urt | jtr| jt|jddfV  d S d S d S r8   )
issubclassr  r   r	  r  r'   r$   r$   r%   r  l  s   zChooserBlock.extract_referencesc                   @   r|   )zChooserBlock.Metar?   Nr~   r$   r$   r$   r%   rE   p  r   rE   r   )r@   rA   rB   rn   r   r  r   r   r!  r   r)   r7   r1   r  rE   rH   r$   r$   r=   r%   r    s    

	

r  c                       sp   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di | d S r   )r   r   r   	page_typecan_choose_rootr:   rn   )r"   r&  r'  r  ro   r=   r$   r%   rn   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   r3   r$   r$   r%   r    s   
zPageChooserBlock.target_modelc                 C   s"   g }| j D ]	}|t| q|S r   )r&  rZ   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'  )ry   r*  r)  r'  )r"   r*  r$   r$   r%   r      s   zPageChooserBlock.widgetc                 C   s6   | j |}|d u rd S |d |d |d |d dS )Nr  	parent_iddisplay_titleedit_url)r  parentId
adminTitleeditUrlr"  )r"   r(   
value_datar$   r$   r%   r7     s   zPageChooserBlock.get_form_statec                 C   s   |r
t d|j|jS dS )Nz<a href="{0}">{1}</a>r9   )r   urltitler   r$   r$   r%   r     s   zPageChooserBlock.render_basicc                    sl   t   \}}}d|v sd|v r1g }| jD ]}|j}||j d|j  q|dd  ||d< |||fS )Nr  r&  .)r:   r   r)  _metarZ   	app_labelobject_namer   )r"   r`   r   ro   r)  r  optsr=   r$   r%   r     s   

zPageChooserBlock.deconstructc                   @   r|   )zPageChooserBlock.Metazdoc-empty-inverseNr~   r$   r$   r$   r%   rE     r   rE   )NFNr   )r@   rA   rB   rn   r   r  r)  r    r7   r   r   rE   rH   r$   r$   r=   r%   r%  w  s    



r%  c                 C   s   i | ]}|d |j  qS )zwagtail.blocks.%sr@   r   clsr$   r$   r%   
<dictcomp>  s    r<  c                 C   s   g | ]}|j qS r$   r9  r:  r$   r$   r%   
<listcomp>  s    r=  )Er   r   r   r   djangor   django.db.modelsr   django.db.models.fieldsr   django.utils.dateparser   r   r	   django.utils.encodingr
   django.utils.functionalr   django.utils.htmlr   django.utils.safestringr   django.utils.translationr   r^   wagtail.admin.staticfilesr   wagtail.coreutilsr   r   wagtail.rich_textr   r   r   r   wagtail.telepathr   r   baser   django.utils.choicesr   ImportErrordjango.forms.fieldsr   rI   rh   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  block_classesDECONSTRUCT_ALIASES__all__r$   r$   r$   r%   <module>   s    =5&"' j$&K-a[