
    G@dV9                        d Z ddlZddlmZ ddlZddlZddlmZm	Z	m
Z
mZ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mZ ddlmZm Z  ddl!m"Z" ddl#m$Z$ dZ% G d d          Z& G d d          Z' G d d          Z(ddgZ)	 ddlm*Z* di fdZ+e+e_*        n# e,$ r Y nw xY w e            r
dej-        d<    G d de	          Z. G d de          Z/d Z0e1d k    r e0             dS dS )!z
PyDoc widget.
    N)QtQThreadQUrlSignalSlot)QCursor)	WEBENGINE)QApplicationQLabelQVBoxLayout_)PluginMainWidget)
is_pynsist)_start_server_url_handler)FrameWebViewWebViewActions)UrlComboBox)FindReplaceiu  c                       e Zd ZdZdZdS )PydocBrowserActionshome_actionfind_actionN)__name__
__module____qualname__HomeFind     Alib/python3.11/site-packages/spyder/plugins/onlinehelp/widgets.pyr   r   &   s        DDDDr!   r   c                       e Zd ZdZdS )PydocBrowserMainToolbarSectionsmain_sectionN)r   r   r   Mainr    r!   r"   r$   r$   ,   s        DDDr!   r$   c                       e Zd ZdZdZdS )PydocBrowserToolbarItemspackage_label	url_comboN)r   r   r   PackageLabelUrlCombor    r!   r"   r(   r(   0   s        "LHHHr!   r(   numpyz
numpy.core)
safeimportc                 <    | t           v rd}t          | ||          S )Nr   )	forceloadcache)DIRECT_PYDOC_IMPORT_MODULESr.   )pathr0   r1   s      r"   spyder_safeimportr4   ?   s(    ...I$)5AAAAr!   1PYDEVD_DISABLE_FILE_VALIDATIONc                   J    e Zd ZdZ e            Zd Zd Zd Zd Z	d Z
d ZdS )	PydocServerz
    Pydoc server.
    c                 h    t          j        | |           || _        d | _        d| _        d| _        d S )NF)r   __init__portservercompleteclosed)selfparentr;   s      r"   r:   zPydocServer.__init__T   s5    v&&&	r!   c                 d    |                      t          t          d| j                             d S )Nz	127.0.0.1)hostnamer;   )callbackr   r   r;   r?   s    r"   runzPydocServer.run\   s?    $Y  	
 	
 	
 	
 	
r!   c                     || _         | j        r|                                  d S | j                                         d S N)r<   r>   quit_serversig_server_startedemit)r?   r<   s     r"   rC   zPydocServer.callbacke   sF    ; 	+#((*****r!   c                     d| _         d S NT)r=   rD   s    r"   	completerzPydocServer.completerl   s    r!   c                 X    |                                  rdS | j        dS | j        j        S )zCheck if the server is runningTNF)	isRunningr<   servingrD   s    r"   
is_runningzPydocServer.is_runningo   s1    >> 	4;5{""r!   c                 t    d| _         | j        d S | j        j        r| j                                         d S d S rL   )r>   r<   rP   stoprD   s    r"   rH   zPydocServer.quit_serverz   sG    ;F; 	K	 	r!   N)r   r   r   __doc__r   rI   r:   rE   rC   rM   rQ   rH   r    r!   r"   r8   r8   N   s             
 
 
+ + +  	# 	# 	#    r!   r8   c                   J    e Zd ZdZdZ e            Z	 d! fd	Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Z fdZd Z ee          d"d            Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z  e            d             Z!d Z"d Z# ee          d              Z$ xZ%S )#PydocBrowserzPyDoc browser widget.TNc                 Z    t                                          |||           d _        d  _        d  _        t          t          d                     _        t          j	         j        _
        t           t          j                   _        t                                d                     _         j                                          j                                                 d                      j        j                             j                    j        j                             j                    j        j                             j                    j        j                             j                   t8          s$ j        j                             j                   t?                      _          j         !                     j                    j         "                                  j        #                                         d                     t          d	          } j        $                                %                    |            j        $                                &                    |            j        j'                             fd
           tQ                      }|)                     j                   |*                    d           |)                     j                     +                    |           d S )N)r@   FPackage:)id_handle_links)rZ   zoom_factormax_history_entriesz&Write a package name here, e.g. pandasc                 ,                                     S rG   )_handle_url_combo_activation)xr?   s    r"   <lambda>z'PydocBrowser.__init__.<locals>.<lambda>   s    d7799 r!      ),superr:   _is_runninghome_urlr<   r   r   labelr(   r+   IDr   r,   r*   r   get_confwebviewsetupset_zoom_factorloadStartedconnect_startloadFinished_finishtitleChangedsetWindowTitle
