- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Fri, 22 Feb 2008 12:22:00 -0800
- To: Daniel Glazman <daniel.glazman@disruptive-innovations.com>
- CC: www-style <www-style@w3.org>
Daniel Glazman wrote:
>
> Andrew, I just cannot read messages whith three or four level
> of quotation... Could you please send us a detailed and complete
> proposal for tree-like rendering ? Gather everything and let's
> discuss it.
>
> </Daiel>
>
First of all, initial proposal to add list-style-type: tree-line value is
not related to collapsing per se. It can be used for styling
of static lists too. See two lists at the bottom of [1].
I propose to allow outline-color and outline-style to style appearance
of such tree outlines.
--------------------------
My proposal is to add :collapsed and :expanded state flags for the DOM
elements (and correspondent pseudo-classes in CSS)
Here are couple of examples of real life cases where these states are
needed:
1) Collapsible/expandable lists.
2) Tab views (a.k.a. stack views). Set of panels where all panels are in
collapsed
state except of one - current panel.
3) "Read more..." views where DOM element in collapsed state show part of
text and in expanded state this element shows full content.
Such :collapsed and :expanded states should be modifiable by methods of
DOM::Element interface. (There are other flags that makes sense to enable
this way, e.g. :checked and :current). Probably as:
interface Element
{
...
void setState(enum ELEMENT_STATE state, bool onOff);
bool getState(enum ELEMENT_STATE state);
}
Behaviors. [optional but desirable section]
I propose to add (or to extend for those UAs that already support this
attribute)
attribute "behavior" that accepts one of predefined values:
behavior: checkbox | radio | select | multi-select | stack-tab | etc.
=== behavior: checkbox ===
when set will make the element:
a) focusable and
b) onClick event will set/reset :checked state of the DOM element.
Pretty much the same of what does code behind <button type="checkbox">
=== behavior: radio ===
will mimic behavior of code behind <button type="radio"> - will
set/reset :checked state for the group of elements with the same
@name value.
=== behavior: select ===
will make the element
1) focusable and
2) will handle navigational keys UP, DOWN, HOME, END and
set :current state flag for contained elements with role="option".
:current element should be scrolled into the view if needed.
3) will handle navigational keys LEFT, RIGHT and set :collapsed
and :expanded state for nearest parent having role="option-group"
of :current element.
4) will handle mouse events correspondingly, e.g. DOUBLE_CLICK
will trigger :collapsed :expanded state of nearest
role="option-group"
element.
@role attribute auto-assignment:
All list item elements (e.g. <li>) are treated as is if
role="option" is defined
for them.
All contained list elements (e.g. <ul>, <ol>) with first
sub-element of type
<caption> are treated as if role="option-group" is defined for them.
(Such auto-assignment could be done also through @role *CSS*
attribute)
Example:
<ul style="behavior:select">
<li>First terminal node</li>
<li>Second terminal node</li>
<ul><caption>Third node: option group</caption>
<li>Terminal node 3.1</li>
<li>Terminal node 3.2</li>
</ul>
</ul>
=== behavior: multi-select ===
The same as select but additionally sets/resets :checked state flag
for the :current item when SPACE key or DOUBLE_CLICK is
received.
=== behavior: stack-tab ===
The same as behavior: radio - switches :checked state of
of group of elements with the same value of @name.
Additionally interprets @for attribute for such elements and if it
has an id of
valid element then sets/resets value of :expanded attribute (when
:checked)
and sets :collapsed attribute (when :not(:checked)) for element
with the id.
Example of the tab view:
CSS:
ul.tab-strip > li { behavior:stack-tab; }
div.panel { visibility:hidden; }
div.panel:expanded { visibility:visible; }
Markup:
<ul class="tab-strip">
<li for="#panel-1" checked>First tab</li>
<li for="#panel-2">Second tab</li>
<li for="#panel-3">Third tab</li>
<ul>
<div class="panel" id="panel-1">...</div>
<div class="panel" id="panel-2">...</div>
<div class="panel" id="panel-3">...</div>
------------
Behaviors defined above are pretty standard an universal UI state automats
and so can be used for various purposes. E.g. behavior: stack-tab can be
used
for expanding/collapsing tree alike structures too:
<div id="node1">
<h><img style="behavior:stack-tab" for="node1" /> header </h>
<p>Body text that will be shown/hidden if you click on the image
above</p>
</div>
(I think that "stack-tab" should have more universal name then)
[eof]
--
Andrew Fedoniouk.
http://terrainformatica.com
[1] http://www.terrainformatica.com/htmlayout/images/tree-view-lines.png
Received on Friday, 22 February 2008 20:22:33 UTC