U
    ô‰Vb¥7  ã                   @   s€   d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZ e d¡ZdZdZd	Zd
ZG dd„ dƒZdS )z1Create QGIS tooltip from Drag&Drop designer form.é    N)ÚUnion)ÚQgisÚQgsAttributeEditorContainerÚQgsAttributeEditorElementÚQgsAttributeEditorFieldÚQgsHstoreUtilsÚ
QgsProjectÚQgsRelationManagerÚQgsVectorLayer)ÚQgsExternalResourceWidgetÚLizmapz  zCopyright 2021, 3LizzGPL version 3zinfo@3liz.orgc                	   @   sü   e Zd Zeeedœdd„ƒZeeeee	ee
edœdd„ƒZeedœdd	„ƒZeed
œdd„ƒZeeeeedœdd„ƒZeeeedœdd„ƒZeee	ef edœdd„ƒZeeeedœdd„ƒZeeedœdd„ƒZeeedœdd„ƒZeedœdd„ƒZd S )!ÚTooltip)ÚhtmlÚreturnc                 C   s   d}|  | ¡S )NzJ<div class="container popup_lizmap_dd" style="width:100%;">
    {}
</div>
©Úformat)r   Útemplate© r   ú*/var/qgis-server/plugins/lizmap/tooltip.pyÚcreate_popup   s    zTooltip.create_popup)ÚlayerÚnodeÚlevelÚheadersr   Úrelation_managerr   c              
   C   sX  t  dt j¡}d}d}t|tƒr¼| ¡ dk rFt d |  	¡ ¡¡ |S |  
¡ | ¡  }	|	 ¡ }
|	 ¡ }|
rn|
n|}| dd¡}|	 ¡ }| ¡ }| ¡ }t |¡}|dkr¬|S |dkrÂt |||¡}|d	krt ¡  |d
 ¡søt d |  	¡ |¡¡ |S t ||¡}|dkrn| |d ¡}| ¡ }|sDt d |  	¡ |¡¡ |S | ¡ }| ¡ }| |¡}t ||||¡}|dkr„t ||¡}|dkršt ||¡}|dt |  7 }|t !|||¡7 }t|t"ƒrLd}| #¡  $¡ rðt %| #¡  &¡  '¡ ¡}|}|dkrŒd}|sd}|dt  d | (d| ¡ ¡|¡ 7 }|rH|rHd ||¡}|rX|sX|}|dt  d || (d| ¡ ¡| ¡ ¡ 7 }| )|¡ |dkrâ|dt |  d |¡ 7 }|dt |  d | ¡ ¡ 7 }|dt |  d 7 }g }g }g }|d7 }| *¡ D ]d}t +| |||||¡}|dkr,||7 }qþt|tƒrV|sJ| )|¡ n
| )|¡ n
| )|¡ qþ|dkrú|r’|d7 }|d ,|¡7 }|d7 }|rÔ|d7 }|d ,|¡7 }|d7 }|d7 }|d ,|¡7 }|d7 }|rL|d 7 }|d ,|¡7 }|d7 }nR|dkr|dt |  d! 7 }n2|dkrL|dt |  d! 7 }|dt |  d" 7 }||7 }|S )#Nz[^a-zA-Z0-9_]Ú r   z+Layer {} does not have a valid editor fieldú'õ   â€™ZHiddenZExternalResourceZValueRelationÚLayerz@Layer {} does not have a valid value relation layer for field {}ZRelationReferenceZRelationzDLayer {} does not have a valid relation reference layer for field {}ZValueMapÚDateTimeÚ
é   Úactivez4<div id="popup_dd_[% $id %]_{}" class="tab-pane {}">Ú_z{} {}zM<li class="{}"><a href="#popup_dd_[% $id %]_{}" data-toggle="tab">{}</a></li>z<fieldset class="{}">z<legend>{}</legend>z<div>z
<div class="before-tabs">z
</div>z<ul class="nav nav-tabs">
z
</ul>z
<div class="tab-content">z
<div class="after-tabs">z</div>z</fieldset>)-ÚreÚcompileÚ
IGNORECASEÚ
isinstancer   ÚidxÚLOGGERÚwarningr   ÚidÚfieldsÚaliasÚnameÚreplaceÚeditorWidgetSetupÚtypeÚconfigr   Ú_generate_field_viewÚ_generate_external_resourcer   ÚinstanceÚmapLayerÚ_generate_value_relationÚrelationÚreferencedLayerÚdisplayExpressionÚreferencedLayerIdÚresolveReferencedFieldÚ_generate_relation_referenceÚ_generate_value_mapÚ_generate_dateÚSPACESÚ_generate_field_namer   ZvisibilityExpressionÚenabledÚ_generate_eval_visibilityÚdataÚ
expressionÚsubÚappendÚchildrenÚ create_popup_node_item_from_formÚjoin)r   r   r   r   r   r   ZregexÚaÚhÚfieldr-   r.   ÚfnameZfield_widget_setupZwidget_typeÚwidget_configÚ
field_viewr8   Zreferenced_layerZdisplayÚlayer_idÚ	parent_pkZ
visibilityÚlr"   Zbefore_tabsZcontent_tabsZ
after_tabsÚnr   r   r   rI   %   sê    	ÿ

 ÿÿ
 ÿÿ



 ÿ  ÿ






