From 0090a5655edf9929e9766484460bb82588d98e62 Mon Sep 17 00:00:00 2001 From: jez Date: Mon, 3 Jan 2011 13:28:09 +0800 Subject: Missed factoring out the link text generation. --- linkHints.js | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'linkHints.js') diff --git a/linkHints.js b/linkHints.js index a301846d..c0f5280f 100644 --- a/linkHints.js +++ b/linkHints.js @@ -87,10 +87,9 @@ var linkHintsBase = { // Initialize the number used to generate the character hints to be as many digits as we need to // highlight all the links on the page; we don't want some link hints to have more chars than others. var linkHintNumber = 0; - this.initHintStringGenerator(visibleElements); + this.initSetMarkerAttributes(visibleElements); for (var i = 0; i < visibleElements.length; i++) { - this.hintMarkers.push(this.createMarkerFor( - visibleElements[i], linkHintNumber, this.hintStringGenerator.bind(this))); + this.hintMarkers.push(this.createMarkerFor(visibleElements[i], linkHintNumber)); linkHintNumber++; } // Note(philc): Append these markers as top level children instead of as child nodes to the link itself, @@ -105,15 +104,17 @@ var linkHintsBase = { }, /* - * Takes a number and returns the string label for the hint. + * Sets the data attributes of the marker. Does not need to handle styling + * and positioning. MUST set the hintString property. */ - hintStringGenerator: function(linkHintNumber) {}, + setMarkerAttributes: function(linkHintNumber) {}, /* - * A hook for any necessary initialization for hintStringGenerator. Takes an + * A hook for any necessary initialization for setMarkerAttributes. Takes an * array of visible elements. Any return value is ignored. */ - initHintStringGenerator: function(visibleElements) {}, + initSetMarkerAttributes: function(visibleElements) { + }, /* * Returns all clickable elements that are not hidden and are in the current viewport. @@ -300,16 +301,11 @@ var linkHintsBase = { /* * Creates a link marker for the given link. */ - createMarkerFor: function(link, linkHintNumber, stringGenerator) { - var hintString = stringGenerator(linkHintNumber); - var linkText = link.element.innerHTML.toLowerCase(); - if (linkText == undefined) - linkText = ""; + createMarkerFor: function(link, linkHintNumber) { var marker = document.createElement("div"); marker.className = "internalVimiumHintMarker vimiumHintMarker"; - marker.innerHTML = this.spanWrap(hintString); - marker.setAttribute("hintString", hintString); - marker.setAttribute("linkText", linkText); + this.setMarkerAttributes(marker, link, linkHintNumber); + marker.innerHTML = this.spanWrap(marker.getAttribute("hintString")); // Note: this call will be expensive if we modify the DOM in between calls. var clientRect = link.rect; @@ -349,13 +345,15 @@ function initializeLinkHints() { logXOfBase: function(x, base) { return Math.log(x) / Math.log(base); }, - initHintStringGenerator: function(visibleElements) { + initSetMarkerAttributes: function(visibleElements) { this.digitsNeeded = Math.ceil(this.logXOfBase( visibleElements.length, settings.get('linkHintCharacters').length)); }, - hintStringGenerator: function(linkHintNumber) { - return this.numberToHintString(linkHintNumber, this.digitsNeeded); + setMarkerAttributes: function(marker, link, linkHintNumber) { + var hintString = this.numberToHintString(linkHintNumber, this.digitsNeeded); + marker.setAttribute("hintString", hintString); + return marker; }, /* @@ -411,8 +409,14 @@ function initializeLinkHints() { linkTextKeystrokeQueue: [], - hintStringGenerator: function(linkHintNumber) { - return (linkHintNumber + 1).toString(); + setMarkerAttributes: function(marker, link, linkHintNumber) { + var hintString = (linkHintNumber + 1).toString(); + var linkText = link.element.innerHTML.toLowerCase(); + if (linkText == undefined) + linkText = ""; + marker.setAttribute("hintString", hintString); + marker.setAttribute("linkText", linkText); + return marker; }, normalKeyDownHandler: function(event) { -- cgit v1.2.3