Merge branch 'qute-settings'

This commit is contained in:
Florian Bruhin 2014-11-25 23:25:16 +01:00
commit c2887b43e2
4 changed files with 81 additions and 5 deletions

View File

@ -154,6 +154,9 @@ class Application(QApplication):
config.init(self._args)
log.init.debug("Initializing crashlog...")
self._handle_segfault()
log.init.debug("Initializing js-bridge...")
js_bridge = qutescheme.JSBridge(self)
objreg.register('js-bridge', js_bridge)
log.init.debug("Initializing websettings...")
websettings.init()
log.init.debug("Initializing adblock...")

View File

@ -0,0 +1,39 @@
{% extends "base.html" %}
{% block script %}
var win_id = {{ win_id }};
var cset = function(section, option, el) {
value = el.value;
window.qute.set(win_id, section, option, value);
}
{% endblock %}
{% block style %}
table { border: 1px solid grey; border-collapse: collapse; }
pre { margin: 2px; }
th, td { border: 1px solid grey; padding: 0px 5px; }
th { background: lightgrey; }
th pre { color: grey; text-align: left; }
{% endblock %}
{% block content %}
<noscript><h1>View Only</h1><p>Changing settings requires javascript to be enabled</p></noscript>
<header><h1>{{ title }}</h1></header>
<table>
{% for section in config.DATA %}
<tr><th colspan="2"><h3>{{ section }}</h3><pre>{{ config.SECTION_DESC.get(section)|wordwrap(width=120) }}</pre></th></tr>
{% for d, e in config.DATA.get(section).items() %}
<tr>
<td>{{ d }} (Current: {{ e.value()|truncate(100) }})</td>
<td>
<input type="input"
onblur="cset('{{ section }}', '{{ d }}', this)"
value="{{ e.value() }}">
</input>
</td>
</tr>
{% endfor %}
{% endfor %}
</table>
{% endblock %}

View File

@ -27,11 +27,14 @@ Module attributes:
pyeval_output: The output of the last :pyeval command.
"""
from PyQt5.QtCore import pyqtSlot, QObject
from PyQt5.QtNetwork import QNetworkReply
import qutebrowser
from qutebrowser.network import schemehandler, networkreply
from qutebrowser.utils import version, utils, jinja, log, message, docutils
from qutebrowser.utils import (version, utils, jinja, log, message, docutils,
objreg)
from qutebrowser.config import configtypes, configdata
pyeval_output = ":pyeval was never called"
@ -78,6 +81,22 @@ class QuteSchemeHandler(schemehandler.SchemeHandler):
request, data, 'text/html', self.parent())
class JSBridge(QObject):
"""Javascript-bridge for special qute:... pages."""
def __init__(self, parent=None):
super().__init__(parent)
@pyqtSlot(int, str, str, str)
def set(self, win_id, sectname, optname, value):
"""Slot to set a setting from qute:settings."""
try:
objreg.get('config').set('conf', sectname, optname, value)
except configtypes.ValidationError as e:
message.error(win_id, e)
def qute_pyeval(_win_id, _request):
"""Handler for qute:pyeval. Return HTML content as bytes."""
html = jinja.env.get_template('pre.html').render(
@ -146,6 +165,13 @@ def qute_help(win_id, request):
return utils.read_file(path).encode('UTF-8', errors='xmlcharrefreplace')
def qute_settings(win_id, _request):
"""Handler for qute:settings. View/change qute configuration"""
html = jinja.env.get_template('settings.html').render(
win_id=win_id, title='settings', config=configdata)
return html.encode('UTF-8', errors='xmlcharrefreplace')
HANDLERS = {
'pyeval': qute_pyeval,
'version': qute_version,
@ -153,4 +179,5 @@ HANDLERS = {
'log': qute_log,
'gpl': qute_gpl,
'help': qute_help,
'settings': qute_settings,
}

View File

@ -289,9 +289,6 @@ class WebView(QWebView):
Args:
url: The URL to load as QUrl
Return:
Return status of self.load
"""
qtutils.ensure_valid(url)
urlstr = url.toDisplayString()
@ -299,7 +296,17 @@ class WebView(QWebView):
self.titleChanged.emit(urlstr)
self.cur_url = url
self.url_text_changed.emit(url.toDisplayString())
return self.load(url)
self.load(url)
if url.scheme() == 'qute':
frame = self.page().mainFrame()
frame.javaScriptWindowObjectCleared.connect(self.add_js_bridge)
def add_js_bridge(self):
"""Add the javascript bridge for qute:... pages."""
frame = self.sender()
if frame.url().scheme() == 'qute':
bridge = objreg.get('js-bridge')
frame.addToJavaScriptWindowObject('qute', bridge)
def zoom_perc(self, perc, fuzzyval=True):
"""Zoom to a given zoom percentage.