Jlog 1.1.0 veröffentlicht
Gestern, am 01. April 08 haben wir nun endlich Jlog 1.1.0 veröffentlicht. Nein, das ist kein verspäteter Aprilscherz ;-)
Lange genug hat diese Version auf sich warten lassen, dafür gibt es jetzt etwas mehr Sicherheit und vor allem UTF-8 Unterstützung, so dass auch einer Übersetzung der Sprachdateien in exotische Sprachen wie Chinesisch oder Japanisch nichts mehr im Wege steht.
Mehr Infos gibts in den Release Infos zu Jlog 1.1.0, Download über die Projektseite.
SFTP versagt (Debian)
Auf einmal sagt der SFTP-Client (hier Filezilla) nur noch:
Antwort: Fatal: unable to initialise SFTP: could not connect
Fehler: Verbindung kann nicht hergestellt werden!
In /var/log/auth.log steht lediglich:
Feb 22 17:10:43 v-10040 sshd[20317]: Accepted password for driehle from 87.xxx.xxx.xxx port 26252 ssh2
Feb 22 17:10:43 v-10040 sshd[20319]: (pam_unix) session opened for user driehle by (uid=0)
Feb 22 17:10:43 v-10040 sshd[20319]: subsystem request for sftp
Und /var/log/syslog weiß auch nichts zu berichten. Woran es lag? Daran:
v-10040 ~ # ls -la /dev/null
crw------- 1 root root 1, 3 2008-02-01 02:15 /dev/null
Außer root hat niemand Schreibrechte auf /dev/null, damit läuft SFTP nicht. Schnell rw-rw-rw- gesetzt und SFTP klappt wieder einwandfrei :-)
Comboboxen mit Javascript
Wer kennt das Problem nicht - wenn man in einem Formular Besuchern verschiedene Werte zur Auswahl geben möchte und trotzdem eine Möglichkeit bieten will eigene Texte zu formulieren, so steht man meist vor einem Problem. Auf Betriebssystem-Ebene gibt es hierfür die sogenannten Comboboxen, Browser kennen dieses Element für Webformulare jedoch nicht - hier also eine Variante ein ähnliches Verhalten mit Javascript nachzubasteln.
Für ein Webprojekt an dem ich derzeit arbeite habe ich mir dafür folgende Lösung überlegt, die auf Javascript basiert.
HTML-Code
<select id="feld_select" name="feld" onchange="ie_replace_caller(this, 'feld_own');">
<option>--</option>
<option>Option 1</option>
<option selected="selected">Option 2</option>
<option>Option 3</option>
</select>
<script type="text/javascript">
var select_elem = document.getElementById('feld_select');
var edit_option = new Option("Eigenen Text formulieren…", "", false, false);
edit_option.onclick = function () { replace_select(this, 'feld_own'); }
select_elem.options[select_elem.length] = edit_option;
document.write('<input type="text" id="feld_own" name="" size="40" maxlength="50" '
+ 'style="display: none;" onblur="text_controll(this, \'feld_select\');" \/>');
</script>
Dieser Code definiert ein Select-Element, welches mit Javascript dynamisch um eine Option "Eigenen Text formulieren…" ergänzt wird. Nach dem Select-Element wird per Javascript noch ein Text-Feld eingefügt, welches aber per CSS ausgeblendet ist.
Javascript-Code
function AuswahlReset (elem) {
for (i = 0; i < elem.length; i++)
if (elem.options[ i ].defaultSelected == true)
elem.options[ i ].selected = true;
}
function ie_replace_caller(elem, r_elem_id) {
if(window.execScript) {
if(elem.selectedIndex == elem.length - 1) {
replace_select(r_elem_id);
}
}
}
function replace_select(elem, r_elem_id) {
var r_elem = document.getElementById(r_elem_id);
var oldname = elem.name;
r_elem.name = oldname;
elem.name = "";
r_elem.style.display = "block";
elem.parentNode.style.display = "none";
r_elem.value = "Bitte Text eingeben…";
r_elem.focus();
r_elem.select();
return false;
}
function text_controll(r_elem, elem_id) {
var elem = document.getElementById(elem_id);
if(r_elem.value == "Bitte Text eingeben…" || r_elem.value == "") {
var oldname = r_elem.name;
elem.name = oldname;
r_elem.name = "";
elem.style.display = "block";
r_elem.style.display = "none";
AuswahlReset(elem);
}
}
Um das jetzt noch ganz sauber zu programmieren könnte man natürlich den Javascript-Code noch in eine eigene Klasse packen und das HTML-Dokument durchscannen, sodass per Javascript alle Select-Elemente einer bestimmten Klasse auf diese Art und Weise erweitert werden - aber darauf habe ich hier jetzt mal verzichtet ;-)
Live-Demo
Wie funktioniert es?
Mit den verwendeten Event-Handler wird bei der Auswahl des Eintrages "Eigenen Text formulieren…" das Select-Element ausgeblendet und stattdessen ein normales Textfeld angezeigt. Die Textbox erhält den Namen des Select-Elementes (nicht zu verwechseln mit der ID!) und das Select-Element erhält einen leeren Namen.
Verliert nun das Textfeld den Fokus, so wird geprüft ob in das Textfeld etwas eingegeben wurde. Ist dies nicht der Fall (Textfeld leer oder immer noch Standard-Text drin), so wird das Textfeld aus- und das Select-Element wieder eingeblendet. Die Namesänderung wird dabei ebenfalls wieder rückgängig gemacht.
Dieser Wechselvorgang ist beliebig oft wiederholbar. Dadurch, dass immer eines der Elemente einen leere Namen hat, ist sichergestellt, dass nie beide Elemente an den Server übertragen werden, wenn das Formular abgeschickt wird. Letztendlich kriegt der Server gar nichts davon mit, ob jetzt das Select-Element oder das Textfeld abgeschickt wurde.
Nachteile
Wenn der Besucher kein Javascript aktiviert hat, ist die Angabe eines alternativen Textes nicht möglich, jedoch funktioniert das Select-Element weiterhin ganz normal und kann nach wie vor entsprechend genutzt werden.
Im Falle meines Webprojektes ist es nicht weiter tragisch, wenn der User keine eigene Option formulieren kann, dann muss er halt mit einer der Standard-Optionen zufrieden sein. Als optionale Ergänzung halte ich diese Spielerei aber durchaus für sinnvoll.
- 19.12.2006 Vancouver Skyline (3)
- 13.12.2006 Wenn es dunkel wird... (3)
- 11.12.2006 Bald ist Weihnachten... (2)
- 01.12.2006 Fotografie im Schnee (2)
- 27.11.2006 Es ist Winter [Update] (4)
- 23.11.2006 Deutscher Abend (5)
- 26.10.2006 Ein Wochenende in Victoria (4)
- 17.10.2006 Mein neuer Regenschirm ;-) (3)
- 03.10.2006 Spielerei mit Bildern (7)
- 02.10.2006 Oh mein Gott!! (1)
- 23.09.2006 Am Hafen von NorthVancouver (5)
- 13.09.2006 Graphing Calculator (1)
- 08.09.2006 Kanada - Oder: wo bin ich? [Update] (6)
- 06.09.2006 Nun bin ich also auch dabei... (1)
Ältere Weblogeinträge gibt es im Archiv.



