[ Impressum ]

Liste aller Klassen und Schnittstellen in einem Zebra-Paket

www.Rozek.de > Zebra > Investigation > ClassesInPackage
Zebra[1]-Pakete sind nichts anderes als JavaScript-Objekte. Folglich können die JavaScript-Mechanismen zur Analyse von Objekten auch dazu genutzt werden, einen Blick in ein Zebra-Paket zu werfen.

Dabei ist allerdings darauf zu achten, dass auch wirklich nur Zebra-Klassen (bzw. -Schnittstellen) herausgefiltert (und irgendwelche Paketvariablen ignoriert) werden.

Dazu muss man wissen, dass Zebra-Klassen (und -Schnittstellen) offenbar eine interne Klassenvariable namens "_hash_" vom Typ String besitzen, deren Inhalt mit "$zebra_" beginnt.

Klassen und Schnittstellen lassen sich mithilfe der Klassenvariable "$parent" unterscheiden: Objekte mit dieser Variable sind Klassen (selbst wenn diese Variable null ist) - Objekte ohne "$parent" sind Schnittstellen.

Liste aller Zebra-Klassen in einem Zebra-Paket

Mit diesem Wissen ausgestattet, ist die Implementierung einer Funktion, die die Namen aller Klassen in einem gegebenen Zebra-Paket in Form eines Array liefert, ganz einfach:
zebra.ClassesInPackage = function ClassesInPackage (Package, sorted) {
var ClassList = [];
for (var ClassName in Package) {
if (Package.hasOwnProperty(ClassName)) {
var Class = Package[ClassName];
if (
(typeof(Class) === 'function') &&
(typeof(Class._hash_) === 'string') &&
(Class._hash_.slice(0,7) === '$zebra_')
) {
if ('$parent' in Class) { // ignore any interfaces
ClassList.push(ClassName);
};
};
};
};


if (!!sorted) { ClassList.sort() };
return ClassList;
};

Das folgende kleine JSFiddle liefert die Namen aller Klassen im Paket zebra.ui:



Wenn Sie den Paketnamen im Aufruf von ClassesInPackage ändern, können Sie auch andere Pakete untersuchen.

Den Quelltext der Funktion zebra.ClassesInPackage können Sie sich hier herunterladen - die Funktion ist aber auch Bestandteil meines kompletten "ZebraTweaks"-Paketes.

Liste aller Zebra-Schnittstellen in einem Zebra-Paket

Die Liste aller Schnittstellen ergibt sich ganz ähnlich:
zebra.InterfacesInPackage = function InterfacesInPackage (Package, sorted) {
var InterfaceList = [];
for (var InterfaceName in Package) {
if (Package.hasOwnProperty(InterfaceName)) {
var Interface = Package[InterfaceName];
if (
(typeof(Interface) === 'function') &&
(typeof(Interface._hash_) === 'string') &&
(Interface._hash_.slice(0,7) === '$zebra_')
) {
if (!('$parent' in Interface)) { // ignore any classes
InterfaceList.push(InterfaceName);
};
};
};
};


if (!!sorted) { InterfaceList.sort() };
return InterfaceList;
};

Auch hierzu steht wieder ein JSFiddle bereit:



Den Quelltext der Funktion zebra.InterfacesInPackage können Sie sich hier herunterladen - die Funktion ist aber auch Bestandteil meines kompletten "ZebraTweaks"-Paketes.

Viel Spaß damit!

Literaturhinweise

[1]
Andrei Vishneuski
HTML5 Rich UI JavaScript Library
Zebra ist eine noch relativ neue JavaScript-Bibliothek für grafische Benutzeroberflächen in Web-Anwendungen. Diese Seite ist der primäre Anlaufpunkt, wenn Sie sich für Zebra interessieren.