Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Hints links pour surf

Surf a pour but de permettre la navigation avec le clavier. Cependant, jusqu'à présent, il fallait cliquer sur un lien pour y aller. C'est révolu avec ce dont nous allons parler ici : le link hints

Comment ça marche?

J'ai modifié le code proposé sur la liste de diffusion pour le clavier azerty. Pour suivre un lien, appuyez sur Alt. Vous voyez alors apparaître un petit chiffre à côté de chaque lien.

Tout en maintenant Alt appuyé, entrez le chiffre du code que vous voulez suivre. Il se colorera alors en jaune. Remarquez que les chiffres ne sont composés que de 1 à 5, histoire de pouvoir accéder à l'ensemble des touches alt, shift et 12345 avec la main gauche seule.

Une fois le chiffre entré, appuyez sur f, et hop! Sinon, appuyez sur c pour annuler.

Installation

Il faut insérer ce code dans le fichier ~/.surf/scripts.js :

// 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 &amp;&amp; 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 &amp;&amp; !new_win) window.location.href=a.href;
            if(a &amp;&amp; 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);
        }
    }
}

source

Voir aussi

Il existe une autre méthode proposée ici, où on copie du code aussi dans le fichier ~/.surf/script.js