From 59536828a15ac04846ca799e2d9f1182ac38e1b5 Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Sun, 16 Oct 2016 16:50:11 +0200 Subject: [PATCH 1/3] Implement hint target "current" for webengine --- qutebrowser/browser/webelem.py | 16 +--------------- qutebrowser/browser/webengine/webengineelem.py | 11 +++++------ qutebrowser/browser/webkit/webkitelem.py | 15 ++++++++++++++- qutebrowser/javascript/webelem.js | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index 7f7aab1dd..2903aec72 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -162,11 +162,6 @@ class AbstractWebElement(collections.abc.MutableMapping): """Insert the given text into the element.""" raise NotImplementedError - def parent(self): - """Get the parent element of this element.""" - # FIXME:qtwebengine get rid of this? - raise NotImplementedError - def rect_on_view(self, *, elem_geometry=None, no_js=False): """Get the geometry of the element relative to the webview. @@ -294,16 +289,7 @@ class AbstractWebElement(collections.abc.MutableMapping): def remove_blank_target(self): """Remove target from link.""" - elem = self - for _ in range(5): - if elem is None: - break - tag = elem.tag_name() - if tag == 'a' or tag == 'area': - if elem.get('target', None) == '_blank': - elem['target'] = '_top' - break - elem = elem.parent() + raise NotImplementedError def resolve_url(self, baseurl): """Resolve the URL in the element's src/href attribute. diff --git a/qutebrowser/browser/webengine/webengineelem.py b/qutebrowser/browser/webengine/webengineelem.py index 39489eb9a..1874389e0 100644 --- a/qutebrowser/browser/webengine/webengineelem.py +++ b/qutebrowser/browser/webengine/webengineelem.py @@ -117,12 +117,6 @@ class WebEngineElement(webelem.AbstractWebElement): js_code = javascript.assemble('webelem', 'insert_text', self._id, text) self._tab.run_js_async(js_code) - def parent(self): - """Get the parent element of this element.""" - # FIXME:qtwebengine get rid of this? - log.stub() - return None - def rect_on_view(self, *, elem_geometry=None, no_js=False): """Get the geometry of the element relative to the webview. @@ -163,3 +157,8 @@ class WebEngineElement(webelem.AbstractWebElement): log.webelem.debug("Couldn't find rectangle for {!r} ({})".format( self, rects)) return QRect() + + def remove_blank_target(self): + js_code = javascript.assemble('webelem', 'remove_blank_target', + self._id) + self._tab.run_js_async(js_code) diff --git a/qutebrowser/browser/webkit/webkitelem.py b/qutebrowser/browser/webkit/webkitelem.py index 6ce4e9292..717db2cf8 100644 --- a/qutebrowser/browser/webkit/webkitelem.py +++ b/qutebrowser/browser/webkit/webkitelem.py @@ -145,7 +145,8 @@ class WebKitElement(webelem.AbstractWebElement): this.dispatchEvent(event); """.format(javascript.string_escape(text))) - def parent(self): + def _parent(self): + """Get the parent element of this element.""" self._check_vanished() elem = self._elem.parent() if elem is None or elem.isNull(): @@ -283,6 +284,18 @@ class WebKitElement(webelem.AbstractWebElement): visible_in_frame = visible_on_screen return all([visible_on_screen, visible_in_frame]) + def remove_blank_target(self): + elem = self + for _ in range(5): + if elem is None: + break + tag = elem.tag_name() + if tag == 'a' or tag == 'area': + if elem.get('target', None) == '_blank': + elem['target'] = '_top' + break + elem = elem._parent() + def get_child_frames(startframe): """Get all children recursively of a given QWebFrame. diff --git a/qutebrowser/javascript/webelem.js b/qutebrowser/javascript/webelem.js index 6a5e1425f..602e6b261 100644 --- a/qutebrowser/javascript/webelem.js +++ b/qutebrowser/javascript/webelem.js @@ -159,5 +159,19 @@ window._qutebrowser.webelem = (function() { elements[id].setAttribute(name, value); }; + funcs.remove_blank_target = function(id) { + var elem = elements[id]; + while (elem !== null) { + var tag = elem.tagName.toLowerCase(); + if (tag === "a" || tag === "area") { + if (elem.getAttribute("target") === "_blank") { + elem.setAttribute("target", "_top"); + } + break; + } + elem = elem.parentElement; + } + }; + return funcs; })(); From 2ae9f14d22ebb38e088ac603245e948599196405 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 18 Oct 2016 06:22:45 +0200 Subject: [PATCH 2/3] Add pylint disable --- qutebrowser/browser/webkit/webkitelem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/browser/webkit/webkitelem.py b/qutebrowser/browser/webkit/webkitelem.py index 717db2cf8..93b58bd34 100644 --- a/qutebrowser/browser/webkit/webkitelem.py +++ b/qutebrowser/browser/webkit/webkitelem.py @@ -294,7 +294,7 @@ class WebKitElement(webelem.AbstractWebElement): if elem.get('target', None) == '_blank': elem['target'] = '_top' break - elem = elem._parent() + elem = elem._parent() # pylint: disable=protected-access def get_child_frames(startframe): From de2f054112e0761678e9a427208d7c11258b1732 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 18 Oct 2016 06:22:59 +0200 Subject: [PATCH 3/3] Update authors --- README.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.asciidoc b/README.asciidoc index 0afb5eb47..32a72baef 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -159,8 +159,8 @@ Contributors, sorted by the number of commits in descending order: * Joel Torstensson * Patric Schmitz * Tarcisio Fedrizzi -* Claude * Kevin Velghe +* Claude * Corentin Julé * meles5 * Philipp Hansch