Samstag, 29. Januar 2011

Google-Suche: Wechsel zwischen Sprachversionen

// ==UserScript==
// @name           Sprache wechseln
// @namespace      Google
// @include        http://www.google.*/*
// ==/UserScript==

// config = [ [ name, site, hl ], ... ]
config = [ [ 'de', 'de', 'de' ], ['fr', 'fr', 'fr'], ['com', 'com', 'en'] ];

function editMenu() {
    par = new Array();
    val = new Array();
    c = 0;
    withFP = false;
    hl = '';
    known=false;

    if(config.length < 1) { return; }

    // URL lesen
    m = location.href.match(/^(http:\/\/[^\.]*\.google\.([^\/]+))(\/.*)$/);
    if(m == null) {
    return; // URL wurde nicht verstanden - Nichts machen
    } else {
    urlbase = m[1];
    site = m[2];
    path = m[3];

    m = path.match(/^\/([^\?#]*)\??(.*)$/);

    if(m != null) {
        action = m[1];
        params = m[2];

        m = params.split(/[#&]/);
        for(i=0;i<m.length;i++) {
        n = m[i].match(/^([^=]*)=?(.*)$/);
        if(n[1] == 'fp') {
            withFP=true;
        } else {
            if(n[1] == 'hl') hl=n[2];
            par[c] = n[1];
            val[c] = n[2];
            c++;
        }
        }
    } else {
        action = "webhp";
        params = "";
    }
    }

    if(action=="") action="webhp";

    if(hl=='') {
    if(site=='com') hl='en';
    if(site=='de') hl='de';
    if(site=='fr') hl='fr';
    }

    paramsNoHL = ''; params='';
    for(i=0;i<par.length;i++) {
    if(par[i] != '') {
        params += par[i]+'='+val[i]+'&';
        if(par[i] != 'hl') paramsNoHL += par[i]+'='+val[i]+'&';
    }
    }

    // Wenn das Parameter fp vorhanden ist, dann
    // Seite neuladen, sonst funktionniert das Skript nicht.
    // Ich verstehe nicht ganz, wie es geht, aber mit diesem Parameter
    // (wann/wie ist es hinzugefügt?) ist die Seite nicht ganz geladen,
    // das Toolbar ist nicht vorhanden. Jedoch wird es doch neugeladen,
    // denn die Änderungen nicht mehr da sind. Also egal, einfach ohne
    // das Parameter neuladen, damit das Skript seine Arbeit auf die
    // vollständige Seite machen kann.
    if(withFP) {
    location.replace(urlbase+'/'+action+'?'+params) ;
    return;
    }

    // Menu erstellen
    span = document.createElement('span');
   
    span.appendChild(document.createTextNode('('));

    for(i=0;i<config.length;i++) {
    if(site==config[i][1] && hl==config[i][2]) {
        known = true;
        newE = document.createElement('b');
    } else {
        newE = document.createElement('a');
        newE.setAttribute('onclick','gbar.qs(this)');
        newE.setAttribute('href', 'http://www.google.'+config[i][1]+'/'+action+'?hl='+config[i][2]+'&'+paramsNoHL);
    }
    newE.className ='gb1';
    newE.appendChild(document.createTextNode(config[i][0]));
    newE.setAttribute('style','margin-right: 0em;');
    span.appendChild(newE);
   
    if(i<config.length - 1)
        span.appendChild(document.createTextNode(', '));
    }

    if(known == false) {
    span.appendChild(document.createTextNode(' / '));
   
    newE = document.createElement('b');
    newE.className = 'gb1';
    newE.appendChild(document.createTextNode(hl+'.'+site));
    newE.setAttribute('style','margin-right: 0em;');
    span.appendChild(newE);
    }

    span.appendChild(document.createTextNode(') '));
    list = document.getElementById('gbar').firstChild;
    target = list.firstChild;
    document.getElementById('gbar').firstChild.insertBefore(span, target);
}

editMenu();

Keine Kommentare:

Kommentar veröffentlichen