Standardbaserad DHTML-programmering

När man vill etikettera en lag på lagen.nu och klickar på ”Ändra” så skickas man inte till ett inmatningsformulär på en annan sida1; istället görs den beiga rutan med existerande etiketter om till ett inmatningsformulär, med tangentbordsfokus satt i textrutan. Man behöver inte ens klicka på ”Ändra”, det räcker med <acceleratorknapp>2+Ä. Det där är lite DHTML-magi av enklaste sorten, men just nu är det den roligaste programmeringen jag vet.

Vilket jag inte hade trott för fem år sedan. Jag hade lekt med Javascript sedan Netscape 2.0-tiden (då man i princip bara kunde ändra text i inmatningsfält) och det har alltid känts härkigt. Javascript var ett fult språk och ”API”:et var dåligt, ostandardiserat och hade sjukt många olika egenheter på olika webläsar/operativsystemplattformar. Debugmöjligheter var begränsade till ”debug by printfalert()”. När allting eskalerade i en inkompatibilitetens kapprustning nånstans runt 4.0-versionerna av IE och NS fick jag nog.

Men idag ser världen annorlunda ut. API:et (DOM) är rätt smutt. Webläsarna stödjer det överlag ganska bra, och kompatibilitetsproblemen är överlag kända och runtarbetade. Och den fula ankungen till språk som var javascript har plötsligt blivit, om än inte en svan, så åtminstone ett ganska snyggt dynamiskt typat språk med objektorientering, högre ordningens funktioner och closures och grejjer. Och som kronan på verket har den nya häftiga buzzakronymen AJAX kommit att nästan ersätta det gamla skamfilade ”DHTML”.

För ett tag sedan såg jag en recension på slashdot av boken ”DHTML Utopia: Modern Web Design Using JavaScript & DOM”, och, eftersom jag redan lurade på lite fräcka summer of 2005-funktioner beställde jag den. Det är en jättebra bok. Inte för tjock, inte en referensbok, utan bara en koncis guide till vad man egenligen kan göra med javascript nuförtiden. Boken håller sig till stora delar borta från flashiga effekter och förklarar ganska grundligt exakt hur de mer grundläggande sakerna i språket verkligen funkar.

Det stora aha-ögonblicket kom när jag läste kapitlet om eventhantering (som, tillsammans med några andra kapitel, går att ladda ner här). Jag, som alltid gjort javascriptande med diverse onClick="doSomething()"-kod, insåg att precis som jag kan binda utseende till element med CSS utan att röra HTML-koden, så kan jag binda beteende till element med javascript (addEventListener/attachEvent) utan att röra HTML-koden. När man har en sajt med 16632 statiska HTML-sidor är det en big win.

Och, som extra bonus kan man nu debugga sin javascriptkod på ett vettigt sätt. Mozillas kombination av javascriptdebuggern och DOM-inspectorn gör att det är galet lätt att få sin kod att funka i Mozilla-baserade browsers. Därifrån är det ibland problem att få saker att funka i Opera, Safari/Konqueror och IE, men ”DHTML Utopia” hjälper en bra bit på vägen med en pragmatisk inställning till browserbugworkarounds.

Så, ja, om tiden tillåter blir det mer DHTML-festival på lagen.nu? Gillar du det inte? Ladda ner lagarna i XML-format och transformera dem till hur tråkig HTML du vill!

Nu har det varit mycket tekniksnack flera dagar i rad här. Imorgon blir det en passionerad rant om lagstiftningsteknik.

1: Det stämmer faktiskt inte riktigt, om man har javascript avslaget skickas man till ett vanligt amish-formulär. Graceful degradation IN DA HOUSE!

2: ”Alt” på Windows/Firefox, ”Ctrl” på Mac/Safari, och på Opera funkar det inte alls ety den verkar inte kunna binda svenska tecken till acceleratorer på det viset.

Lazy-ass C# developers

In this
article
about new features in VS.NET ”Whidbey”:

It’s also worth noting that C# does not support Edit and Continue. This is currently
a Visual Basic .NET only feature, and I know of no statement that C# will support
this in the Whidbey release.

What the fuck?! I was surprised when Edit and continue wasn’t available for C# in
the original VS.NET, then outraged when it wasn’t in VS.NET 2003. Now they’re telling
me this essential feature won’t even be available in Whidbey?! And this for the
supposed Microsoft darling language, C#?

Fuck this. I’m gonna be a lisp head instead.