Fix :view-source

This commit is contained in:
Florian Bruhin 2016-07-04 16:34:07 +02:00
parent 04ee021bdb
commit 822e193682
5 changed files with 25 additions and 19 deletions

View File

@ -1210,19 +1210,21 @@ class CommandDispatcher:
"""Show the source of the current page.""" """Show the source of the current page."""
# pylint: disable=no-member # pylint: disable=no-member
# WORKAROUND for https://bitbucket.org/logilab/pylint/issue/491/ # WORKAROUND for https://bitbucket.org/logilab/pylint/issue/491/
widget = self._current_widget() tab = self._current_widget()
if widget.viewing_source: if tab.data.viewing_source:
raise cmdexc.CommandError("Already viewing source!") raise cmdexc.CommandError("Already viewing source!")
frame = widget.page().currentFrame()
html = frame.toHtml() def show_source_cb(source):
lexer = pygments.lexers.HtmlLexer() lexer = pygments.lexers.HtmlLexer()
formatter = pygments.formatters.HtmlFormatter(full=True, formatter = pygments.formatters.HtmlFormatter(full=True,
linenos='table') linenos='table')
highlighted = pygments.highlight(html, lexer, formatter) highlighted = pygments.highlight(source, lexer, formatter)
current_url = self._current_url() current_url = self._current_url()
tab = self._tabbed_browser.tabopen(explicit=True) new_tab = self._tabbed_browser.tabopen(explicit=True)
tab.setHtml(highlighted, current_url) new_tab.set_html(highlighted, current_url)
tab.viewing_source = True new_tab.data.viewing_source = True
tab.dump_async(show_source_cb)
@cmdutils.register(instance='command-dispatcher', scope='window', @cmdutils.register(instance='command-dispatcher', scope='window',
debug=True) debug=True)

View File

@ -73,7 +73,10 @@ class TabData(QObject):
""" """
def __init__(self): def __init__(self):
self._data = {'keep_icon': False} self._data = {
'keep_icon': False,
'viewing_source': False,
}
def __getattr__(self, attr): def __getattr__(self, attr):
if attr.startswith('_'): if attr.startswith('_'):
@ -459,6 +462,11 @@ class AbstractTab(QWidget):
widget.setParent(self) widget.setParent(self)
self.setFocusProxy(widget) self.setFocusProxy(widget)
@pyqtSlot()
def _on_load_started(self):
self.data.viewing_source = False
self.load_started.emit()
@property @property
def cur_url(self): def cur_url(self):
raise NotImplementedError raise NotImplementedError

View File

@ -172,7 +172,7 @@ class WebEngineViewTab(tab.AbstractTab):
page.windowCloseRequested.connect(self.window_close_requested) page.windowCloseRequested.connect(self.window_close_requested)
page.linkHovered.connect(self.link_hovered) page.linkHovered.connect(self.link_hovered)
page.loadProgress.connect(self.load_progress) page.loadProgress.connect(self.load_progress)
page.loadStarted.connect(self.load_started) page.loadStarted.connect(self._on_load_started)
view.titleChanged.connect(self.title_changed) view.titleChanged.connect(self.title_changed)
page.loadFinished.connect(self.load_finished) page.loadFinished.connect(self.load_finished)
# FIXME:refactor # FIXME:refactor

View File

@ -512,7 +512,7 @@ class WebViewTab(tab.AbstractTab):
page.windowCloseRequested.connect(self.window_close_requested) page.windowCloseRequested.connect(self.window_close_requested)
page.linkHovered.connect(self.link_hovered) page.linkHovered.connect(self.link_hovered)
page.loadProgress.connect(self.load_progress) page.loadProgress.connect(self.load_progress)
frame.loadStarted.connect(self.load_started) frame.loadStarted.connect(self._on_load_started)
view.scroll_pos_changed.connect(self.scroll.perc_changed) view.scroll_pos_changed.connect(self.scroll.perc_changed)
view.titleChanged.connect(self.title_changed) view.titleChanged.connect(self.title_changed)
view.url_text_changed.connect(self.url_text_changed) view.url_text_changed.connect(self.url_text_changed)

View File

@ -50,8 +50,6 @@ class WebView(QWebView):
statusbar_message: The current javascript statusbar message. statusbar_message: The current javascript statusbar message.
inspector: The QWebInspector used for this webview. inspector: The QWebInspector used for this webview.
load_status: loading status of this page (index into LoadStatus) load_status: loading status of this page (index into LoadStatus)
viewing_source: Whether the webview is currently displaying source
code.
registry: The ObjectRegistry associated with this tab. registry: The ObjectRegistry associated with this tab.
win_id: The window ID of the view. win_id: The window ID of the view.
_tab_id: The tab ID of the view. _tab_id: The tab ID of the view.
@ -118,7 +116,6 @@ class WebView(QWebView):
window=win_id) window=win_id)
mode_manager.entered.connect(self.on_mode_entered) mode_manager.entered.connect(self.on_mode_entered)
mode_manager.left.connect(self.on_mode_left) mode_manager.left.connect(self.on_mode_left)
self.viewing_source = False
if config.get('input', 'rocker-gestures'): if config.get('input', 'rocker-gestures'):
self.setContextMenuPolicy(Qt.PreventContextMenu) self.setContextMenuPolicy(Qt.PreventContextMenu)
self.urlChanged.connect(self.on_url_changed) self.urlChanged.connect(self.on_url_changed)
@ -370,7 +367,6 @@ class WebView(QWebView):
def on_load_started(self): def on_load_started(self):
"""Leave insert/hint mode and set vars when a new page is loading.""" """Leave insert/hint mode and set vars when a new page is loading."""
self.progress = 0 self.progress = 0
self.viewing_source = False
self._has_ssl_errors = False self._has_ssl_errors = False
self._set_load_status(usertypes.LoadStatus.loading) self._set_load_status(usertypes.LoadStatus.loading)