Javascript hat eine etwas andere Auffassung von von Objekten als die Meisten anderen Sprachen. Es folgt dabei eher den Expressions von Scheme als dem Namensgebenden Java oder dem Syntaxgebenden C: „Everything is an Object()“.
Das führt zu einigen interessanten Effekten, die hier aber nicht diskutiert werden sollen. Stattdessen (für neu und alt-Entwickler und „interessierte Nutzer“) hier eine Zusammenfassung der Logik hinter dem Affen (beziehungsweise seinem Code).
Der Edgemonkey verpestet nicht den globalen Kontext von Javascript sinnlos: alle Objekte werden als Eigenschaften des in window
injezierten Objektes EM
angelegt.
Klassennamen werden nach Konvention in CamelCase mit Großbuchstaben am Anfang geschrieben. Ausnahme: PNAPI
(Abkürzung!)
Dabei wird Konstruktor und assoziierter Prototyp nacheinander geschrieben (keine Class-Creation-Funktion).
Klassen, die nur in speziellem Kontext benötigt werden, sind unter diesem zu finden: PNAPI.PNBox
, da diese nur von PNAPI
erstellt werden.
Funktionsnamen der Objekte kennen 3 Schreibweisen:
ev_*
: Eventhandler für DOM-ElementeCamelCase
: extern aufgerufene Funktionen, besonders Module in EM.Pagehacks
camelCase
: reguläre FunktionenGrundsätzlich sind die generellen Erweiterungen wie Hilfsfunktionen für XPath oder Erweiterungen an String, Array etc. vorn angesiedelt. Normale Edgemonkey-Klassen haben jedoch keine besondere Reihenfolge, sind aber weitestgehend nach Themenkomplex konsistent.
Weitestgehend werden Features von JavaScript 1.8 genutzt, besonders die Mozilla-Erweiterungen zu Array und String. Wo möglich, wird mit forEach, Closures und Method Chaining gearbeitet, um den Code kurz und leicht verständlich zu halten.
Global ausgeführter Code findet sich am Dateiende.