index.md - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
index.md (3226B)
---
1 # Link hinting
2 ## Description
3 This script allows a user to follow link by pressing Alt+number of the
4 link. Numbers are never over 5, to ease finger access.
5 Deploy it into ~/.surf/script.js
6
7 *Needs some work on the script to permi buttons and textinput
8 following...*
9
10 ## Usage
11 Press `Alt`, then the number of the link, and finally `f`to follow the
12 link, only with left hand.
13
14 ## Author
15 Christian hahn <ch radamanthys de>
16
17 [dev mailing list](//lists.suckless.org/dev/1009/5996.html)
18
19
20 ## Code
21
22
23 // easy links for surf
24 // christian hahn <ch radamanthys de>, sep 2010
25
26 testcomplete = function() {
27 if(document.readyState=="complete") {
28 run(); return;
29 }
30 window.setTimeout("testcomplete()",200);
31 }
32 testcomplete();
33
34 run=function() {
35 // config , any css
36 var modkey = 18; //ctrl=17, alt=18
37 var cancelkey = 67; // c
38 var newwinkey = 84; // t
39 var openkey = 70; // f
40 var label_style = {"color":"black","fontSize":"10px","backgroundColor":"#27FF27","fontWeight":"normal","margin":"0px","padding":"0px","position":"absolute","zIndex":99};
41 var hl_style = {"backgroundColor":"#E3FF38","fontSize":"15px"};
42 var nr_base = 5; // >=10 : normal integer,
43
44 // globals
45 var ankers = document.getElementsByTagName("a");
46 var labels = new Object();
47 var ui_visible = false;
48 var input = "";
49
50 // functions
51 hl=function(t) {
52 for(var id in labels) {
53 if (t && id.match("^"+t)==t)
54 for(var s in hl_style)
55 labels[id].rep.style[s]=hl_style[s];
56 else
57 for(var s in label_style)
58 labels[id].rep.style[s]=label_style[s];
59 }
60 }
61 open_link=function(id, new_win) {
62 try {
63 var a = labels[input].a;
64 if(a && !new_win) window.location.href=a.href;
65 if(a && new_win) window.open(a.href,a.href);
66 } catch (e) {}
67 }
68 set_ui=function(s) {
69 var pos = "static";
70 ui_visible = true;
71 if(s == "hidden") {
72 ui_visible = false;
73 pos = "absolute";
74 input="";
75 }
76 for(var id in labels) {
77 labels[id].rep.style.visibility=s;
78 labels[id].rep.style.position=pos;
79 }
80 }
81 base=function(n, b) {
82 if(b>=10) return n.toString();
83 var res = new Array();
84 while(n) {
85 res.push( (n%b +1).toString() )
86 n=parseInt(n/b);
87 }
88 return res.reverse().join("");
89 }
90
91 // main
92 // create labels
93 for (var i=0; i<ankers.length; i++) {
94 var a = ankers[i];
95 if (!a.href) continue;
96 var b = base(i+1,nr_base);
97 var d = document.createElement("span");
98 d.style.visibility="hidden";
99 d.innerHTML=b;
100 for(var s in label_style)
101 d.style[s]=label_style[s];
102 labels[b]={"a":a, "rep":d};
103 a.parentNode.insertBefore(d, a.nextSibling);
104 }
105
106 // set key handler
107 window.onkeydown=function(e) {
108 if (e.keyCode == modkey) {
109 set_ui("visible");
110 }
111 }
112 window.onkeyup=function(e) {
113 if (e.keyCode == modkey ) {
114 open_link(input);
115 set_ui("hidden");
116 hl(input);
117 } else if (ui_visible) {
118 if(e.keyCode == newwinkey) {
119 open_link(input, true);
120 set_ui("hidden");
121 } else if(e.keyCode == cancelkey)
122 input="";
123 else if(e.keyCode == openkey) {
124 open_link(input);
125 set_ui("hidden");
126 } else
127 input += String.fromCharCode(e.keyCode);
128 hl(input);
129 }
130 }
131 }
132
133