Felix Riesterer: Code-Beispiele im Wiki

Beitrag lesen

Lieber Matthias,

Wäre es denkbar, alle Beispiele nach dem Laden der Seite schon vorzubereiten? Dann brauchen sie per Klick nur noch eingeblendet werden.

es ist das "Einblenden" selbst, das hier verschiedene Zeitdauern hat, ungeachtet der Wartezeit auf die anzuzeigenden Daten. Der Browser muss für jeden Editor eine sehr erhebliche Anzahl an <div> generieren, in denen z.T. mehrere <span> mit passenden class-Attributen liegen. Die Erstellung eines Editors braucht nun einmal Zeit, bis die notwendigen Elementknoten erzeugt sind. Dazu kommen noch die Eventhandler für die Schaltflächen, mit denen man den Code zusammenfalten kann (z.B. bei function- oder if-Blöcken). Das Darstellen anhand der vergebenen class-Attribute kann dann auch noch bis zu ein paar Schrecksekunden dauern, je nach Aufwand der visuellen Eigenschaften (ich sah da einen Schatten-Effekt neben der Spalte mit den Zeilennummern, wenn man bei langen Zeilen nach rechts scrollt).

Um einen Editor zu erzeugen, ruft man window.ace.edit(<Elementknoten>) auf. Ob man direkt im Anschluss daran schon fertige Editoren gerendert bekommt, oder ob man dem Browser jetzt Zeit geben muss, diese auch wirklich zu "paint"en - da verstehe ich zu wenig von der Sache. Jedenfalls habe ich in den Docs keinen Hinweis auf ein passendes Event gefunden, das man abwarten könnte, um dann die resize-Funktion eines jeden sichtbaren Editors auszulösen. Und diese sorgt dafür, dass der ganze zur Verfügung stehende Platz für die Code-Zeilen benutzt wird.

Das im Hintergrund schon Vorbereiten scheitert daran, dass das Overlay selbst in einem Iframe läuft. Das bedeutet, dass ich alle im Iframe benötigten Elemente auch dort erzeugen (lassen) muss. Mir ist es mit IE schon passiert, dass ein im Elterndokument erzeugter Elementknoten beim Einfügen in das document-Objekt des Iframes zu Fehlern geführt hat, da der erzeugte Knoten in ein fremdes document-Objekt eingefügt werden sollte. Auch bei PHP kenne ich das Problem, dass man Knoten fremder Document-Instanzen erst importieren muss, bevor man sie im aktuellen Document einhängen kann. Der FF ist da anscheinend so freundlich, den Import still im Hintergrund automatisch vorzunehmen - und verstößt vielleicht sogar gegen irgendwelche Spezifikationen...

Liebe Grüße,

Felix Riesterer.