urlChanged_change_urlr	   iconChanged_handle_icon_changer   find_widget
set_editorhidesetMaxCountlineEditsetPlaceholderText
setToolTipvalidr   	addWidget
addSpacing	setLayout)r?   namepluginr@   tiplayout	__class__s   `     r"   r:   zPydocBrowser.__init__   s   vf555  AjMM**
0=
$.79 9 9 $~66
 
 
 	$$T]]=%A%ABBB ((555!))$,777!))$*=>>>''(8999 	GL$,,T-EFFF 't,,##DL111""4==1F#G#GHHH899!!44S999!!,,S111$$9999	; 	; 	; &&&!)***vr!   c                      t          d          S )NzOnline helpr   rD   s    r"   	get_titlezPydocBrowser.get_title   s    r!   c                 f    | j                                                                          | j         S rG   )r*   rz   	selectAllrD   s    r"   get_focus_widgetzPydocBrowser.get_focus_widget   s*    !!++---~r!   c                    |                      t          j        t          d          t          d          |                     d          | j                  }|                      t          j        t          d          t          d          |                     d          | j        d          }|                     t          j
                  }|                     t          j                  }|                                 }|                     t          j                  |                     t          j                  |||| j        | j        |                     t          j                  |                     t          j                  |f
D ]$}|                     ||t(          j        	           %| j        j                            |j                   |                                                                 D ]3\  }}|r,	 | j                            |           ## t<          $ r Y /w xY w4| j                            | j                    d S )
Nr   home)textr   icon	triggeredr   z	Find textfindF)r   r   r   toggledinitial)toolbarsection)!create_actionr   r   r   create_icongo_homer   toggle_find_widget
get_actionr   StopRefreshget_main_toolbarBackForwardre   r*   ZoomInZoomOutadd_item_to_toolbarr$   r&   rv   visibility_changedrl   
setCheckedget_actionsitemsrh   	addActionRuntimeErrorsig_toggle_view_changed
initialize)	r?   r   r   stop_actionrefresh_actionr   item__actions	            r"   ri   zPydocBrowser.setup   s%   (($6&		!!&))l ) 
 
 (($6+!!&))+ ) 
 
 oon&9::)?@@ ''))__^%899__^%;<<n +tz4>__^%:;;__^%;<<k	 
	 
	D $$7< %     	+33K4JKKK**,,2244 		 		JB 
L**62222#   D 	$,,T_=====s   H
H)(H)c                     |                      t          j                  }|                      t          j                  }|                    | j                    |                    | j                   d S rG   )r   r   r   r   
setVisiblerc   )r?   r   r   s      r"   update_actionszPydocBrowser.update_actions   sa    oon&9::)?@@!!d&6"6777t/00000r!   c                 d    d| _         |                                  |                                  dS )zWebview load started.TN)rc   start_spinnerr   rD   s    r"   rm   zPydocBrowser._start  s4    r!   c                     d| _         |                                  |                                  | j                                         dS )zWebview load finished.FN)rc   stop_spinnerr   sig_load_finishedrJ   )r?   codes     r"   ro   zPydocBrowser._finish  sI     ##%%%%%r!   c                 T    |                                   t          j                     dS )zLoad home page.N)r   r
   restoreOverrideCursorrD   s    r"   _continue_initializationz%PydocBrowser._continue_initialization  s$    *,,,,,r!   c                 `   | j         sOt          | j                                                  }|                     |                     |                     n1|                     t          j                  	                                 | 
                                                                 dS )z#Load URL from combo box first item.N)rc   strr*   currentTextgo_totext_to_urlr   r   r   triggerr   setFocusr?   r   s     r"   r^   z)PydocBrowser._handle_url_combo_activation  s     	;t~113344DJJt''--....OON/0088:::((*****r!   c                 `    | j                             |                     |                     dS )zF
        Displayed URL has changed -> updating URL combo box.
        N)r*   add_texturl_to_textr?   urls     r"   rs   zPydocBrowser._change_url  s.     	 0 0 5 566666r!   c                     | j                             | j                                         | j                                                   |                     | j                                                   dS )z&
        Handle icon changes.
        N)r*   setItemIconcurrentIndexrh   r   setWindowIconrD   s    r"   ru   z PydocBrowser._handle_icon_change#  sg     	""4>#>#>#@#@#'<#4#4#6#6	8 	8 	84<,,../////r!   c                    | j         j                                         | j        r8| j        j                            | j                   |                                  t                      	                    |           d S rG   )