z(Tooltip.create_popup_node_item_from_form©r.   c                 C   s
   d  | ¡S )Nz"{}"r   rU   r   r   r   r3   ½   s    zTooltip._generate_field_view©rE   c                 C   s
   d  | ¡S )Nz[% if ({}, '', 'hidden') %]r   rV   r   r   r   rC   Á   s    z!Tooltip._generate_eval_visibility)r.   rR   rQ   Údisplay_expressionc                 C   s   d  || ¡}d  |||¡}|S )NzE
                    "{}" = attribute(@parent, '{}')
                zÚ
                    aggregate(
                        layer:='{0}',
                        aggregate:='concatenate',
                        expression:={1},
                        filter:={2}
                    )r   )r.   rR   rQ   rW   rE   rP   r   r   r   r=   Å   s     þ÷z$Tooltip._generate_relation_reference)r.   rN   rE   c                 C   s   d  | ||¡}|S )Nap  
                    [% CASE
                        WHEN "{0}" IS NOT NULL OR trim("{0}") != ''
                        THEN concat(
                            '<p>', '<b>{1}</b>',
                            '<div class="field">', {2}, '</div>',
                            '</p>'
                        )
                        ELSE ''
                    END %]r   )r.   rN   rE   Útextr   r   r   rA   Ø   s    
ôzTooltip._generate_field_name)rO   r.   c                    s¸   t t dœdd„‰ t| d tƒrdtƒ }| d D ]4}dt| ¡ ƒkr,‡ fdd„| ¡ D ƒ}| |¡ q,n:| d }|d krxdS | d¡rˆ|d= ‡ fd	d„| ¡ D ƒ}t 	|¡}d
 
