
    shFJ                         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 ddlmZ  ej$                  d      ZdZd	Zd
ZdZ G d d      Zy)z1Create QGIS tooltip from Drag&Drop designer form.    N)Union)QgsAttributeEditorContainerQgsAttributeEditorElementQgsAttributeEditorFieldQgsAttributeEditorRelationQgsHstoreUtils
QgsProjectQgsRelationManagerQgsVectorLayer)QgsExternalResourceWidget)QDomDocumentLizmapz  zCopyright 2021, 3LizzGPL version 3zinfo@3liz.orgc                      e Zd Zededefd       Zededefd       Zedededefd       Z	e	 d"d	e
d
ededededededefd       Zededefd       Zededefd       Zededededefd       Zededefd       Zededededefd       Zedeeef   dedefd       Zededededefd       Zedededefd       Zedededefd       Zedefd       Zedefd        Zy!)#Tooltiphtmlreturnc                 (    d}|j                  |       S )NzZ<div class="container popup_lizmap_dd form-horizontal" style="width:100%;">
    {}
</div>
format)r   templates     5/var/www/qgis-server/plugins/lizmap_server/tooltip.pycreate_popupzTooltip.create_popup$   s     t$$    datac                 \    |j                         D ci c]  \  }}|	|| c}}S c c}}w )z' Remove None values in the dictionary. )items)clsr   kvs       r   remove_nonezTooltip.remove_none+   s*     "&?A1???s   
((namealiasc                 6    |r|n|}|j                  dd      }|S )N'   ’replace)r   r!   r"   fnames       r   friendly_namezTooltip.friendly_name1   s     Dc5)r   layernodelevelheadersrelation_managerbootstrap_5c           
         t        j                  dt         j                        }d}d}	t        |t              rr|j                         dk(  r_|j                         }