rh   
web_widgetrS   r<   finishedrl   deleteLaterrH   rb   
closeEvent)r?   eventr   s     r"   r   zPydocBrowser.closeEvent-  sp    $$&&&; 	K (()9:::5!!!!!r!   c                 :    | j                             |           dS )z
        Load history.

        Parameters
        ----------
        history: list
            List of searched items.
        N)r*   addItems)r?   historys     r"   load_historyzPydocBrowser.load_history6  s      	(((((r!   Fc                    |o| j         du }|s|s|                                 s`| j                            | j                   t          j        t          t          j	                             | 
                                 dS dS )a  
        Start pydoc server.

        Parameters
        ----------
        checked: bool, optional
            This method is connected to the `sig_toggle_view_changed` signal,
            so that the first time the widget is made visible it will start
            the server. Default is True.
        force: bool, optional
            Force a server start even if the server is running.
            Default is False.
        N)r<   is_server_runningr   
disconnectr   r
   setOverrideCursorr   r   
WaitCursorstart_server)r?   checkedforceserver_neededs       r"   r   zPydocBrowser.initializeA  s      7DK4$7 	 M 	 )?)?)A)A 	 (33DODDD*72=+A+ABBB	  	 r!   c                 F    | j         duo| j                                         S )z/Return True if pydoc server is already running.N)r<   rQ   rD   s    r"   r   zPydocBrowser.is_server_runningV  s"    {$&C4;+A+A+C+CCr!   c                    | j         .|                     d                    t                               no| j                                         rV| j         j                            | j                   | j                                          | j         	                                 t          dt                    | _         | j         j                            | j                   | j                                          dS )zStart pydoc server.Nzhttp://127.0.0.1:{}/)r;   )r<   set_home_urlformatPORTrQ   rI   r   r   quitwaitr8   rl   startrD   s    r"   r   zPydocBrowser.start_serverZ  s    ;4;;DAABBBB[##%% 	K*55-/ / /KK!$T222&..)	+ 	+ 	+r!   c                 ,   | j         dS | j                                         rq| j         j                            | j                   | j                                          | j                                          | j                                          dS dS )zQuit the server.N)r<   rQ   rI   r   r   rH   r   r   rD   s    r"   rH   zPydocBrowser.quit_serveri  s    ;F;!!## 	K*55-/ / /K##%%%KK	 	r!   c                      t          d          S )zReturn address label textrX   r   rD   s    r"   	get_labelzPydocBrowser.get_labelu  s    }}r!   c                 J    | j         r| j                                         dS dS )zReload page.N)r<   rh   reloadrD   s    r"   r   zPydocBrowser.reloady  s0    ; 	"L!!!!!	" 	"r!   c                     |dk    r|dz  }|                     d          r
|dd         }t          | j                                        |z             S )z
        Convert text address into QUrl object.

        Parameters
        ----------
        text: str
            Url address.
        about:blankz.html/ra   N)
startswithr   rd   toStringr   s     r"   r   zPydocBrowser.text_to_url~  sZ     =  GOD??3 	8DDM**,,t3444r!   c                 "   |                                 }d|v rdS d|v sd|v r-|                                                     d          d         S t          j        t	          |                                                    d         dd         S )	z
        Convert QUrl object to displayed text in combo box.

        Parameters
        ----------
        url: QUrl
            Url address.
        r   zget?key=zsearch?key==r   ra   N)r   splitospsplitextr   r3   )r?   r   
string_urls      r"   r   zPydocBrowser.url_to_text  s     \\^^
J&& =:%%*)D)D<<>>'',,R00|C

