o
    h%                     @   s   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
 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 d ddddg dddddddZG dd dejZG dd deZee e G dd deZdS )    N)forms)ValidationError)Field)	ErrorList)render_to_string)translation)cached_property)gettext)versioned_static)
FieldBlock)register)WidgetAdapter   F)	row_above	row_below	---------col_left	col_rightr   
remove_row
remove_colr   undoredotextalll   )minSpareRows	startRows	startCols
colHeaders
rowHeaderscontextMenueditorstretchHheightrendererautoColumnSizec                       s*   e Zd Zd fdd	Zedd Z  ZS )
TableInputNc                    s   || _ t j|d d S )N)attrs)table_optionssuper__init__)selfr(   r'   	__class__ b/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/table_block/blocks.pyr*   -   s   zTableInput.__init__c                 C   s$   t jdtdgitdtdgdS )Nr   z6table_block/css/vendor/handsontable-6.2.2.full.min.cssz4table_block/js/vendor/handsontable-6.2.2.full.min.jsztable_block/js/table.js)cssjs)r   Mediar
   r+   r.   r.   r/   media1   s   zTableInput.media)NN)__name__
__module____qualname__r*   r   r4   __classcell__r.   r.   r,   r/   r&   ,   s    r&   c                   @   s   e Zd ZdZdd ZdS )TableInputAdapterzwagtail.widgets.TableInputc                 C   sR   t dt dt dt dt dt dt dt dt d	t d
t dd}|j|gS )N
Row headerTable headers!Display the first row as a header$Display the first column as a headerColumn header1Display the first row AND first column as headers
No headers+Which cells should be displayed as headers?Table caption`A heading that identifies the overall topic of the table, and is useful for screen reader users.Table)r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   )_r(   )r+   widgetstringsr.   r.   r/   js_argsG   s.   zTableInputAdapter.js_argsN)r5   r6   r7   js_constructorrH   r.   r.   r.   r/   r9   D   s    r9   c                       s   e Zd Zd f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dd ZdddZdddZG dd dZ  ZS )
TableBlockTNc                    s0   | j |d| _||d| _t jdi | dS )a#  
        CharField's 'label' and 'initial' parameters are not exposed, as Block
        handles that functionality natively (via 'label' and 'default')

        CharField's 'max_length' and 'min_length' parameters are not exposed as table
        data needs to have arbitrary length
        r(   )required	help_textNr.   )get_table_optionsr(   field_optionsr)   r*   )r+   rL   rM   r(   kwargsr,   r.   r/   r*   h   s   zTableBlock.__init__c                 C   s   t jddt| jdi| jS )NrF   rK   r.   )r   	CharFieldr&   r(   rO   r3   r.   r.   r/   fieldu   s
   
zTableBlock.fieldc                 C   
   t |S N)jsonloadsr+   valuer.   r.   r/   value_from_form{      
zTableBlock.value_from_formc                 C   rS   rT   )rU   dumpsrW   r.   r.   r/   value_for_form~   rZ   zTableBlock.value_for_formc                 C   sp   |r6| dds6| ddr| ddrd|d< |S | ddr&d|d< |S | ddr2d|d< |S d	|d< |S )
a*  
        If value came from a table block stored before Wagtail 6.0, we need to set an appropriate
        value for the header choice. I would really like to have this default to "" and force the
        editor to reaffirm they don't want any headers, but that would be a breaking change.
        table_header_choice first_row_is_table_headerFfirst_col_is_headerbothrowcolneither)getrW   r.   r.   r/   	to_python   s   zTableBlock.to_pythonc                 C   sh   |s|S | ddr|d dv |d< |d dv |d< nttjd }td|d	| | j| |S )
Nr]   r^   )rb   ra   r_   )columnra   r`   rL   zValidation error in TableBlock)params)	re   r   r   default_error_messagesr   rY   rR   cleanr\   )r+   rX   errorsr.   r.   r/   rj      s   zTableBlock.cleanc                 C   s   |S rT   r.   rW   r.   r.   r/   get_form_state   s   zTableBlock.get_form_statec                 C   s   | j d dkS )Nr$   htmlrK   r3   r.   r.   r/   is_html_renderer   s   zTableBlock.is_html_rendererc                 C   s2   g }|r| dg D ]}|dd |D  q
|S )Ndatac                 S   s   g | ]}|r|qS r.   r.   ).0vr.   r.   r/   
<listcomp>   s    z5TableBlock.get_searchable_content.<locals>.<listcomp>)re   extend)r+   rX   contentrb   r.   r.   r/   get_searchable_content   s
   z!TableBlock.get_searchable_contentc           	      C   s  t | jdd }|r|r|dd r%t|d dkr%|ddr%|d d nd }|dd}|d u r4i }nt|}|d|| j|d|d|d	|  d
|d
d|rW|d dd  n|dg i |dri |d< i |d< |d D ]&}d|v r|d |d |d |d f< d|v r|d |d |d |d f< qp|dri |d< |d D ]}|d |d d|d |d |d f< qt||S | j	|pd|dS )Ntemplatero   r   r_   Fr`   r+   table_headerhtml_renderertable_caption   cell
classnameshidden	classNamerb   rc   
mergeCellsspansrowspancolspan)r   r   r^   )context)
getattrmetare   lendictupdateTEMPLATE_VARrn   r   render_basic)	r+   rX   r   rv   rw   r`   new_contextr   merger.   r.   r/   render   s`   






zTableBlock.renderc                 C   sL   t  }|dur|dddu r|d= || d|vr$t }||d< |S )a~  
        Return a dict of table options using the defaults unless custom options provided

        table_options can contain any valid handsontable options:
        https://handsontable.com/docs/6.2.2/Options.html
        contextMenu: if value from table_options is True, still use default
        language: if value is not in table_options, attempt to get from environment
        Nr    Tlanguage)DEFAULT_TABLE_OPTIONScopyre   r   r   get_language)r+   r(   collected_table_optionsr   r.   r.   r/   rN      s   

zTableBlock.get_table_optionsc                   @   s   e Zd ZdZdZdZdS )zTableBlock.MetaNztable_block/blocks/table.htmltable)r5   r6   r7   defaultrv   iconr.   r.   r.   r/   Meta  s    r   )TNNrT   )r5   r6   r7   r*   r   rR   rY   r\   rf   rj   rl   rn   ru   r   rN   r   r8   r.   r.   r,   r/   rJ   g   s    


8rJ   )rU   djangor   django.core.exceptionsr   django.forms.fieldsr   django.forms.utilsr   django.template.loaderr   django.utilsr   django.utils.functionalr   django.utils.translationr	   rE   wagtail.admin.staticfilesr
   wagtail.blocksr   wagtail.telepathr   wagtail.widget_adaptersr   r   HiddenInputr&   r9   rJ   r.   r.   r.   r/   <module>   s:     