diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index bf01a2a17..1dca28d33 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -54,6 +54,7 @@ Changed a restart. - The adblocker now also blocks non-GET requests (e.g. POST) - `:follow-selected` now also works with QtWebEngine +- javascript: links can now be hinted Fixed ~~~~~ diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index a7a5941f9..3cc70f434 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -579,12 +579,10 @@ class HintManager(QObject): if elems is None: message.error("There was an error while getting hint elements") return - - filterfunc = webelem.FILTERS.get(self._context.group, lambda e: True) - elems = [e for e in elems if filterfunc(e)] if not elems: message.error("No elements found.") return + strings = self._hint_strings(elems) log.hints.debug("hints: {}".format(', '.join(strings))) diff --git a/qutebrowser/browser/navigate.py b/qutebrowser/browser/navigate.py index b1ab6f9b1..a3ec15458 100644 --- a/qutebrowser/browser/navigate.py +++ b/qutebrowser/browser/navigate.py @@ -79,8 +79,7 @@ def _find_prevnext(prev, elems): return e # Then check for regular links/buttons. - filterfunc = webelem.FILTERS[webelem.Group.prevnext] - elems = [e for e in elems if e.tag_name() != 'link' and filterfunc(e)] + elems = [e for e in elems if e.tag_name() != 'link'] option = 'prev-regexes' if prev else 'next-regexes' if not elems: return None diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index dce808871..d2e499b83 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -22,9 +22,6 @@ Module attributes: Group: Enum for different kinds of groups. SELECTORS: CSS selectors for different groups of elements. - FILTERS: A dictionary of filter functions for the modes. - The filter for "links" filters javascript:-links and a-tags - without "href". """ import collections.abc @@ -45,10 +42,11 @@ SELECTORS = { Group.all: ('a, area, textarea, select, input:not([type=hidden]), button, ' 'frame, iframe, link, [onclick], [onmousedown], [role=link], ' '[role=option], [role=button], img'), - Group.links: 'a, area, link, [role=link]', + Group.links: 'a[href], area[href], link[href], [role=link][href]', Group.images: 'img', Group.url: '[src], [href]', - Group.prevnext: 'a, area, button, link, [role=button]', + Group.prevnext: 'a[href], area[href], button[href], link[href], ' + '[role=button][href]', Group.inputs: ('input[type=text], input[type=email], input[type=url], ' 'input[type=tel], input[type=number], ' 'input[type=password], input[type=search], ' @@ -56,16 +54,6 @@ SELECTORS = { } -def filter_links(elem): - return 'href' in elem and QUrl(elem['href']).scheme() != 'javascript' - - -FILTERS = { - Group.links: filter_links, - Group.prevnext: filter_links, -} - - class Error(Exception): """Base class for WebElement errors.""" diff --git a/tests/end2end/data/hints/html/javascript.html b/tests/end2end/data/hints/html/javascript.html new file mode 100644 index 000000000..89395ff92 --- /dev/null +++ b/tests/end2end/data/hints/html/javascript.html @@ -0,0 +1,13 @@ + + + + + +
+ +