First off, let me preface this by saying I just got back to the East Coast after catching a red-eye from San Francisco on Saturday night, so if I seem a bit incoherent, that’s likely why.
For those who are not aware, Alex was once a staunch standards advocate who has turned to what he considers, “the dark side.” In truth, he’s sick and tied of the dysfunctional nature of the W3C and other similar organizations and I can’t say I blame him. As his session pointed out, the W3C has 60+ paid, full-time staff and yet we saw literally no movement on either (X)HTML or CSS for over five years. That is a travesty.
So why is the process flawed? Well, for one, spec writing is largely an academic undertaking. In many cases there are invited experts in a Working Group (such as Andy Clarke in the CSS one), but, for the most part, specs are written by people who are not in the trenches. As Alex rightly points out, in fact, many times, the specs are nothing more than an official blessing of some proprietary technique or technology created by a member company. And good ideas that may be very useful to designers or developers are lost because of internal politics or because a browser vendor thinks it would be “too hard” to implement.
But back to Alex’s complaint…as his example of how Dojo is heretical, he showed this code example:
<div dojoType="dijit.form.HorizontalSlider"name="horizontal1"onChange="dojo.byId('slider1input').value=arguments;"value="10"maximum="100"minimum="0"showButtons="false"intermediateChanges="true"style="width:50%; height: 20px;"id="slider1"><!-- ... --></div>
The problem that Dojo is attempting to solve here is the inclusion of a slider form control, which does not exist under the current HTML Forms spec. In order to function, the widget requires several custom attributes to be placed on the element to provide information to assist in the creation of that slider. The fact that Alex “cannot” add these attributes to the document and maintain XHTML validity is a major source of annoyance for him and part of why he has decided that validation is no longer important.
But the truth is that Alex could make any or all of these attributes available to whatever elements he wants and still have a validating document by simply creating a DTD (based on any existing (X)HTML one) to include them. After all, the X in XHTML stands for extensible…the language is meant to be improved. Sure, there are some standardistas who think we shouldn’t muck about with the standards, but the powers that be put that extensibility in there for a reason (and I don’t think it was just as a tease). By extending the language to mix in features we desperately need, we drive innovation and, who knows, perhaps someone will take notice and add our extensions into the next version, thereby driving the evolution of the language so many of us desperately want.
The same goes for CSS. The W3C made CSS extensible by allowing for custom properties utilizing the
-*- syntax. Chances are, you’ve come across this when implementing
-webkit-border-radius (which, honestly, both seem superfluous to me when the CSS3 spec includes
border-radius as an actual property…why not just support that?). In my mind, this is ripe for use in extension of CSS, not by individual browser vendors (as that is proprietary and closed), but by us (in an open, cross-browser/cross-platform way) to achieve what we want or need that CSS currently does not offer us. That was the basis for my work on gFSS (an experiment in presentational Flash generated from CSS, debuted at Web Directions North this year) and another project I will be releasing in the next few months.
So, long story, long, I don’t think that Alex is a heretic. I think he can make a solid case for extending the language (and the interface) of the web for his particular needs (or the needs of his toolkit) as long as he backs it up with documentation in the form of a custom DTD.
What I’d prefer to see is something like this:
<select class="dojo-form-horizontalSlider"name="horizontal1"showButtons="false"intermediateChanges="true"id="slider1"><option>0</option><option>5</option><option selected="selected">10</option><!-- ... --><option>100</option></select>
There’s nothing that could keep Dojo from parsing that bit of XHTML and gleaning from it what it needs to make the slider. And now, when Dojo doesn’t run, there is a degradable interface for the user to adjust the setting. Sure, it may not be nearly as nice, but at least it works. Plus, it allows Dojo to be added as a progressive enhancement, which is what it should be.
And to make this valid syntax, the Dojo team just needs to augment the XHTML 1.0 Strict DTD like this to include the custom attributes:
<!ENTITY % Boolean"(true | false)">...<!-- attributes for Dojo ToolkitshowButtons display buttons (boolean)intermediateChanges display intermediate steps (boolean)--><!ENTITY % dojo-attrs"showButtons %Boolean #IMPLIEDintermediateChanges %Boolean #IMPLIED">...<!ATTLIST select%attrs;name CDATA #REQUIREDsize %Number; #IMPLIEDmultiple (multiple) #IMPLIEDdisabled (disabled) #IMPLIEDtabindex %Number; #IMPLIEDonfocus %Script; #IMPLIEDonblur %Script; #IMPLIEDonchange %Script; #IMPLIED%dojo-attrs;>