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)) {