|j                  t                     j                         }|dt        |z  z   z  }|t        j                  |
|      z  }t        |t              rW|j                         dk  r)t        j!                  d| j#                          d       |S | j%                         |j                            }|j                         }t        j'                  ||j)                               }|j+                         }|j                         }|j-                         }t        j/                  |      }t        j1                  |      }|dk(  r|S |d	k(  rt        j3                  |||      }|d
k(  rpt5        j6                         j9                  |d         s5t        j!                  dj;                  | j#                         |             |S t        j=                  |      }|dk(  rp|j?                  |d         }|jA                         }|s5t        j!                  dj;                  | j#                         |             |S t        j=                  |      }|dk(  rt        jC                  ||      }|dk(  rt        jE                  ||      }|dt        |z  z   z  }|t        jG                  |||      z  }t        |tH              r|jK                  |       |j?                         }|rE|t        jM                  |jO                         |j#                         |jQ                               z  }n8t        j!                  d|j                          d|jO                          d       t        |tR              rd}|jU                         jW                         r?t        jY                  |jU                         j[                         j]                               }|}|dk(  rd}|sd}|dt        z   dj;                  |j_                  d|j                               |      z   z  }|r	|r| d| }|r|s|}|	dt        z   z  }	|j_                  d|j                               }|r|	d| d| d|j                          dz  }	n|	d| d| d |j                          d!z  }	|ja                  |	       |dkD  rL|dt        |z  z   d"| dz   z  }|dt        |z  z   d#|j                          d$z   z  }|dt        |z  z   d%z   z  }g }g }g }|dz  }|jc                         D ]  }t        je                  | ||||||      }	|dkD  r||	z  })t        |t              xr |j                         dk(  }t        |t              s|r&|s|ja                  |	       t|ja                  |	       |ja                  |	        |dk(  r|r|d&z  }|djg                  |      z  }|d'z  }|r<|d(z  }|djg                  |      z  }|d)z  }|d*z  }|djg                  |      z  }|d'z  }|r`|d+z  }|djg                  |      z  }|d'z  }nA|dk(  r|dt        |z  z   d,z   z  }n)|dkD  r$|dt        |z  z   d,z   z  }|dt        |z  z   d-z   z  }||z  }|S ).Nz[^a-zA-Z0-9_]    
r   zLayer z# does not have a valid editor fieldHiddenExternalResourceValueRelationLayerz@Layer {} does not have a valid value relation layer for field {}RelationReferenceRelationzDLayer {} does not have a valid relation reference layer for field {}ValueMapDateTimez
The node 'z::zN' cannot be processed for the tooltip because the relation has not been found.   activez4<div id="popup_dd_[% $id %]_{}" class="tab-pane {}">_ z-<li class="nav-item"><button class="nav-link z;" data-bs-toggle="tab" data-bs-target="#popup_dd_[% $id %]_z">z</button></li>z<li class="z"><a href="#popup_dd_[% $id %]_z" data-toggle="tab">z	</a></li>z<fieldset class="z<legend>z	</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"></div>z</fieldset>)4recompile
IGNORECASE
isinstancer   typer!   toDomElementr   textSPACESr   _generate_text_labelr   idxLOGGERwarningidfieldsr)   r"   editorWidgetSetupconfigr    _generate_field_view_generate_external_resourcer	   instancemapLayerr   _generate_represent_valuerelationreferencedLayer_generate_value_map_generate_date_generate_field_namer   init#_generate_attribute_editor_relationlabelreferencingLayerIdr   visibilityExpressionenabled_generate_eval_visibilityr   
expressionsubappendchildren create_popup_node_item_from_formjoin)r*   r+   r,   r-   r   r.   r/   regexahr]   rb   fieldr!   r(   field_widget_setupwidget_typewidget_config
field_viewrV   referenced_layer
visibilitylvlr=   id_tabbefore_tabscontent_tabs
after_tabsnis_editor_elements                                 r   rf   z(Tooltip.create_popup_node_item_from_form7   s    

+R]];d56 yy{a		!..|~>CCE
TFUN**W11%DDd34xxzA~UXXZL(KLNLLN488:.E ::<D))$>E "'!8!8!:,113K.557M#//>M 55d;Jh&00$@@PTV[\
o-!**,55mG6LMNNZaa!HHJ/0  K$>>tD
11+44]:5NO#+#;#;#= 'NN^ee!HHJ/0  K$>>tD
j($88M
j($33M4H
&&A--dE:FFAd67II&'}}HW@@JJL(++-1L1L1NP P  R

~ >? @A d78J((*224$>>t?X?X?Z?_?_?a?l?l?no
Cax%FTF]%[%b%bIIc499;/&9 9 9 & &xq5Ff'FTF]"3		4339( ;??Ehb99;- 	!A %fX .88>x?STXT]T]T_S` a !A
 q!QwTFSL(->zl"+MMMTFSL(Xdiik])+LLLTFSL(722 KLJQJE]]_ +<<1eWd4DkS 7FA %/q2K$L$^QRQWQWQY]^Q^!a!89=N"#**1-"))!, ''*#+& ax66A;//AOA66A7++ANA66A<00AOA55A:..AOATFSL(833qTFSL(833TFSL(=88	r   c                     d|  dS )N" r!   s    r   rQ   zTooltip._generate_field_view   s    4&{r   rb   c                     d|  dS )Nz[% if (z, '', 'hidden') %]r{   )rb   s    r   ra   z!Tooltip._generate_eval_visibility   s    $677r   r]   relation_idreferencing_layer_idc                     dt         z   d|  dz   }|dt         z   z  }|dj                  ||      z  }|dt         z   dz   z  }|S )zH Generate the div. LWC will manage to include children in the given div.r3   z<p><b>z</b></p>zu<div id="popup_relation_{0}" data-relation-id="{0}" data-referencing-layer-id="{1}" class="popup_lizmap_dd_relation">r@   )rH   r   )r]   r~   r   results       r   r\   z+Tooltip._generate_attribute_editor_relation   s_     6%!99$-006{DX0Y	
 	$-(**r   c                     d|  dS )z_ Use represent_value which should cover many use cases about returning a human display string. zrepresent_value("z")r{   r|   s    r   rU   z!Tooltip._generate_represent_value  s     #4&++r   r(   c                 ,    dj                  | ||      }|S )Na  
                    [%
                    concat(
                        '<div class="control-group ',
                        CASE
                            WHEN "{0}" IS NULL OR trim("{0}") = ''
                                THEN ' control-has-empty-value '
                            ELSE ''
                        END,
                        '">',
                        '    <label ',
                        '       id="dd_jforms_view_edition_{0}_label" ',
                        '       class="control-label jforms-label" ',
                        '       for="dd_jforms_view_edition_{0}" >',
                        '    {1}',
                        '    </label>',
                        '    <div class="controls">',
                        '        <span ',
                        '            id="dd_jforms_view_edition_{0}" ',
                        '            class="jforms-control-input" ',
                        '        >',
                                    {2},
                        '        </span>',
                        '    </div>',
                        '</div>'
                    )
                    %]r   )r!   r(   rb   rG   s       r   rZ   zTooltip._generate_field_name  s(    4 !&
5 	> r   rn   c           	         dt         dt         fd}t        | d   t              rqt               }| d   D ]^  }dt        |j	                               vs|j                         D ci c]  \  }} ||       ||       }}}|j                  |       ` nK| d   }|y|j                  d      r|d= |j                         D ci c]  \  }} ||       ||       }}}t        j                  |      }d| d| d	}	|	S c c}}w c c}}w )
Nvaluer   c                 &    | j                  dd      S )u)   Change ' to ’ for the HStore function. r$   r%   r&   )r   s    r   escape_valuez1Tooltip._generate_value_map.<locals>.escape_value6  s    ==e,,r   mapz<NULL>z''zE
                    map_get(
                        hstore_to_map('z%'),
                        replace("u%   ", '\'', '’')
                    ))
strrD   listdictkeysr   updategetr   build)
rn   r!   r   valuesrowxyrevertedhstorero   s
             r   rX   zTooltip._generate_value_map4  s"   	- 	- 	- mE*D1VF$U+ ,4
#33MPYY[YTQQa @YHYMM(+, #5)F~zz(#8$CI<<>R41al1o|A6RFR  %%f-((.x 0""& (

 +  Z Ss   %D Dc                 F   | d   }|t         j                  j                  k(  rdj                  ||      }|S |t         j                  j                  k(  rdj                  ||      }|S |t         j                  j
                  k(  rdj                  |      }|S t        d      )N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>'
                    )z
                    concat(
                        '<a href="',
                        "{0}",
                        '" target="_blank">',
                        base_file_name({0}),
                        '</a>'
                    )z Unknown external resource widget)r   DocumentViewerContentImager   Web	NoContent	Exception)rn   r!   r(   dviewro   s        r   rR   z#Tooltip._generate_external_resourceU  s    ./-CCIII  e, T ; /EEIII  e, 6  /EEOOO     >??r   c                 B    | j                  d      }|sd}d| d| d}|S )Ndisplay_formatz
yyyy-MM-ddz;
                    format_date(
                        "z",
                        'z'
                    ))r   )rn   r!   date_formatro   s       r   rY   zTooltip._generate_date  sC    #''(89&K  % '

 r   c                     d|  d| d}|S )Nz 
                    <p><strong>z1</strong>
                    <div class="field">z4</div>
                    </p>
                    r{   )r]   rb   rG   s      r   rI   zTooltip._generate_text_label  s)      %w '((2| 4
 r   c                  
    d} | S )z CSS for LWC <= 3.7. a:  <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{   csss    r   r   zTooltip.css  s    %L 
r   c                  
    d} | S )z" CSS for LWC from 3.8.0 to 3.8.6. aB  <style>
/* Flat style for editing forms & drag-and-drop designed popup */
div.popup_lizmap_dd ul.nav-tabs {
  border-bottom: 1px solid var(--color-contrasted-elements);
}

div.popup_lizmap_dd .nav-tabs > li > a {
  color: var(--color-text-primary);
  padding: 5px;
  border: none;
}

div.popup_lizmap_dd .nav > li > a:hover,
div.popup_lizmap_dd .nav > li > a:focus {
  text-decoration: none;
}

div.popup_lizmap_dd .nav-tabs > li > a:hover,
div.popup_lizmap_dd .nav-tabs > li > a:focus {
  background: none;
  border: none;
  border-bottom: 3px solid var(--color-contrasted-elements);
  color: var(--color-text-primary);
  cursor: pointer;
}

div.popup_lizmap_dd .nav-tabs > li.active > a,
div.popup_lizmap_dd .nav-tabs > li.active > a:hover,
div.popup_lizmap_dd .nav-tabs > li.active > a:focus {
  background: none;
  border: none;
  border-bottom: 3px solid var(--color-contrasted-elements);
  color: var(--color-text-primary);
  cursor: auto;
}

div.popup_lizmap_dd div.tab-pane {
  border-left: 1px solid var(--color-contrasted-elements);
  border-right: 1px solid var(--color-contrasted-elements);
  border-bottom: 1px solid var(--color-contrasted-elements);
  padding: 5px;
  padding-bottom: 10px;
  margin-bottom: 5px;
}

div.popup_lizmap_dd div.tab-pane.attribute-layer-child-content {
  border: none;
}

div.popup_lizmap_dd #tabform {
  border: none;
}

div.popup_lizmap_dd legend {
  color: var(--color-text-primary);
  border-bottom: none;
  padding: 5px;
  width: unset;
  max-width: 100%;
  margin-bottom: 0;
}

div.popup_lizmap_dd fieldset {
  padding: 10px;
  padding-top: 0;
  margin: 0 5px;
  border: 1px solid var(--color-contrasted-elements-light);
  border-radius: 5px;
  background: rgb(255 255 255 / 20%);
}
/* Minor adaptation for popup compared to editing form */
div.popup_lizmap_dd {
  font-size: 12px;
}
div.popup_lizmap_dd .form-horizontal .control-group {
  margin-bottom: 0px !important;
}
div.popup_lizmap_dd label {
  padding-top: 0px !important;
  font-size: 12px !important;
  width: 130px !important;
}
div.popup_lizmap_dd .controls {
  margin-left: 140px !important;
}
</style>
r{   r   s    r   	css_3_8_6zTooltip.css_3_8_6  s    Ul 
r   N)F)__name__
__module____qualname__staticmethodr   r   classmethodr   r    r)   r   r   intr   r
   boolrf   rQ   ra   r\   rU   rZ   r   rX   rR   rY   rI   r   r   r{   r   r   r   r   "   s   %3 %3 % % @t @ @ @
  S S  
  !&}!}+} } 	}
 } 1} } } }~ 3 3   8c 8c 8 8 	3 	S 	`c 	hk 	 	 , , , ,
  3  s        D 5t+< C C  @ .4 .s .3 .SV . .` d # #   C S S   ( ( (T Xs X Xr   r   )__doc__loggingrA   typingr   	qgis.corer   r   r   r   r   r	   r
   r   qgis.guir   qgis.PyQt.QtXmlr   	getLoggerrK   rH   __copyright____license__	__email__r   r{   r   r   <module>r      s\    7  	 	 	 	 / (			8	$	&	@ @r   