mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-22 17:57:58 +01:00
tab-support for hints
This commit is contained in:
@@ -29,6 +29,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
|
|||||||
vimperator.Hints = function() //{{{
|
vimperator.Hints = function() //{{{
|
||||||
{
|
{
|
||||||
var linkNumString = ""; // the typed link number is in this string
|
var linkNumString = ""; // the typed link number is in this string
|
||||||
|
var linkNum = 1; // only the numerical part of the hint
|
||||||
var submode = ""; // used for extended mode, can be "o", "t", "y", etc.
|
var submode = ""; // used for extended mode, can be "o", "t", "y", etc.
|
||||||
|
|
||||||
// hints[] = [elem, text, span, imgspan, elem.style.backgroundColor, elem.style.color]
|
// hints[] = [elem, text, span, imgspan, elem.style.backgroundColor, elem.style.color]
|
||||||
@@ -48,7 +49,7 @@ vimperator.Hints = function() //{{{
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
var x = 0, y = 0;
|
var x = 0, y = 0;
|
||||||
var elem = valid_hints[0];
|
var elem = valid_hints[linkNum - 1];
|
||||||
var elemTagName = elem.localName.toLowerCase();
|
var elemTagName = elem.localName.toLowerCase();
|
||||||
elem.focus();
|
elem.focus();
|
||||||
if (elemTagName == 'frame' || elemTagName == 'iframe')
|
if (elemTagName == 'frame' || elemTagName == 'iframe')
|
||||||
@@ -80,7 +81,7 @@ vimperator.Hints = function() //{{{
|
|||||||
if (valid_hints.length < 1)
|
if (valid_hints.length < 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var elem = valid_hints[0];
|
var elem = valid_hints[linkNum - 1];
|
||||||
var doc = window.content.document;
|
var doc = window.content.document;
|
||||||
var elemTagName = elem.localName.toLowerCase();
|
var elemTagName = elem.localName.toLowerCase();
|
||||||
if (elemTagName == 'frame' || elemTagName == 'iframe')
|
if (elemTagName == 'frame' || elemTagName == 'iframe')
|
||||||
@@ -114,9 +115,9 @@ vimperator.Hints = function() //{{{
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (text)
|
if (text)
|
||||||
var loc = valid_hints[0].href;
|
var loc = valid_hints[linkNum - 1].href;
|
||||||
else
|
else
|
||||||
var loc = valid_hints[0].textContent;
|
var loc = valid_hints[linkNum - 1].textContent;
|
||||||
|
|
||||||
vimperator.copyToClipboard(loc);
|
vimperator.copyToClipboard(loc);
|
||||||
vimperator.echo("Yanked " + loc, vimperator.commandline.FORCE_SINGLELINE);
|
vimperator.echo("Yanked " + loc, vimperator.commandline.FORCE_SINGLELINE);
|
||||||
@@ -127,7 +128,7 @@ vimperator.Hints = function() //{{{
|
|||||||
if (valid_hints.length < 1)
|
if (valid_hints.length < 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var elem = valid_hints[0];
|
var elem = valid_hints[linkNum - 1];
|
||||||
var doc = elem.ownerDocument;
|
var doc = elem.ownerDocument;
|
||||||
var url = makeURLAbsolute(elem.baseURI, elem.href);
|
var url = makeURLAbsolute(elem.baseURI, elem.href);
|
||||||
var text = elem.textContent;
|
var text = elem.textContent;
|
||||||
@@ -145,6 +146,9 @@ vimperator.Hints = function() //{{{
|
|||||||
|
|
||||||
function generate(win)
|
function generate(win)
|
||||||
{
|
{
|
||||||
|
if (hintsGenerated)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!win)
|
if (!win)
|
||||||
win = window.content;
|
win = window.content;
|
||||||
|
|
||||||
@@ -211,18 +215,17 @@ vimperator.Hints = function() //{{{
|
|||||||
{
|
{
|
||||||
vimperator.statusline.updateInputBuffer("");
|
vimperator.statusline.updateInputBuffer("");
|
||||||
linkNumString = "";
|
linkNumString = "";
|
||||||
|
linkNum = 1;
|
||||||
hints = [];
|
hints = [];
|
||||||
valid_hints = [];
|
valid_hints = [];
|
||||||
canUpdate = false;
|
canUpdate = false;
|
||||||
hintsGenerated = false;
|
hintsGenerated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showHints(win, str, start_idx)
|
function showHints(win, start_idx)
|
||||||
{
|
{
|
||||||
if (!win)
|
if (!win)
|
||||||
win = window.content;
|
win = window.content;
|
||||||
if (!str)
|
|
||||||
str = "";
|
|
||||||
|
|
||||||
if (win.document.body.localName.toLowerCase() == "frameset")
|
if (win.document.body.localName.toLowerCase() == "frameset")
|
||||||
{
|
{
|
||||||
@@ -231,7 +234,7 @@ vimperator.Hints = function() //{{{
|
|||||||
vimperator.echo("hint support for frameset pages not fully implemented yet");
|
vimperator.echo("hint support for frameset pages not fully implemented yet");
|
||||||
}
|
}
|
||||||
|
|
||||||
vimperator.log("Show hints matching: " + str, 7);
|
vimperator.log("Show hints matching: " + linkNumString, 7);
|
||||||
|
|
||||||
var doc = win.document;
|
var doc = win.document;
|
||||||
var scrollX = doc.defaultView.scrollX;
|
var scrollX = doc.defaultView.scrollX;
|
||||||
@@ -242,7 +245,7 @@ vimperator.Hints = function() //{{{
|
|||||||
|
|
||||||
var height = window.content.innerHeight;
|
var height = window.content.innerHeight;
|
||||||
var width = window.content.innerWidth;
|
var width = window.content.innerWidth;
|
||||||
var find_tokens = str.split(/ +/);
|
var find_tokens = linkNumString.split(/ +/);
|
||||||
valid_hints = [];
|
valid_hints = [];
|
||||||
|
|
||||||
outer:
|
outer:
|
||||||
@@ -257,13 +260,14 @@ outer:
|
|||||||
{
|
{
|
||||||
if (text.indexOf(find_tokens[k]) < 0)
|
if (text.indexOf(find_tokens[k]) < 0)
|
||||||
{
|
{
|
||||||
// reset background color
|
|
||||||
elem.style.backgroundColor = hints[i][4];
|
|
||||||
elem.style.color = hints[i][5];
|
|
||||||
span.style.display = "none";
|
span.style.display = "none";
|
||||||
if (imgspan)
|
if (imgspan)
|
||||||
imgspan.style.display = "none";
|
imgspan.style.display = "none";
|
||||||
|
|
||||||
|
// reset background color
|
||||||
|
elem.style.backgroundColor = hints[i][4];
|
||||||
|
elem.style.color = hints[i][5];
|
||||||
|
|
||||||
continue outer;
|
continue outer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -298,7 +302,7 @@ outer:
|
|||||||
{
|
{
|
||||||
if (!imgspan)
|
if (!imgspan)
|
||||||
{
|
{
|
||||||
if (hintnum == 1)
|
if (hintnum == linkNum)
|
||||||
elem.style.backgroundColor = "#88FF00";
|
elem.style.backgroundColor = "#88FF00";
|
||||||
else
|
else
|
||||||
elem.style.backgroundColor = "yellow";
|
elem.style.backgroundColor = "yellow";
|
||||||
@@ -314,13 +318,12 @@ outer:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vimperator.log("Hinted " + valid_hints.length + " items of " + hints.length + " matching " + str, 7);
|
vimperator.log("Hinted " + valid_hints.length + " items of " + hints.length + " matching " + linkNumString, 7);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeHints(doc, timeout)
|
function removeHints(doc, timeout)
|
||||||
{
|
{
|
||||||
vimperator.log(timeout);
|
|
||||||
if (!doc)
|
if (!doc)
|
||||||
{
|
{
|
||||||
vimperator.log("Argument doc is required for internal removeHints() method", 9);
|
vimperator.log("Argument doc is required for internal removeHints() method", 9);
|
||||||
@@ -411,7 +414,7 @@ outer:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var loc = valid_hints.length > 0 ? valid_hints[0].href : "";
|
var loc = valid_hints.length > 0 ? valid_hints[linkNum - 1].href : "";
|
||||||
switch (submode)
|
switch (submode)
|
||||||
{
|
{
|
||||||
case ";": focusHint(); break;
|
case ";": focusHint(); break;
|
||||||
@@ -438,6 +441,7 @@ outer:
|
|||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
canUpdate = true;
|
canUpdate = true;
|
||||||
linkNumString = "";
|
linkNumString = "";
|
||||||
|
linkNum = 1;
|
||||||
vimperator.statusline.updateInputBuffer("");
|
vimperator.statusline.updateInputBuffer("");
|
||||||
}, timeout);
|
}, timeout);
|
||||||
}
|
}
|
||||||
@@ -468,6 +472,7 @@ outer:
|
|||||||
vimperator.modes.set(vimperator.modes.HINTS, mode);
|
vimperator.modes.set(vimperator.modes.HINTS, mode);
|
||||||
submode = minor || "o"; // open is the default mode
|
submode = minor || "o"; // open is the default mode
|
||||||
linkNumString = filter || "";
|
linkNumString = filter || "";
|
||||||
|
linkNum = 1;
|
||||||
canUpdate = false;
|
canUpdate = false;
|
||||||
|
|
||||||
generate();
|
generate();
|
||||||
@@ -477,7 +482,7 @@ outer:
|
|||||||
mt.processNextEvent(true);
|
mt.processNextEvent(true);
|
||||||
|
|
||||||
canUpdate = true;
|
canUpdate = true;
|
||||||
showHints(null, linkNumString);
|
showHints(null);
|
||||||
if (valid_hints.length == 0)
|
if (valid_hints.length == 0)
|
||||||
{
|
{
|
||||||
vimperator.beep();
|
vimperator.beep();
|
||||||
@@ -517,6 +522,23 @@ outer:
|
|||||||
linkNumString += " ";
|
linkNumString += " ";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "<Tab>":
|
||||||
|
case "<S-Tab>":
|
||||||
|
var oldElem = valid_hints[linkNum - 1];
|
||||||
|
if (key == "<Tab>")
|
||||||
|
{
|
||||||
|
if (++linkNum > valid_hints.length)
|
||||||
|
linkNum = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (--linkNum < 1)
|
||||||
|
linkNum = valid_hints.length;
|
||||||
|
}
|
||||||
|
oldElem.style.backgroundColor = "yellow";
|
||||||
|
valid_hints[linkNum - 1].style.backgroundColor = "#88FF00";
|
||||||
|
return;
|
||||||
|
|
||||||
case "<BS>":
|
case "<BS>":
|
||||||
if (linkNumString == "")
|
if (linkNumString == "")
|
||||||
{
|
{
|
||||||
@@ -557,7 +579,7 @@ outer:
|
|||||||
if (!hintsGenerated && linkNumString.length > 0)
|
if (!hintsGenerated && linkNumString.length > 0)
|
||||||
generate();
|
generate();
|
||||||
|
|
||||||
showHints(null, linkNumString);
|
showHints(null);
|
||||||
processHints(followFirst);
|
processHints(followFirst);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user