||¡}|S )N)Úvaluer   c                 S   s   |   dd¡S )u)   Change ' to â€™ for the HStore function. r   r   )r/   )rY   r   r   r   Úescape_valueì   s    z1Tooltip._generate_value_map.<locals>.escape_valueÚmapz<NULL>c                    s   i | ]\}}ˆ |ƒˆ |ƒ“qS r   r   ©Ú.0ÚxÚy©rZ   r   r   Ú
<dictcomp>ô   s      z/Tooltip._generate_value_map.<locals>.<dictcomp>z''c                    s   i | ]\}}ˆ |ƒˆ |ƒ“qS r   r   r\   r`   r   r   ra      s      u“   
                    map_get(
                        hstore_to_map('{}'),
                        replace("{}", '\'', 'â€™')
                    ))Ústrr'   ÚlistÚdictÚkeysÚitemsÚupdateÚgetr   Úbuildr   )rO   r.   ÚvaluesÚrowZrevertedZhstorerP   r   r`   r   r>   ê   s&    

 üzTooltip._generate_value_map)rO   r.   rN   c                 C   sr   | d }|t jkr d ||¡}nN|t jkr8d ||¡}n6|t jkrftjdkrXd |¡}qnd ||¡}ntdƒ‚|S )NZDocumentViewerah  
                    concat(
                       '<a href="',
                       "{0}",
                       '" target="_blank">',
                       '
                       <img src="',
                       "{0}",
                       '" width="100%" title="{1}">',
                       '
                       </a>'
                    )a‘  
                    concat(
                       '<a href="',
                       "{0}",
                       '" target="_blank">
                       ',
                       '
                       <iframe src="',
                       "{0}",
                       '" width="100%" height="300" title="{1}"/>',
                       '
                       </a>'
                    )iPx  zð
                    concat(
                        '<a href="',
                        "{0}",
                        '" target="_blank">',
                        base_file_name({0}),
                        '</a>'
                    )z¨
                    concat(
                        '<a href="',
                        "{}",
                        '" target="_blank">{}</a>'
                    )z Unknown external resource widget)r   ÚImager   ZWebZ	NoContentr   ÚQGIS_VERSION_INTÚ	Exception)rO   r.   rN   ZdviewrP   r   r   r   r4     s,    
 õ
 ô

ù	 ûz#Tooltip._generate_external_resourcec                 C   s"   |   d¡}|sd}d ||¡}|S )NZdisplay_formatz
yyyy-MM-ddzr
                    format_date(
                        "{}",
                        '{}'
                    ))rh   r   )rO   r.   Zdate_formatrP   r   r   r   r?   D  s    
 üzTooltip._generate_datec                 C   sd   | d }d  | d |¡}| d  ¡ }|rN| dd¡}| dd¡}|d	  |¡7 }d
  || d |¡}|S )Nr   z"{}" = attribute(@parent, '{}')ZKeyÚFilterExpressionz@current_geometryzgeometry(@parent)zcurrent_value(zattribute(@parent, z AND {}zÜ
                    aggregate(
                        layer:='{0}',
                        aggregate:='concatenate',
                        expression:="{1}",
                        filter:={2}
                    )ÚValue)r   Ústripr/   )rO   r.   ZvlidrE   Z
filter_exprP   r   r   r   r7   S  s     þ÷z Tooltip._generate_value_relation)r   c                  C   s   d} | S )Na:  <style>
    div.popup_lizmap_dd {
        margin: 2px;
    }
    div.popup_lizmap_dd div {
        padding: 5px;
    }
    div.popup_lizmap_dd div.tab-content{
        border: 1px solid rgba(150,150,150,0.5);
    }
    div.popup_lizmap_dd ul.nav.nav-tabs li a {
        border: 1px solid rgba(150,150,150,0.5);
        border-bottom: none;
        color: grey;
    }
    div.popup_lizmap_dd ul.nav.nav-tabs li.active a {
        color: #333333;
    }
    div.popup_lizmap_dd div.tab-content div.tab-pane div {
        border: 1px solid rgba(150,150,150,0.5);
        border-radius: 5px;
        background-color: rgba(150,150,150,0.5);
    }
    div.popup_lizmap_dd div.tab-content div.tab-pane div.field,
    div.popup_lizmap_dd div.field,
    div.popup_lizmap_dd div.tab-content div.field {
        background-color: white;
        border: 1px solid white;
    }
    div.popup_lizmap_dd div.tab-content legend {
        font-weight: bold;
        font-size: 1em !important;
        color: #333333;
        border-bottom: none;
        margin-top: 15px !important;
    }

</style>
r   )Úcssr   r   r   rr   q  s    &zTooltip.cssN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodrb   r   r
   r   Úintrc   r	   rI   r3   rC   r=   rA   r   rd   r>   r4   r?   r7   rr   r   r   r   r   r      s<   ù  8r   )Ú__doc__Úloggingr$   Útypingr   Ú	qgis.corer   r   r   r   r   r   r	   r
   Úqgis.guir   Z	getLoggerr)   r@   Ú__copyright__Ú__license__Ú	__email__r   r   r   r   r   Ú<module>   s   (

