W3C home > Mailing lists > Public > public-webapps@w3.org > January to March 2012

Re: [Clipboard] Processing model feedback (and other)

From: Anne van Kesteren <annevk@opera.com>
Date: Thu, 16 Feb 2012 14:35:50 +0100
To: public-webapps@w3.org
Message-ID: <op.v9rxd01s64w2qv@annevk-macbookpro.local>
On Thu, 09 Feb 2012 14:20:57 +0100, Hallvord R. M. Steen  
<hallvord@opera.com> wrote:
> Anne van Kesteren <annevk@opera.com> skreiv Fri, 09 Sep 2011 16:48:36  
> +0200
>> As a high-level comment it seems to me the organization of the  
>> specification needs some changing. The processing model is about how to  
>> deal with a "copy/paste/cut operation" it is not about firing an event  
>> (that is mainly part of it). The events section meanwhile is about how  
>> users invoke a "copy/paste/cut operation" and not so much about firing  
>> an event either (the event summary boxes are not needed I think).
>
> I agree that the event summary tables aren't really required, and have  
> removed them. I'm not quite sure what else I should do specifically to  
> address the comment that the "organization of the specification needs  
> some changing". For example regarding
>
>> The processing model is about how to deal with a "copy/paste/cut  
>> operation" it is not about firing an event (that is mainly part of it).
>
> ..it happens to be *the* part of the processing this spec is all about  
> :)..?

I mean that the way it is defined currently does not make much sense. The  
user initiates a "copy operation". A "copy operation" is a long list of  
steps that will eventually fire a "copy" event as part of that "copy  
operation".

So you should not have "When the user initiates a paste operation, the  
implementation must fire a paste event." But instead you should have "When  
the user initiates a paste operation, run the /paste operation steps/." or  
some such.


>> You can also invoke such actions from script via the execCommand() APIs  
>> apparently, but that does not appear to be described in detail.
>
> It's mentioned in the #integration-with-other-scripts-and-events section  
> (8). I'm not sure where else to mention it or what more detail is  
> needed. execCommand() is presumably spec'ed in Aryeh's rich text editing  
> work.

You need some kind of hook for that though.


>> So first I think it would make sense to clearly distinguish between  
>> operations and events.
>
> Can you give me an example of a specific change to the spec's outline or  
> vocabulary that would help make this distinction?

I think what you want to do for maximum clarity is to define "paste  
operation steps" / "copy operation steps" / etc. and include all the  
details there. Including the dispatching of the event, handling of the  
canceled flag of the event object being set, etc.

I think the current specification is pretty close. Section 4 just needs to  
go and become part of 5.


>> Because there is a processing model that includes dispatching events  
>> the section on events can probably be removed. The requirements made  
>> therein are redundant.
>
> Indeed. The spec evolved this way, section 4 with normal prose  
> description of how things are expected to work predates section 5 and  
> the processing model that give more exact implementation details. So we  
> could drop all of section 4 and just keep the processing model. However,  
> I think keeping the short prose description for each event in section 4  
> makes sense. It makes the spec more readable (and implementors are  
> readers too) and makes it clear what behaviour the processing model  
> intends to dictate.

Then you should clearly indicate section 4 is non-normative and not use  
words such as "must". Specifications should not have duplicate conformance  
requirements.


>> You will still need a section that defines when the operations are  
>> invoked.
>
> If section 4 were to be removed, or generally?

Well section 4 does not really say the operation is invoked; it just talks  
about events somewhat confusingly (imo).


>> Apart from this I noticed a few other things:
>>
>> * "the BODY element" should probably be defined as reference to what it  
>> is in HTML.
>
> Added generic reference to HTML5 after both instances of "BODY element".  
> Would it be better to refer to a specific section directly? I'd happily  
> just link the text "the BODY element" directly to  
> http://www.w3.org/TR/html5/sections.html#the-body-element but it seems  
> like specs must be a bit more pedantic about things and list references  
> at the bottom etc..?

Both are okay. What happens by the way if there is no body element? HTML  
also defines a specific term "the body element" (or some such) that means  
something different from the HTML body element.


>> * If you define an internal flag do not use <code> for it, but <var> or  
>> maybe <dfn>.
>
> Fixed. I think I've once read a spec or recommendation dealing with best  
> markup for a spec, but I can't find it now. If you know what document  
> I'm likely thinking about please send me a link :)

http://wiki.whatwg.org/wiki/How_to_write_a_spec has some advice.


>> * If you reference externally used terms mention that somehow. E.g.  
>> DataTransfer's mode flag is actually called "drag data store mode".  
>> DataTransfer in HTML is defined in terms of "drag data store" so it  
>> would make sense to talk about the same thing here. (Maybe get it  
>> renamed from drag to something more neutral?)
>
> Changed instances of "mode" to "drag data store mode", "kind" to "drag  
> data item kind" etc. Added a reference for the HTML5 DnD chapter, and  
> some more referencing to this on first usage of DataTransfer. (IMO it  
> becomes harder to read though - as long as we're dealing with properties  
> of a precisely specified object it should be OK to refer to their  
> property names like "item" and "type". "Mode" is a bit special in that  
> it is AFAIK an internal flag and not visible to script authors.)

That depends as properties can be overwritten by web developers.


>> * "If the current clipboard part contains HTML- or XHTML-formatted  
>> text" seems really vague (how do you tell whether it contains that?) as  
>> are the steps that lead to creating some kind of tree. They probably  
>> need to reference something specific in HTML.
>
> Slightly elaborated - better now?

I guess. Clipboards are weird.


>> * The "Fire the event" step should be more elaborated:  
>> http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#firing-events
>
> "Firing an event" surely should be specified elaborately elsewhere. I  
> added another reference to DOM2-Events (though "fire" probably is used  
> without being precisely spec'ed there..).

Yes, you need to reference DOM4. Otherwise EventInit and such are  
undefined too.


>> * The "Process the default action" step should instead talk about  
>> whether or not the  
>> http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#canceled-flag  
>> of the event ended up being set and what to do when it is not.
>
> Seems pretty readable and precise to me as-is.

Except there's no such thing as default action really...


>> * I think having section 7 is confusing. Cross-references would be  
>> better.
>
> I'm not sure. IMHO the exact semantics of certain DataTransfer object  
> properties when (re-)used for clipboard events should be noted  
> somewhere. For example the fact that an implementation of  
> clipboardData.items must enable "pasting multi-part or non-textual data"  
> should be written down. If I remove section 7, where should this  
> information go?

HTML. We only want a single definition of APIs.


>> If you want to perform cross-references between HTML, DOM, and your  
>> specification it might be an idea to use  
>> https://bitbucket.org/ms2ger/anolis I can help out if needed.
>
> Think I tried to get anolis running earlier, then I came across reSpec  
> and just used that instead. It's very simple to just use JavaScript to  
> manipulate the spec - it's in HTML after all ;-). I could perhaps use  
> both though? Can you show me an example of how using anolis would help  
> cross-referencing terms/definitions from another spec, HTML5  
> specifically?

http://wiki.whatwg.org/wiki/Anolis has tips on how to use it. E.g. to  
reference HTML fetch you would use:

<span data-anolis-spec=html>fetch</span>


-- 
Anne van Kesteren
http://annevankesteren.nl/
Received on Thursday, 16 February 2012 13:36:23 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:50 GMT