[whatwg] [WA1] Idea for Calendar Markup

    I like the idea of a calendar in Web Applications 1.0, but I really 
hate the way they're currently implemented. For one thing, if the 
|class| attribute contains the name of a calendar attribute, how do you 
style the element? What happens if you use |class| to style something, 
and the class happens to be the name of a calendar attribute? Does it 
style that attribute.

    Nope, I prefer to stick with good old-fashioned elements. Here's an 
example of what I'd like to see, minus the fallback content:

| <calendar>
|   <cevent id="e036f260-39b4-11d9-ad3f-fc68600c1802">
|     <csummary value="That thing we did that was so fun."></csummary>
|     <cattr type="status" value="CONFIRMED"></cattr>
|     <cattr type="class" value="PRIVATE"></cattr>
|     <cattr type="categories" value="Work"></cattr>
|     <cattr type="x-mozilla-alarm-default-length" value="0"></cattr>
|     <cattr type="dtstamp" value="2005-02-02T21:00Z"></cattr>
|     <cdatetime start="2005-02-30T19:00Z" end="2005-02-30T21:00Z">
|     </cdatetime>
|   </cevent>
| </calendar>

    Basic stuff like the summary and the start and end dates are defined 
specifically. The rest of the calendar event attributes are defined with 
<cattr type="attribute-name">. A WA1-compliant UA would then assign the 
|value| attribute as the value of the calendar event attribute. If 
|value| is not specified, the child contents are used. The <cdatetime> 
element is a special case in that it requires <datetime> elements to be 
in the child contents if |value| is undefined.

    All contents inside <calendar> that are not calendar-related 
elements or the contents of calendar-related elements are ignored. As a 
result, the following would provide proper fallback content:

| <calendar>
|   <table>
|     <caption>Upcoming Events</caption>
|     <tr>
|       <th>Summary</th>
|       <th>Status</th>
|       <th>Class</th>
|       <th>Categories</th>
|       <th>Start Date</th>
|       <th>End Date</th>
|     </tr>
|     <cevent id="e036f260-39b4-11d9-ad3f-fc68600c1802">
|     <tr>
|       <td><csummary>
|         That thing we did that was so fun.
|       </calsummary></td>
|       <td><cattr type="status">CONFIRMED</cattr></td>
|       <td><cattr type="class">PRIVATE</cattr></td>
|       <td><cattr type="categories">Work</cattr></td>
|       <cattr type="x-mozilla-alarm-default-length" value="0"></cattr>
|       <cattr type="dtstamp">
|         <datetime value="2005-02-02T21:00Z"></datetime>
|       </cattr>
|       <cdatetime>
|         <td><datetime value="2005-02-30T21:00Z">
|           02/30/05 7:00 PM
|         </datetime></td>
|         <td><datetime value="2005-02-30T21:00Z">
|           02/30/05 9:00 PM
|         </datetime></td>
|       </cdatetime>
|     </tr>
|     </cevent>
|   </table>
| </calendar>

    The above should render in legacy user agents as a table, with 
values unimportant to presentation not rendered. Yet, for a WA1 UA, it 
yields the same calendar as the first example.

    Note that in both examples, if the |type| of a <cattr> element is 
unknown to the user agent, the value can simply be ignored. The <cattr> 
would have a set of standardized |type| values that all user agents 
would support, then individual user agent vendors could implement 
extensions, with the recommended nomenclature being something like this:

    x-[company or organization]-[attribute name]

    This should give us a reasonable amount of flexibility and 
extensibility without creating a complicated markup scheme. If 
necessary, <cdatetime> and <csummary> could be rolled into <cattr>, but 
I'd prefer to have these separate, since they're likely to always be used.

   That's all for now. Thoughts welcome.

Received on Wednesday, 2 February 2005 08:00:21 UTC