diff --git a/common/content/hints.js b/common/content/hints.js index 95396c66..558ba84b 100644 --- a/common/content/hints.js +++ b/common/content/hints.js @@ -302,7 +302,7 @@ var HintSession = Class("HintSession", CommandMode, { rect.left > offsets.right || rect.right < offsets.left) return false; - if (!rect.width || !rect.height) + if (!rect.width && !rect.height) if (!Array.some(elem.childNodes, elem => elem instanceof Element && DOM(elem).style.float != "none" && isVisible(elem))) @@ -1125,7 +1125,7 @@ var Hints = Module("hints", { }, { isVisible: function isVisible(elem, offScreen) { let rect = elem.getBoundingClientRect(); - if (!rect.width || !rect.height) + if (!rect.width && !rect.height) if (!Array.some(elem.childNodes, elem => elem instanceof Element && DOM(elem).style.float != "none" && isVisible(elem))) diff --git a/common/modules/buffer.jsm b/common/modules/buffer.jsm index 9660d758..d41b703c 100644 --- a/common/modules/buffer.jsm +++ b/common/modules/buffer.jsm @@ -481,10 +481,13 @@ var Buffer = Module("Buffer", { let selector = path || options.get("hinttags").stringDefaultValue; + let relRev = ["next", "prev"]; + let rev = relRev[1 - relRev.indexOf(rel)]; + function followFrame(frame) { function iter(elems) { for (let i = 0; i < elems.length; i++) - if (elems[i].rel.toLowerCase() === rel || elems[i].rev.toLowerCase() === rel) + if (elems[i].rel.toLowerCase() === rel || elems[i].rev.toLowerCase() === rev) yield elems[i]; } @@ -492,18 +495,16 @@ var Buffer = Module("Buffer", { for (let elem in iter(elems)) yield elem; - elems = frame.document.getElementsByTagName("a"); - for (let elem in iter(elems)) - yield elem; - function a(regexp, elem) regexp.test(elem.textContent) === regexp.result || Array.some(elem.childNodes, child => (regexp.test(child.alt) === regexp.result)); function b(regexp, elem) regexp.test(elem.title) === regexp.result; - let res = Array.filter(frame.document.querySelectorAll(selector), Hints.isVisible); - for (let test in values([a, b])) + let res = Array.filter(frame.document.querySelectorAll(selector), + Hints.isVisible); + + for (let test of [a, b]) for (let regexp in values(regexps)) for (let i in util.range(res.length, 0, -1)) if (test(regexp, res[i])) @@ -2522,12 +2523,12 @@ var Buffer = Module("Buffer", { options.add(["nextpattern"], "Patterns to use when guessing the next page in a document sequence", - "regexplist", UTF8(/'^Next [>»]','^Next »','\bnext\b',^>$,^(>>|»)$,^(>|»),(>|»)$,'\bmore\b'/.source), + "regexplist", UTF8(/'^\s*Next Page\s*$','^\s*Next [>»]','\bnext\b',^>$,^(>>|»)$,^(>|»),(>|»)$,'\bmore\b'/.source), { regexpFlags: "i" }); options.add(["previouspattern"], "Patterns to use when guessing the previous page in a document sequence", - "regexplist", UTF8(/'[<«] Prev$','« Prev$','\bprev(ious)?\b',^<$,^(<<|«)$,^(<|«),(<|«)$/.source), + "regexplist", UTF8(/'^\s*Prev(ious)? Page\s*$','[<«] Prev\s*$','\bprev(ious)?\b',^<$,^(<<|«)$,^(<|«),(<|«)$/.source), { regexpFlags: "i" }); options.add(["pageinfo", "pa"],