OO,,Q/33r!   c                 .    t          |          | _        dS )zv
        Set home URL.

        Parameters
        ----------
        text: str
            Home url address.
        N)r   rd   r   s     r"   r   zPydocBrowser.set_home_url  s     T

r!   c                 Z    |                      |           |                     |           dS )z{
        Set current URL.

        Parameters
        ----------
        url: QUrl or str
            Url address.
        N)rs   r   r   s     r"   set_urlzPydocBrowser.set_url  s+     	

3r!   c                     t          |t                    rt          |          }n|}| j                            |           dS )z!
        Go to page URL.
        N)
isinstancer   r   rh   load)r?   url_or_textr   s      r"   r   zPydocBrowser.go_to  sF     k3'' 	{##CCC#r!   c                 L    | j         |                     | j                    dS dS )z"
        Go to home page.
        N)rd   r   rD   s    r"   r   zPydocBrowser.go_home  s.    
 =$LL''''' %$r!   c                 4    | j                                         S )zt
        Get the current zoom factor.

        Returns
        -------
        int
            Zoom factor.
        )rh   get_zoom_factorrD   s    r"   r  zPydocBrowser.get_zoom_factor  s     |++---r!   c                     g }t          | j                                                  D ]<}|                    t	          | j                            |                               =|S )z
        Return the list of history items in the combobox.

        Returns
        -------
        list
            List of strings.
        )ranger*   countappendr   itemText)r?   r   indexs      r"   get_historyzPydocBrowser.get_history  sb     4>//1122 	@ 	@ENN3t~66u==>>????r!   c                 r    |r| j                                          dS | j                                          dS )z
        Show/hide the find widget.

        Parameters
        ----------
        state: bool
            True to show and False to hide the find widget.
        N)rv   showrx   )r?   states     r"   r   zPydocBrowser.toggle_find_widget  sB      	$!!#####!!#####r!   )NNN)TF)&r   r   r   rT   ENABLE_SPINNERr   r   r:   r   r   ri   r   rm   ro   r   r^   rs   ru   r   r   r   boolr   r   r   rH   r   r   r   r   r   r   r   r   r  r  r   __classcell__)r   s   @r"   rV   rV      s>       N , , , , , ,`       0> 0> 0>d1 1 1  & & &- - -
+ + +7 7 70 0 0" " " " "	) 	) 	) 
T$ZZ      Z (D D D  
 
 
  " " "
5 5 5"4 4 4"	# 	# 	#
 
 
	 	 	 
TVV( ( V(	. 	. 	.   
T$ZZ$ $ Z$ $ $ $ $r!   rV   c                  >   ddl m}  ddlm}  |            }d|_         | d          }t          d|          }|                                 |                                 |                                 t          j
        |                                           dS )	zRun web browser.r   )qapplication)	MagicMock
onlinehelp   )	test_timeN)r   )spyder.utils.qthelpersr  unittest.mockr  CONF_SECTIONrV   _setupri   r
  sysexitexec_)r  r  plugin_mockappwidgets        r"   testr    s    333333'''''')++K+K
,
#
#
#C${333F
MMOOO
LLNNN
KKMMMHSYY[[r!   __main__)2rT   osos.pathr3   r   pydocr  qtpy.QtCorer   r   r   r   r   
qtpy.QtGuir   qtpy.QtWebEngineWidgetsr	   qtpy.QtWidgetsr
   r   r   spyder.api.translationsr   spyder.api.widgets.main_widgetr   spyder.config.baser   %spyder.plugins.onlinehelp.pydoc_patchr   r   spyder.widgets.browserr   r   spyder.widgets.comboboxesr   spyder.widgets.findreplacer   r   r   r$   r(   r2   r.   r4   	Exceptionenvironr8   rV   r  r   r    r!   r"   <module>r1     s   
 
			        



 8 7 7 7 7 7 7 7 7 7 7 7 7 7       - - - - - - < < < < < < < < < < & % % % % % ; ; ; ; ; ; ) ) ) ) ) ) M M M M M M M M ? ? ? ? ? ? ? ? 1 1 1 1 1 1 2 2 2 2 2 2
                        '5 
	      *+2 B B B B
 )E 	 	 	D	
 :<< 736BJ/02 2 2 2 2' 2 2 2jn$ n$ n$ n$ n$# n$ n$ n$b   zDFFFFF s   B) )B10B1