Ashura: Update: User-JS Erweiterung

Hallo.

Vor einer Weile habe ich eine kleine Erweiterung für das User-JS geschrieben, welches registrierte Besucher nutzen können. (</archiv/2005/7/t111103/>)

Die Ermittlung des aktuellen Thementitels und -bereiches gefiel mir aber absolut nicht und lies mir auch erst einmal keine Ruhe.

Nun habe ich eine weitaus kürzere Methode gefunden, obiges zu ermitteln.
(In diesem Zuge danke ich Ingo für seinen Vorschlag, welcher mir einen brauchbaren Regulären Ausdruck beschert hat.)
Wer die Funktion also nutzen will kann sie gerne kopieren und in sein eigenes User-JS einfügen:

  
window.onload = inserthelper;  
  
function inserthelper()  
{  
    var regex = /^SELFHTML Forum: \((.+?)\)(.+)/;  
    var results = regex.exec(document.title);  
  
    var title = results[2].substr(1);  
    var category = results[1];  
  
    if (title && category) {  
  
        var tbody            = document.getElementsByTagName("tbody")[1];  
        var tr               = document.getElementsByTagName("tr")[5];  
  
        var thematr          = document.createElement("tr");  
        var themath          = document.createElement("th");  
        var thematd          = document.createElement("td");  
        var bereichtr        = document.createElement("tr");  
        var bereichth        = document.createElement("th");  
        var bereichtd        = document.createElement("td");  
  
        var themalabel       = document.createElement("label");  
        var themalabeltext   = document.createTextNode("Thema:");  
        var bereichlabel     = document.createElement("label");  
        var bereichlabeltext = document.createTextNode("Themenbereich:");  
  
        var themainput       = document.createElement("input");  
            themainput.setAttribute("type","text");  
            themainput.setAttribute("name","subject");  
            themainput.setAttribute("id","formular-thema");  
            themainput.setAttribute("value",title);  
            themainput.setAttribute("size","40");  
            themainput.setAttribute("class","eingabefeld");  
  
        var bereichselect    = document.createElement("select");  
            bereichselect.setAttribute("size","1");  
            bereichselect.setAttribute("name","cat");  
            bereichselect.setAttribute("id","formular-themenbereich");  
  
        var bereichoption    = document.createElement("option");  
  
        var bereiche = new Array(  
            "Bitte auswählen!",  
            "ASP",  
            "BARRIEREFREIHEIT",  
            "BROWSER",  
            "CGI",  
            "CSS",  
            "DATENBANK",  
            "DESIGN",  
            "DHTML",  
            "E-MAIL",  
            "FTP",  
            "GRAFIK",  
            "HTML",  
            "HTTP",  
            "INTERNET-ANBINDUNG",  
            "JAVA",  
            "JAVASCRIPT",  
            "MEINUNG",  
            "MENSCHELEI",  
            "PERL",  
            "PHP",  
            "PROGRAMMIERTECHNIK",  
            "PROJEKTVERWALTUNG",  
            "PROVIDER",  
            "RECHT",  
            "SERVER",  
            "SOFTWARE",  
            "SONSTIGES",  
            "VB-SCRIPT",  
            "XML",  
            "XML-DERIVAT",  
            "XSL",  
            "ZUR INFO",  
            "ZU DIESEM FORUM");  
  
        for (var i = 0; i < bereiche.length; i++) {  
            option = bereichoption.cloneNode(false);  
            if (bereiche[i] == "Bitte auswählen!") {  
                option.setAttribute("value","");  
            }  
            else {  
                option.setAttribute("value",bereiche[i]);  
            }  
  
            if (bereiche[i] == category) {  
                option.setAttribute("selected","selected");  
            }  
            optiontext = document.createTextNode(bereiche[i]);  
            option.appendChild(optiontext);  
  
            bereichselect.appendChild(option);  
        }  
  
        tbody.insertBefore(thematr,tr);  
  
        thematr     .appendChild(themath);  
        themath     .appendChild(themalabel);  
        themalabel  .appendChild(themalabeltext);  
        thematr     .appendChild(thematd);  
        thematd     .appendChild(themainput);  
  
        tbody.insertBefore(bereichtr,tr);  
  
        bereichtr   .appendChild(bereichth);  
        bereichth   .appendChild(bereichlabel);  
        bereichlabel.appendChild(bereichlabeltext);  
        bereichtr   .appendChild(bereichtd);  
        bereichtd   .appendChild(bereichselect);  
    }  
}  

Wie immer gilt: wer Fehler findet oder Verbesserungsvorschläge hat, kann sie mir gerne unterbreiten.
Das Skript ist lauffähig im Opera 8.02, Firefox 1.06 (und damit wahrscheinlich in allen aktuellen Gecko-Engine-basierten Browsern) und im IE 5.5+.

Einen schönen Samstag noch.

Gruß, Ashura

--
Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
[Deshalb frei! - Argumente pro freie Software]