
    Je69                        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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_(        dejV                  d<    G d de	      Z, G d de      Z-d Z.e/dk(  r e.        yy# e*$ r Y =w xY w) z
PyDoc widget.
    N)QtQThreadQUrlSignalSlot)QCursor)	WEBENGINE)QApplicationQLabelQVBoxLayout_)PluginMainWidget)_start_server_url_handler)FrameWebViewWebViewActions)UrlComboBox)FindReplaceiu  c                       e Zd ZdZdZy)PydocBrowserActionshome_actionfind_actionN)__name__
__module____qualname__HomeFind     C/usr/lib/python3/dist-packages/spyder/plugins/onlinehelp/widgets.pyr   r   %   s    DDr    r   c                       e Zd ZdZy)PydocBrowserMainToolbarSectionsmain_sectionN)r   r   r   Mainr   r    r!   r#   r#   +   s    Dr    r#   c                       e Zd ZdZdZy)PydocBrowserToolbarItemspackage_label	url_comboN)r   r   r   PackageLabelUrlCombor   r    r!   r'   r'   /   s    "LHr    r'   numpyz
numpy.core)
safeimportc                 2    | t         v rd}t        | ||      S )Nr   )	forceloadcache)DIRECT_PYDOC_IMPORT_MODULESr-   )pathr/   r0   s      r!   spyder_safeimportr3   >   s    ..I$)5AAr    1PYDEVD_DISABLE_FILE_VALIDATIONc                   B    e Zd ZdZ e       Zd Zd Zd Zd Z	d Z
d Zy)	PydocServerz
    Pydoc server.
    c                 h    t        j                  | |       || _        d | _        d| _        d| _        y )NF)r   __init__portservercompleteclosed)selfparentr:   s      r!   r9   zPydocServer.__init__R   s.    v&	r    c                 Z    | j                  t        t        d| j                               y )Nz	127.0.0.1)hostnamer:   )callbackr   r   r:   r>   s    r!   runzPydocServer.runZ   s#    $YY	
