[whatwg] Web Applications 1.0 and Menu Labels
Ian Hickson
ian at hixie.ch
Mon Nov 17 23:54:59 PST 2008
The spec has changed a lot since this e-mail was sent...
On Mon, 22 Nov 2004, Matthew Raymond wrote:
> Ian Hickson wrote:
> > On Sun, 19 Sep 2004, Matthew Raymond wrote:
> > > I was looking at the example in the "2.1. Tutorial" section of Web
> > > Applications 1.0[1] when I noticed something. Here's a snipped version of
> > > the example:
> > >
> > > <menubar>
> > > <li>
> > > <a href="#file">File</a>
> > > <menu id="file">
> > >
> > > Notice that the <a> element is being used in place of a <menulabel>[2].
> > > This doesn't really make sense because it overloads the semantics of <a>
> > > without reason. Consider the above example with <menulabel> added:
> > >
> > > <menubar>
> > > <li>
> > > <menulabel><a href="#file">File</a></menulabel>
> > > <menu id="file">
> > >
> > > The above example degrades in exactly the same way. The difference is that
> > > only <menulabel> is used to label menus. As a result, webmasters don't
> > > have to memorize an additional rule about the use of <a>. Furthermore,
> > > since there's no apparent reason to have a hyperlink inside a menu label,
> > > the UAs would need to ignore <a> elements inside <menulabel> elements
> > > anyways.
> >
> > According to the current definitions, it could just as easily have been:
> >
> > <menubar>
> > <li>
> > <p>File</p>
> > <menu>
> >
> > ...and it would mean pretty much the same thing. The only reason to use a
> > link is that that's what people are using now, and I wanted the example to
> > have the least changes required from existing markup. (That is, going from
> > existing markup to this markup should be easy.)
> >
> > The semantics here are coming from the fact that the <li> element has a
> > <menu> child; the label is simply whatever the previous sibling of the
> > <menu> is.
>
> There's two problems with this. First is that you're totally reversing the
> direction of label association by making the object of the label associate to
> the label rather than the other way around that exists with <label>. The
> second problem is readability. I have to scan the document for a menu first,
> then backtrack to figure out where the menu label is. With the <menulabel>
> element, people can simply scan the document for "menulabel".
>
> Also, the user could easily achieve the same effect for legacy UAs using
> "<p><menulabel>File</menulabel></p>", so what's the point other than to save a
> bit of typing?
It's now:
<menu type="context">
<menu label="File">
...
> > > I like this method of association, and I'd like to see it used with
> > > <label> as well. I've already seen people using markup like the
> > > following in HTML4 web pages:
> > >
> > > <label>Text</label><input type="text" name="text1">
> > >
> > > So, by associating otherwise unassociated <label> elements such as
> > > the one above with controls that are immediate siblings, we add
> > > semantic meaning to many web pages that already use this kind of
> > > association-by-proximity.
> >
> > Is this really that common? I haven't seen it at all as far as I can
> > remember. I don't mind us adding this, but I don't think we want to do
> > it if the cost in implementations and risk of regressions doesn't get
> > outweighed by the increased number of pages that would render better.
>
> Like I said, I've seen it a few times, although I don't know if it's
> common. We could just implement sibling association for <menulabel>,
> although I'd prefer consistency between different types of labels. I'm
> surprised to here you say that this may be difficult to implement,
> though. I would not have guessed it would be.
I haven't done this, since I haven't heard any other requests for it.
> > > I'd also like to see <menulabel> use the association methods
> > > available with <label>, like implicit association...
> > >
> > > <menubar id="appmenu">
> > > <menulabel label="File">
> > > <menu>
> > > <command label="New..." onclick="fnew()"/>
> > > <command label="Open..." onclick="fopen()"/>
> > > <command label="Save" onclick="fsave()" id="save"/>
> > > <command label="Save as..." onclick="fsaveas()"/>
> > > </menu>
> > > </menulabel>
> > > </menubar>
> >
> > This would unfortunately make implementing <menulabel> quite a lot harder
> > for little net gain to the author. I understand that it would be nice and
> > symmetric, but in this case it doesn't seem like there really are many
> > benefits.
>
> You may be right with regards to difficulty of implementation, but it
> makes it significantly more readable when doing submenus.
I think the current markup is even neater.
> And let's not forget the fact that I oppose the use of <a> elements
> to activate menus, as you currently have specified in WA1. This is both
> description of behavior (which is what did in <label>'s focus passing)
> and an overloading of semantic meaning for the element.
>
> (Having <a> elements as _items_ in a menu is different, because in
> that case they are acting as hyperlinks, and therefore behave as one
> might expect them to behave in that context.)
I've removed the bit you disliked here.
> > > <MENULABEL>, <COMMAND> ATTRIBUTES AND SUBMENUS:
> > >
> > > There are surprisingly few examples in the WA1 specification
> > > regarding submenus.
> >
> > That's mostly becuase I haven't yet worked out how to make section 6.3
> > (the <menu> and <menubar> elements) work properly. At the moment
> > they're the worst of several worlds; poor styling, poor native-ness,
> > etc.
>
> Please elaborate. I thought my examples where quite elegant.
I've simplified it dramatically now.
> > > |icon| - I'm not sure if this is necessary, but might be nice.
> > > |hide| - You may not always want a submenu label visible.
> >
> > Good point. I've noted that submenus need those. It might actually be
> > best to put these on the <menu> element, though; they are properties
> > of the menu, not the label.
>
> Let me get this straight. The attribute |icon| controls the icon in
> the menu label, and |hide| hides the menu label, thus preventing access
> to its submenu, yet you don't feel they are properties of the menu
> label? I think you are projecting the flaws with your <a> element scheme
> onto the <menulabel> element.
I haven't added anything to make menus have icons or be hidden at this
point. (Well, there's the global hidden="", which I guess I should hook
in, but I haven't yet done that either.)
> > > |disabled| - You may not always want a submenu label enabled.
> >
> > It's my understanding that disabling a menu is considered poor form,
> > and that it is better to disable all the children. (mpt?)
>
> Oh, that would be fun, adding |disabled| to every item in the
> submenu. I'd just love typing "disabled='true'" twenty times.
>
> The UA can just show the submenu if disabling the submenu label is a
> problem, but don't force users to disable individual items when the want
> the whole menu or short change operating systems that may support such
> disabling.
>
> Idle Thought: Unlike the other two attributes, one could make an
> argument for moving this to <menu>. The same is not true for |hidden|,
> though.
I haven't added this either, but I'm sure we'll add it eventually when we
have a better idea of what uses of this look like.
> > > |default| - If the menu is being used for navigation, you may want
> > > the submenu label to be shown as a default if the page you are
> > > currently on is within the submenu (and also set as the default). I
> > > actually worked on an in-house application where my supervisor
> > > specifically asked for this kind of feature.
> >
> > It would be up to the UA to make the submenu default if it contained a
> > default item, assuming the platform guidelines said to do this.
>
> True. The platform may not even support default items, but I fail to
> see why we can't put it in just in case. I've personally worked on a
> project that used default values on submenu labels.
Just make the default command the default, and all else should follow.
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list