Eine stressige Woche

Die letzten Tage sind echt stressig – es gibt an unserem Projekt viel zu tun und nächste Woche beginnt für mich wieder der reguläre Dienst im Freizeitheim.
Gestern habe ich z.B. den halben Tag damit verbracht, folgende Funktion in das Projekt zu integrieren:

Man hat links und rechts jeweils eine “Liste”. Die Elemente aus der der rechten Liste soll man in die linke Liste ziehen können. Natürlich so oft man will. Dann soll die linke Liste automatisch in der Datenbank gespeichert werden. Hört sich einfacher an, als man denkt: Diese Funktionalität soll mit PHP5 (Zend Framework) serverseitig realisiert werden. An sich kein Problem. Client-seitig kommt stinknormales HTML, CSS und JavaScript zum Einsatz. Und genau da liegt der Hase im Pfeffer vergraben. Die Library Scriptacolous sollte allgemein bekannt sein und bietet die Listefunktionalität, wie wir sie gebraucht haben.
Also habe ich sie in das Projekt integriert. Das Problem bestand nun darin, dass die Elemente in der rechten Liste in die linke Liste nicht kopiert sondern verschoben wurden. Bringt mir persönlich wenig, da man mehrere Elemente vom Typ A in der linken Liste haben soll.
Die komplette Lösung hier zu präsentieren, wäre ein wenig umfangreich, deshalb hier die Vorgehensweise:

Zuerst muss die linke und die rechte Liste dynamisch mit JavaScript erzeugt werden. Die rechte Liste deshalb, weil sie bei JEDER erfolgreichen Verschiebe-Aktion neu generiert werden muss.
Danach werden mit Hilfe von Scriptacolous die beiden Listen Sortable gemacht (Sortable.create(‘listeA’, {onUpdate:function() { _buildListeRechts(); _buildSortables() })).
In onUpdate lege ich fest, dass nach dem Verschieben zuerst die Quell-Liste (rechts) neu erstellt wird und dann die beiden Listen von neuem sortiert werden.

Nun kommt der nächste Punkt: die Methode _buildListeRechts() muss die einzelnen id-Attribute der Listenelemente bei jedem Aufruf sequenziell erhöhen. Ansonsten lassen sich die Elemente nicht verschieben, weil sie nicht eindeutig identifizierbar sind.

Im letzten Schritt muss die linke Liste noch gespeichert werden. Backendmäßig ist das kein Thema – das Problem liegt beim Frontend und bei der Serialisierung: Wir setzen JSON ein, die Methode Sortable.serialize() erzeugt einen GET-String. Könnte man auch verwenden, bricht aber unsere Vorgehensweise.
Deshalb müssen die serialisierten Daten nochmals nach JSON serialisiert werden.
Folgende Hilfsmethode erledigt das für uns:

    /**
     * Wandelt ein serialisiertes Sortable-Objekt in ein Array um.
     * Das Array wird so zurückgeliefert, dass auch das erste Element in der sortierten Liste den Index 0 hat.
     * @param string Name der Liste
     * @return array Sortierte Elemente
     */
    function _convertSerializedSortableToArray(aSortableObject) {
        var serialized = Sortable.serialize(aSortableObject);
        var entries = serialized.split("&");
        var regexp = aSortableObject + "\[\]\=(\w+)";
        var rArray = new Array();

        for (var i = 0, m = entries.length; i < m; i++) {
            var match = entries[i].match(regexp);
            rArray.push(match[1]);
        }

        return rArray;
    }

Wie schon geschrieben: Gestern saß ich da den halben Tag dran. Danach folgte dann ein Refactoring unserer JavaScript-AJAX-Klasse. Dies machte ich aber zu Hause und schickte mir die Klassen per Email. Gegen viertel nach elf nachts bin ich dann halbtot ins Bett gefallen.

Heute morgen startete ich dann mein Outlook und wollte die JavaScript-Dateien aus dem Anhang speichern. Outlook zeigte mir aber folgendes an: “Outlook hat den Zugriff auf die folgenden potenziell unsicheren Anlagen blockiert”.
Um die Dateien dennoch zu speichern, musste ich der Registry unter HKCUSoftwareMicrosoftOffice11.0OutlookSecurity die Zeichenfolge “Level1Remove” erstellen.
Als Wert mussten die Dateinamenserweiterungen eingetragen werden, die von Outlook ignoriert werden sollen. Also: “.js;.htm”.

Now to something completely different: Am Freitag spielt Boxing Fox in Gifhorn, Samstag werde ich wahrscheinlich nach Fallersleben aufs Altstadtfest. Also: hin da!

Comment ( 1 )

  1. / ReplyDSL
    Na dann, viel Spaß und Erfolg. Leider wird es bei mir nicht mit "hin da!" nach Fallersleben klappen. ;-)

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>