kann jemand diese Funktionen kurz kommentieren, bzw. beschreiben was wo passiert... hier der Code...
<script language="JavaScript">
<![CDATA[ var note=4;
Die interne Variable "note" wird mit dem Integer-Wert 4 initialisiert.
var word=3;
Die interne Variable "word" wird mit dem Integer-Wert 3 initialisiert.
var notetype;
Die interne Variable "notetype" wird ohne Wert initialisiert.
var verses=1;
Die interne Variable "verses" wird mit dem Integer-Wert 1 initialisiert.
var verse=1;
Die interne Variable "verse" wird mit dem Integer-Wert 1 initialisiert.
var svgdoc;
Die interne Variable "notetype" wird ohne Wert initialisiert.
function init(event)
{
svgdoc = event.getCurrentNode().getOwnerDocument();
Die vordefinierte Variable svgdoc wird mit dem Dokument, in dem das von dem Event betroffene Node steckt, befüllt.
verses = svgdoc.getElementById("song").getAttribute("verses");
Die vordefinierte Variable verses wird mit dem "verses"-Attribut des #song-Elements aus dem in svgdoc gespeicherten XML(vermutlich SVG)-Dokument gefüllt.
svgdoc.getElementById("verse"+verse).setAttribute("style","visibility:visible");
Das Element #verse1 bekommt das CSS-Attribut visibility:visible zugewiesen, woraus man schlussfolgern kann, dass es vorher mit visibility:hidden ausgeblendet war.
PlayNextNote(evt);
Die Funktion PlayNextNote wird mit der undefinierten globalen Variable window.evt aufgerufen (enthält null) - vielleicht sollte hier lieber event übergeben werden?
}
function PlayNextNote(event)
{
var node;
Die interne Variable node wird ohne Wert initialisiert.
var nodes;
Die interne Variable nodes wird ohne Wert initialisiert.
var textnodes;
Die interne Variable textnodes wird ohne Wert initialisiert.
var sound;
Die interne Variable sound wird ohne Wert initialisiert.
try
{
Die nachfolgenden Zeilen werden mit try ... catch gekapselt, so dass Fehler abgefangen werden können - offenbar ist sich jemand hier nicht sicher, dass alle Browser diesen Code fehlerfrei unterstützen.
nodes = svgdoc.getElementsByTagName("use");
Die vordefinierte Variable nodes wird mit den use-Elementen aus svgdoc befüllt (Array von Nodes, außer im IE, der ein ganz komisches Iterations-Objekt zurückgibt).
textnodes = svgdoc.getElementsByTagName("text");
Die vordefinierte Variable textnodes wird mit den text-Elementen aus svgdoc befüllt.
// Skip the first 4 "use" elements - they are TrebleClef elements not notes
// Skip the first 3 "text" elements - they are beat info
if(note > 4)
Der folgende Code wird nur ausgeführt, wenn die Variable note größer als 4 ist.
{
nodes.item(note-1).setAttribute("class",notetype);
Das [note-1]te use-Tag bekommt das class-Attribut mit der im Moment noch uninitialisierten Variable nodetype befüllt.
// There is only 1 text node to skip
textnodes.item(word).setAttribute("class","words");
Das [word]te text-Tag (word wurde mit 3 initialisiert) bekommt das class-Attribut "words".
}
Der folgende Code wird auch dann ausgeführt, wenn die Variable note nicht größer als 4 ist.
if(note >= nodes.length && verse < verses)
Der folgende Code wird nur ausgeführt, wenn note größer gleich der Anzahl der Elemente in nodes ist (bzw. beim IE der Inhalt der length-Instanz des seltsamen Objekts) und verse kleiner als verses ist.
{
note=4;
Die vordefinierte Variable note wird mit dem Integer-Wert 4 befüllt.
svgdoc.getElementById("verse"+verse).setAttribute("style","visibility:hidden");
Ab hier kann mal jemand anders übernehmen :-)
verse++;
svgdoc.getElementById("verse"+verse).setAttribute("style","visibility:visible");
}if(note < nodes.length)
{
notetype= nodes.item(note).getAttribute("class");
nodes.item(note).setAttribute("class","highlightednote");
// There is only 1 text node to skip
textnodes.item(word+1).setAttribute("class","highlightedwords");
sound = nodes.item(note).getAttribute("note");
}
else
{
svgdoc.getElementById("verse"+verse).setAttribute("style","visibility:hidden");
verse=1;
svgdoc.getElementById("verse"+verse).setAttribute("style","visibility:visible");
return;
}node = svgdoc.getElementById("music");
node.setAttribute("dur",nodes.item(note).getAttribute("dur"));node.setAttribute("volume","10");
var mp3=svgdoc.getElementById(sound+".mp3").getAttribute("data");
node.setAttribute("xlink:href", mp3);
node.beginElementAt("0s");note++;
word++;}
catch(e)
{
alert("Error: "+e.description);
};
}]]>
</script>
Gruß, LX
RFC 1925, Satz 8: Es ist komplizierter als man denkt.