[whatwg] [WA1] Attribute-based selection system

    This is a specification of my selection system that I discussed over 
several previous messages. A few modifications have been made since 
then, so reference this rather than previous messages.

*** |selection| attribute ***

selection = single | multiple [allowzero] [auto] [tree]

    The |selection| attribute specifies that the element is a container 
for selectable content. Possible values:

  * single - Mutually exclusive selection. Can't be used with "multiple".

  * multiple - Multiple item selection. Cannot be used with "single".

  * tree - Makes the current selection part of the parent selection.

  * allowzero - Allows for the selection of zero items.

  * auto - Default value for an immediate child |selectable| attribute 
is "true".


*** |selectable| attribute ***

selectable = true | false

    The |selectable| attribute determines whether or not an element 
within a selection container is selectable. If the element does not have 
an ancestor with a valid |selection| attribute value set, then the 
|selectable| attribute is semantically meaningless. Possible values:

  * true - The element can be selected.

  * false - The element cannot be selected.

    Unless the immediate parent element is a selection container with 
the value "auto" specified, the default is always false. If an element 
has |selectable| set to "true", then the |selectable| attributes for all 
descendants that are not children of descendant selection container 
elements are semantically meaningless.


*** |selected| attribute ***

    The |selected| attribute now applies to all selectable elements in 
addition to the <option> element.


*** Examples ***

    The following is a table with only the first cell of each row 
selectable:

| <table selection="single">
|   <tr>
|     <td selectable="true" selected>Item 1</td>
|     <td> ...contents... </td>
|     <td> ...contents... </td>
|   </tr>
|   <tr>
|     <td selectable="true">Item 2</td>
|     <td> ...contents... </td>
|     <td> ...contents... </td>
|   </tr>
|   <tr>
|     <td selectable="true">Item 3</td>
|     <td> ...contents... </td>
|     <td> ...contents... </td>
|   </tr>
| </table>

    This is a multiple-selection list with the first item selected:

| <ul selection="multiple auto">
|   <li selected>Item 1</li>
|   <li>Item 2</li>
|   <li>Item 3</li>
| </ul>

    Below is a multiple-selection list-based tree where only the leaves 
are selectable:

| <ul selection="multiple auto">
|   <li selectable="false">
|     <p>Item 1</p>
|     <ul selection="multiple auto tree">
|       <li>Item 1</li>
|       <li>Item 2</li>
|       <li>Item 3</li>
|     </ul>
|   </li>
|   <li>Item 2</li>
|   <li>Item 3</li>
| </ul>

    Here is an example of a table where all rows but the header row are 
selectable:

| <table selection="single">
|   <tbody>
|     <tr>
|       [...header row...]
|     </tr>
|     <tr selectable="true" selected>
|       [...first row of block two data...]
|     </tr>
|     <tr selectable="true">
|       [...second row of block two data...]
|     </tr>
|     <tr selectable="true">
|       [...third row of block two data...]
|     </tr>
|   </tbody>
| </table>

    Here's a different version of the above example:

| <table>
|   <tbody selection="single auto">
|     <tr selectable="false">
|       [...header row...]
|     </tr>
|     <tr selected>
|       [...first row of block two data...]
|     </tr>
|     <tr>
|       [...second row of block two data...]
|     </tr>
|     <tr>
|       [...third row of block two data...]
|     </tr>
|   </tbody>
| </table>

Received on Saturday, 25 June 2005 10:49:02 UTC