diff --git a/common/content/buffer.js b/common/content/buffer.js index 6096564a..8d0d74d7 100644 --- a/common/content/buffer.js +++ b/common/content/buffer.js @@ -30,7 +30,7 @@ var Buffer = Module("buffer", { if (verbose) for (let link in engines) yield [link.title || /*L*/ "Engine " + n++, - {link.href}]; + {link.href}]; } if (!verbose && nEngines) diff --git a/common/content/hints.js b/common/content/hints.js index cc59d101..df878100 100644 --- a/common/content/hints.js +++ b/common/content/hints.js @@ -70,6 +70,15 @@ var HintSession = Class("HintSession", CommandMode, { hints.setClass(this.imgSpan, this.valid ? val : null); }, + get ambiguous() this.span.hasAttribute("ambiguous"), + set ambiguous(val) { + let meth = val ? "setAttribute" : "removeAttribute"; + this.elem[meth]("ambiguous", "true"); + this.span[meth]("ambiguous", "true"); + if (this.imgSpan) + this.imgSpan[meth]("ambiguous", "true"); + }, + get valid() this._valid, set valid(val) { this._valid = val, @@ -155,6 +164,21 @@ var HintSession = Class("HintSession", CommandMode, { return res.reverse().join(""); }, + /** + * The reverse of {@link #getHintString}. Given a hint string, + * returns its index. + * + * @param {string} str The hint's string. + * @returns {number} The hint's index. + */ + getHintNumber: function getHintNumber(str) { + let base = this.hintKeys.length; + let res = 0; + for (let char in values(str)) + res = res * base + this.hintKeys.indexOf(char); + return res; + }, + /** * Returns true if the given key string represents a * pseudo-hint-number. @@ -511,8 +535,10 @@ var HintSession = Class("HintSession", CommandMode, { for (let elem in util.evaluateXPath("//*[@dactyl:highlight='hints']", doc)) elem.parentNode.removeChild(elem); - for (let i in util.range(start, end + 1)) + for (let i in util.range(start, end + 1)) { + this.pageHints[i].ambiguous = false; this.pageHints[i].valid = false; + } } styles.system.remove("hint-positions"); @@ -586,12 +612,17 @@ var HintSession = Class("HintSession", CommandMode, { hint.span.setAttribute("number", str); if (hint.imgSpan) hint.imgSpan.setAttribute("number", str); + hint.active = activeHint == hintnum; + this.validHints.push(hint); hintnum++; } } + for (let [i, hint] in Iterator(this.validHints)) + hint.ambiguous = i * this.hintKeys.length < this.validHints.length; + if (options["usermode"]) { let css = []; for (let hint in values(this.pageHints)) {