Link hinting
Description
This script allows a user to follow link by pressing Alt+number of the
link. Numbers are never over 5, to ease finger access.
Deploy it into ~/.surf/script.js
Needs some work on the script to permi buttons and textinput following...
Usage
Press Alt, then the number of the link, and finally fto follow the
link, only with left hand.
Author
Christian hahn <ch radamanthys de>
Code
// easy links for surf
// christian hahn <ch radamanthys de>, sep 2010
testcomplete = function() {
if(document.readyState=="complete") {
run(); return;
}
window.setTimeout("testcomplete()",200);
}
testcomplete();
run=function() {
// config , any css
var modkey = 18; //ctrl=17, alt=18
var cancelkey = 67; // c
var newwinkey = 84; // t
var openkey = 70; // f
var label_style = {"color":"black","fontSize":"10px","backgroundColor":"#27FF27","fontWeight":"normal","margin":"0px","padding":"0px","position":"absolute","zIndex":99};
var hl_style = {"backgroundColor":"#E3FF38","fontSize":"15px"};
var nr_base = 5; // >=10 : normal integer,
// globals
var ankers = document.getElementsByTagName("a");
var labels = new Object();
var ui_visible = false;
var input = "";
// functions
hl=function(t) {
for(var id in labels) {
if (t && id.match("^"+t)==t)
for(var s in hl_style)
labels[id].rep.style[s]=hl_style[s];
else
for(var s in label_style)
labels[id].rep.style[s]=label_style[s];
}
}
open_link=function(id, new_win) {
try {
var a = labels[input].a;
if(a && !new_win) window.location.href=a.href;
if(a && new_win) window.open(a.href,a.href);
} catch (e) {}
}
set_ui=function(s) {
var pos = "static";
ui_visible = true;
if(s == "hidden") {
ui_visible = false;
pos = "absolute";
input="";
}
for(var id in labels) {
labels[id].rep.style.visibility=s;
labels[id].rep.style.position=pos;
}
}
base=function(n, b) {
if(b>=10) return n.toString();
var res = new Array();
while(n) {
res.push( (n%b +1).toString() )
n=parseInt(n/b);
}
return res.reverse().join("");
}
// main
// create labels
for (var i=0; i<ankers.length; i++) {
var a = ankers[i];
if (!a.href) continue;
var b = base(i+1,nr_base);
var d = document.createElement("span");
d.style.visibility="hidden";
d.innerHTML=b;
for(var s in label_style)
d.style[s]=label_style[s];
labels[b]={"a":a, "rep":d};
a.parentNode.insertBefore(d, a.nextSibling);
}
// set key handler
window.onkeydown=function(e) {
if (e.keyCode == modkey) {
set_ui("visible");
}
}
window.onkeyup=function(e) {
if (e.keyCode == modkey ) {
open_link(input);
set_ui("hidden");
hl(input);
} else if (ui_visible) {
if(e.keyCode == newwinkey) {
open_link(input, true);
set_ui("hidden");
} else if(e.keyCode == cancelkey)
input="";
else if(e.keyCode == openkey) {
open_link(input);
set_ui("hidden");
} else
input += String.fromCharCode(e.keyCode);
hl(input);
}
}
}