r    c                     || _         | j                  r| j                          y | j                  j	                          y N)r;   r=   quit_serversig_server_startedemit)r>   r;   s     r!   rB   zPydocServer.callbackc   s.    ;;##((*r    c                     d| _         y NT)r<   rC   s    r!   	completerzPydocServer.completerj   s	    r    c                 j    | j                         ry| j                  y| j                  j                  S )zCheck if the server is runningTF)	isRunningr;   servingrC   s    r!   
is_runningzPydocServer.is_runningm   s,    >>;;{{"""r    c                     d| _         | j                  y | j                  j                  r| j                  j                          y y rK   )r=   r;   rO   stoprC   s    r!   rG   zPydocServer.quit_serverx   s8    ;;;;KK r    N)r   r   r   __doc__r   rH   r9   rD   rB   rL   rP   rG   r   r    r!   r7   r7   L   s/      
+	#r    r7   c                        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.Tc                 r    t            |||       d _        d  _        d  _        t        t        d             _        t        j                   j                  _
        t         t        j                         _        t          j                  d             _         j                   j#                           j                   j%                   j                  d              j                   j&                  j)                   j*                          j                   j,                  j)                   j.                          j                   j0                  j)                   j2                          j                   j4                  j)                   j6                         t8        s/ j                   j:                  j)                   j<                         t?                _          j@                  jC                   j                           j@                  jE                           j                  jG                   j                  d             t        d	      } j                  jI                         jK                  |        j                  jI                         jM                  |        j                  jN                  j)                   fd
       tQ               }|jS                   j                          |jU                  d       |jS                   j@                          jW                  |       y )N)r?   FPackage:)id_handle_links)rY   zoom_factormax_history_entriesz&Write a package name here, e.g. pandasc                 $    j                         S rF   )_handle_url_combo_activation)xr>   s    r!   <lambda>z'PydocBrowser.__init__.<locals>.<lambda>   s    d779 r       ),superr9   _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!   r9   zPydocBrowser.__init__   sA   vf5  AjM*
0==

$.779 $~6
 	$$T]]=%AB  ((5!!))$,,7!!))$*=*=>''(8(89LL$$,,T-E-EF 't,##DLL1""4==1F#GH89!44S9!,,S1$$9	; &!))*vr    c                     t        d      S )NzOnline helpr   rC   s    r!   	get_titlezPydocBrowser.get_title   s    r    c                 j    | j                   j                         j                          | j                   S rF   )r)   ry   	selectAllrC   s    r!   get_focus_widgetzPydocBrowser.get_focus_widget   s%    !++-~~r    c                    | j                  t        j                  t        d      t        d      | j	                  d      | j
                        }| j                  t        j                  t        d      t        d      | j	                  d      | j                  d      }| j                  t        j                        }| j                  t        j                        }| j                         }| j                  t        j                        | j                  t        j                        |||| j                  | j                   | j                  t        j"                        | j                  t        j$                        |f
D ]$  }| j'                  ||t(        j*                  	       & | j,                  j.                  j1                  |j2                         | j5                         j7                         D ]$  \  }}|s		 | j8                  j;                  |       & | j>                  j1                  | j@                         y # t<        $ r Y Xw xY w)
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Forwardrd   r)   ZoomInZoomOutadd_item_to_toolbarr#   r%   ru   visibility_changedrk   
setCheckedget_actionsitemsrg   	addActionRuntimeErrorsig_toggle_view_changed
initialize)	r>   r   r   stop_actionrefresh_actionr   item__actions	            r!   rh   zPydocBrowser.setup   s   (($$6&	!!&)ll ) 
 (($$6+!!&)++ ) 
 oon&9&9:)?)?@ '')__^%8%89__^%;%;<n +tzz4>>__^%:%:;__^%;%;<k	 
	D $$7<< % 
	 	++33K4J4JK**,224 		JB
LL**62		 	$$,,T__= $ s    I	IIc                     | j                  t        j                        }| j                  t        j                        }|j	                  | j
                          |j	                  | j
                         y rF   )r   r   r   r   
setVisiblerb   )r>   r   r   s      r!   update_actionszPydocBrowser.update_actions   sU    oon&9&9:)?)?@!!d&6&6"67t//0r    c                 R    d| _         | j                          | j                          y)zWebview load started.TN)rb   start_spinnerr   rC   s    r!   rl   zPydocBrowser._start   s"    r    c                     d| _         | j                          | j                          | j                  j	                          y)zWebview load finished.FN)rb   stop_spinnerr   sig_load_finishedrI   )r>   codes     r!   rn   zPydocBrowser._finish  s4     ##%r    c                 L    | j                          t        j                          y)zLoad home page.N)r   r
   restoreOverrideCursorrC   s    r!   _continue_initializationz%PydocBrowser._continue_initialization  s    **,r    c                 :   | j                   sDt        | j                  j                               }| j	                  | j                  |             n-| j                  t        j                        j                          | j                         j                          y)z#Load URL from combo box first item.N)rb   strr)   currentTextgo_totext_to_urlr   r   r   triggerr   setFocusr>   r   s     r!   r]   z)PydocBrowser._handle_url_combo_activation  si    t~~1134DJJt''-.OON//088:((*r    c                 X    | j                   j                  | j                  |             y)zF
        Displayed URL has changed -> updating URL combo box.
        N)r)   add_texturl_to_textr>   urls     r!   rr   zPydocBrowser._change_url  s!     	 0 0 56r    c                     | j                   j                  | j                   j                         | j                  j	                                | j                  | j                  j	                                y)z&
        Handle icon changes.
        N)r)   setItemIconcurrentIndexrg   r   setWindowIconrC   s    r!   rt   z PydocBrowser._handle_icon_change!  sP     	""4>>#>#>#@#'<<#4#4#6	84<<,,./r    c                    | j                   j                  j                          | j                  r?| j                  j                  j                  | j                         | j                          t        | %  |       y rF   )
rg   
web_widgetrR   r;   finishedrk   deleteLaterrG   ra   
closeEvent)r>   eventr   s     r!   r   zPydocBrowser.closeEvent+  sW    $$&;;KK  (()9)9:5!r    c                 :    | j                   j                  |       y)z
        Load history.

        Parameters
        ----------
        history: list
            List of searched items.
        N)r)   addItems)r>   historys     r!   load_historyzPydocBrowser.load_history4  s     	(r    c                    |xr | j                   du }|s|s| j                         sb| j                  j                  | j                         t        j                  t        t        j                               | j                          yy)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.initialize?  sh      7DKK4$7M)?)?)A((33DOOD**72==+AB *Br    c                 V    | j                   duxr | j                   j                         S )z/Return True if pydoc server is already running.N)r;   rP   rC   s    r!   r   zPydocBrowser.is_server_runningT  s#    {{$&C4;;+A+A+CCr    c                    | j                   %| j                  dj                  t                     n}| j                   j	                         rc| j                   j
                  j                  | j                         | j                   j                          | j                   j                          t        dt              | _         | j                   j
                  j                  | j                         | j                   j                          y)zStart pydoc server.Nzhttp://127.0.0.1:{}/)r:   )r;   set_home_urlformatPORTrP   rH   r   r   quitwaitr7   rk   startrC   s    r!   r   zPydocBrowser.start_serverX  s    ;;4;;DAB[[##%KK**55--/KKKK!$T2&&..))	+r    c                 N   | j                   y| j                   j                         r~| j                   j                  j                  | j                         | j                   j                          | j                   j                          | j                   j                          yy)zQuit the server.N)r;   rP   rH   r   r   rG   r   r   rC   s    r!   rG   zPydocBrowser.quit_serverg  su    ;;;;!!#KK**55--/KK##%KKKK $r    c                     t        d      S )zReturn address label textrW   r   rC   s    r!   	get_labelzPydocBrowser.get_labels  s    }r    c                 R    | j                   r| j                  j                          yy)zReload page.N)r;   rg   reloadrC   s    r!   r   zPydocBrowser.reloadw  s    ;;LL! r    c                     |dk7  r|dz  }|j                  d      r|dd }t        | j                  j                         |z         S )z
        Convert text address into QUrl object.

        Parameters
        ----------
        text: str
            Url address.
        about:blankz.html/r`   N)
startswithr   rc   toStringr   s     r!   r   zPydocBrowser.text_to_url|  sI     = GOD??38DDMM**,t344r    c                     |j                         }d|v ryd|v sd|v r"|j                         j                  d      d   S t        j                  t	        |j                                     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   r`   N)r   splitospsplitextr   r2   )r>   r   
string_urls      r!   r   zPydocBrowser.url_to_text  sj     \\^
J& :%*)D<<>'',R00||C
O,Q/33r    c                 $    t        |      | _        y)zv
        Set home URL.

        Parameters
        ----------
        text: str
            Home url address.
        N)r   rc   r   s     r!   r   zPydocBrowser.set_home_url  s     T
r    c                 H    | j                  |       | j                  |       y)z{
        Set current URL.

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

3r    c                 v    t        |t              rt        |      }n|}| j                  j	                  |       y)z!
        Go to page URL.
        N)
isinstancer   r   rg   load)r>   url_or_textr   s      r!   r   zPydocBrowser.go_to  s/     k3'{#CC#r    c                 T    | j                   | j                  | j                          yy)z"
        Go to home page.
        N)rc   r   rC   s    r!   r   zPydocBrowser.go_home  s#    
 ==$LL' %r    c                 6    | j                   j                         S )zt
        Get the current zoom factor.

        Returns
        -------
        int
            Zoom factor.
        )rg   get_zoom_factorrC   s    r!   r   zPydocBrowser.get_zoom_factor  s     ||++--r    c                     g }t        | j                  j                               D ]5  }|j                  t	        | j                  j                  |                   7 |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  sS     4>>//12 	@ENN3t~~66u=>?	@ r    c                 r    |r| j                   j                          y| j                   j                          y)z
        Show/hide the find widget.

        Parameters
        ----------
        state: bool
            True to show and False to hide the find widget.
        N)ru   showrw   )r>   states     r!   r   zPydocBrowser.toggle_find_widget  s+     !!#!!#r    )NNN)TF)&r   r   r   rS   ENABLE_SPINNERr   r   r9   r   r   rh   r   rl   rn   r   r]   rr   rt   r   r   r   boolr   r   r   rG   r   r   r   r   r   r   r   r   r   r  r   __classcell__)r   s   @r!   rU   rU      s    N ,` 0>d1&-
+70"	) 
$Z   (D
"
5"4"	#
	 
V( (	. 
$Z$ $r    rU   c                  
   ddl m}  ddlm}  |       }d|_         | d      }t        d|      }|j                          |j                          |j                          t        j                  |j                                y)	zRun web browser.r   )qapplication)	MagicMock
onlinehelp   )	test_timeN)r   )spyder.utils.qthelpersr  unittest.mockr  CONF_SECTIONrU   _setuprh   r	  sysexitexec_)r  r  plugin_mockappwidgets        r!   testr    sZ    3'+K+K

#C${3F
MMO
LLN
KKMHHSYY[r    __main__)0rS   osos.pathr2   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.plugins.onlinehelp.pydoc_patchr   r   spyder.widgets.browserr   r   spyder.widgets.comboboxesr   spyder.widgets.findreplacer   r   r   r#   r'   r1   r-   r3   	Exceptionenvironr7   rU   r  r   r   r    r!   <module>r/     s   
 
   
 8 7  - < < & ; M ? 1 2
      '5 
	 *+2 B
 )E 03

+ ,2' 2jn$# n$b zF {  		s   C CC