RE: bikeshed fatal error on 'interface' dfn using 'for' attribute

Funny, this hit the W3C HTML spec as well. My case was: https://github.com/travisleithead/html/commit/b59f37a5056dfa1875328d428bcc1ca49d198f53#diff-eb18865acfd94500fe999f8128227ed6
 (in response to https://github.com/w3c/html/issues/707) 

Where an ancestor dfn-for='....' was inheriting down to a <dfn element>...<dfn>. However, it _is_ legitimate for an element to have a for attribute, so I don't see the problem? In the above commit, I fix the issue by moving the ancestor definition to locally-needed terms, but I don't think I should have to do that...

-----Original Message-----
From: Hodges, Jeff [mailto:jeff.hodges@paypal.com] 
Sent: Monday, November 7, 2016 4:43 PM
To: Tab Atkins Jr. <jackalmage@gmail.com>
Cc: spec-prod@w3.org
Subject: Re: bikeshed fatal error on 'interface' dfn using 'for' attribute

On 11/7/16, 4:24 PM, "Tab Atkins Jr." <jackalmage@gmail.com> wrote:

>On Mon, Nov 7, 2016 at 4:19 PM, Hodges, Jeff <jeff.hodges@paypal.com>
>wrote:
>> oops, s/<dif/<div/g in the below...
>>
>> On 11/7/16, 3:34 PM, "Tab Atkins Jr." <jackalmage@gmail.com> wrote:
>>>Yup, it's some new mistake-catching I put in recently.  The error 
>>>message should be fairly self-explanatory - you probably have an 
>>>ancestor specifying `dfn-for=Transport` that's accidentally applying 
>>>to the IDL block.
>>
>> ok, what you are saying (?) is that we should not be using the 
>> pattern of...
>>
>> <!-- begin -->
>> ## foo (interface <dfn interface>foo</dfn>) ## {#iface-foo}
>>
>> <pre class="idl">
>>   [SecureContext]
>>   interface foo {
>>     readonly    attribute USVString     bar;
>>   };
>> </pre>
>>
>> <div dfn-for="foo">
>>   The <dfn>bar</dfn> member specifies...
>> </div>
>> <!-- end -->
>>
>>
>> ..and we should get rid of all such `<div dfn-for="...">` blocks ?
>>
>> i.e., the `<div dfn-for="...">` is the "ancestor" applying to the IDL 
>> block?
>
>No, I meant "ancestor" in the normal, DOM meaning of the term.  Read 
>the error message again - it's the *interface* definition that's 
>causing trouble, because you're somehow declaring that it's for 
>"Transport".  Find where in your document the `dfn-for=Transport` is, 
>and move it to a container that just encloses the definitions you 
>actually want it to apply to.  (This happens a lot if you forgot to 
>close a <div> somewhere earlier in your document.)

thanks. had actually neglected to properly close the <div> that the `dfn-for=Transport` was on.

=JeffH

Received on Friday, 11 November 2016 01:08:30 UTC