- From: snianu <notifications@github.com>
- Date: Wed, 10 Nov 2021 18:30:08 -0800
- To: w3c/clipboard-apis <clipboard-apis@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/clipboard-apis/pull/158/review/803233338@github.com>
@snianu commented on this pull request. > + a user gesture event and the user must select the paste option from the native context menu that pops up + when read() is called from JS, otherwise, the promise will be rejected. + + 1. If |r| is not "granted", then [=a promise rejected with=] "NotAllowedError" DOMException in |realm|. + + 1. Let |itemList| and |cleanItemList| be an empty sequence<{{Blob}}>. + + 1. Let |clipboardItemList| be an empty [=ClipboardItems=]. + + 1. For each |clipboardItem| in |data|: + + 1. For each |item| in |clipboardItem|: + + 1. Let |p1| be [=a new promise=] to {{Blob}} in |realm|. + + 1. If |p1| is [=reject=]d, then throw "Promises to Blobs were rejected." DOMException in |realm|. Done. > - readonly attribute FrozenArray<DOMString> types; + dictionary ClipboardItemOptions { + PresentationStyle presentationStyle = "unspecified"; + }; + </pre> + <p><dfn>Clipboard Item</dfn></p> + A [=clipboard item=] is conceptually data that the user has expressed a desire to make shareable by invoking a "cut" or "copy" command. + For example, if a user copies a range of cells from a spreadsheet, it will result in one [=clipboard item=]. If a user copies a set of files from their desktop, that list of files will be a different single [=clipboard item=]. Done. > - readonly attribute FrozenArray<DOMString> types; + dictionary ClipboardItemOptions { + PresentationStyle presentationStyle = "unspecified"; + }; + </pre> + <p><dfn>Clipboard Item</dfn></p> + A [=clipboard item=] is conceptually data that the user has expressed a desire to make shareable by invoking a "cut" or "copy" command. + For example, if a user copies a range of cells from a spreadsheet, it will result in one [=clipboard item=]. If a user copies a set of files from their desktop, that list of files will be a different single [=clipboard item=]. + Some platforms may support having more than one [=clipboard item=] at a time on the [=Clipboard=], while other platforms replace the previous [=clipboard item=] with the new one. + + Each [=clipboard item=] can be represented as multiple mime-types. In the example where the user copies a range of cells from a spreadsheet, it may be represented as an image (image/png), an HTML table (text/html), or plain text (text/plain). Done. > + {[format1]: promise_text_blob}, + {options: "unspecified"}); + </pre> + + <dt><code><var>clipboardItem</var>.getType(<var>type</var>)</code> + <dd><p>Returns a [=Promise=] to the [=Blob=] corresponding to <var>type</var>.</p> + + <dt><code><var>clipboardItem</var>.<var>types</var></code> + <dd><p>Returns the list of <var>types</var> contained in the <var>clipboardItem</var> object. + + </dl> + <p> + A {{ClipboardItem}} object has an associated [=clipboard item=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/presentationStyle}} is its [=clipboard item=]'s [=presentation style=]. Done. > + + <dt><code><var>clipboardItem</var>.getType(<var>type</var>)</code> + <dd><p>Returns a [=Promise=] to the [=Blob=] corresponding to <var>type</var>.</p> + + <dt><code><var>clipboardItem</var>.<var>types</var></code> + <dd><p>Returns the list of <var>types</var> contained in the <var>clipboardItem</var> object. + + </dl> + <p> + A {{ClipboardItem}} object has an associated [=clipboard item=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/presentationStyle}} is its [=clipboard item=]'s [=presentation style=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/types}} is its [=clipboard item=]'s [=types=]. Done. > + </p> + + <p>A [=clipboard item=] has an associated <dfn>types</dfn> which contains the MIME types.</p> + + <dl class=note> + <dt><code><var>clipboardItem</var> = new ClipboardItem([<var>items</var>, <var>options</var>])</code> + <dd> + Creates a new {{ClipboardItem}} object. <var>items</var> are used to fill its MIME types and [=Promise=]s to [=Blob=]s or {{DOMString}}s corresponding to the MIME types, <var>options</var> can be used to fill its {{ClipboardItemOptions}}, + as per the example below. + + <pre class="example javascript" highlight=js> + const format1 = 'text/plain'; + const promise_text_blob = Promise.resolve(new Blob(['hello'], {type: format1})); + const clipboardItemInput = new ClipboardItem( + {[format1]: promise_text_blob}, + {options: "unspecified"}); Done. > + + <dt><code><var>clipboardItem</var>.<var>types</var></code> + <dd><p>Returns the list of <var>types</var> contained in the <var>clipboardItem</var> object. + + </dl> + <p> + A {{ClipboardItem}} object has an associated [=clipboard item=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/presentationStyle}} is its [=clipboard item=]'s [=presentation style=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/types}} is its [=clipboard item=]'s [=types=]. + </p> + <p> + The <a constructor lt="ClipboardItem()">constructor</a> steps for <code>new ClipboardItem(<var>items</var>, <var>options</var>)</code> are to set [=this=]'s items to <var>items</var> and options to <var>options</var>. Added these details. Please let me know if this is going in the right direction. Thanks! > + <p> + A {{ClipboardItem}} object has an associated [=clipboard item=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/presentationStyle}} is its [=clipboard item=]'s [=presentation style=]. + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/types}} is its [=clipboard item=]'s [=types=]. + </p> + <p> + The <a constructor lt="ClipboardItem()">constructor</a> steps for <code>new ClipboardItem(<var>items</var>, <var>options</var>)</code> are to set [=this=]'s items to <var>items</var> and options to <var>options</var>. + </p> + + <h4 attribute for=ClipboardItem lt=presentationStyle>presentationStyle</h4> + <p> + Each {{ClipboardItem}} has a {{ClipboardItem/presentationStyle}}, which is a {{PresentationStyle}}. Done. > + Making the range of cells available as an image will allow the user to paste the cells into Photoshop, while the text/plain format can be used by applications like Windows Notepad. + + Apps that support pasting only a single [=clipboard item=] should use the first [=clipboard item=]. + Apps that support pasting more than one [=clipboard item=] could, for example, provide a user interface that previews the contents of each [=clipboard item=] and allow the user to choose which one to paste. + Further, apps are expected to enumerate the mime-types of the [=clipboard item=] they are pasting and select the one best-suited for the app according to some app-specific algorithm. + Alternatively, an app can present the user with options on how to paste a [=clipboard item=], e.g. “paste as image” or “paste formatted text”, etc. + + A [=clipboard item=] contains multiple representations. Each representation consists of a MIME type and a corresponding {{DOMString}} or [=Blob=]. + + <p>A [=clipboard item=] has an associated <dfn>presentation style</dfn> which is <code>"unspecified"</code> or <code>"inline"</code> or <code>"attachment"</code>. + [=presentation style=] helps distinguish between "inline" data(e.g. selecting text on a web page and copying), vs. file-like data (e.g. copying a plain text file). + This difference is used to provide a hint when writing to the system pasteboard on iOS/iPadOS. This allows apps like Notes to insert a file attachment when copying a plain text file from the Files app, but insert text inline when + copying a selected piece of plain text from another app. In both cases, the MIME type in the pasteboard would be text/plain. This is used for both reading and writing. + </p> + + <p>A [=clipboard item=] has an associated <dfn>types</dfn> which contains the MIME types.</p> Removed. > + </p> + <p> + A {{ClipboardItem}} object's {{ClipboardItem/types}} is its [=clipboard item=]'s [=types=]. + </p> + <p> + The <a constructor lt="ClipboardItem()">constructor</a> steps for <code>new ClipboardItem(<var>items</var>, <var>options</var>)</code> are to set [=this=]'s items to <var>items</var> and options to <var>options</var>. + </p> + + <h4 attribute for=ClipboardItem lt=presentationStyle>presentationStyle</h4> + <p> + Each {{ClipboardItem}} has a {{ClipboardItem/presentationStyle}}, which is a {{PresentationStyle}}. + The {{ClipboardItem/presentationStyle}} getter steps are to return [=this=]'s [=clipboard item=]'s [=presentation style=]. + </p> + + <h4 attribute for=ClipboardItem lt=types>types</h4> + <p> Each {{ClipboardItem}} has a {{ClipboardItem/types}}, which contains the MIME types. Added getter steps. > + const format1 = 'text/plain'; + const promise_text_blob = Promise.resolve(new Blob(['hello'], {type: format1})); + const clipboardItemInput = new ClipboardItem( + {[format1]: promise_text_blob}, + {options: "unspecified"}); + </pre> + + <dt><code><var>clipboardItem</var>.getType(<var>type</var>)</code> + <dd><p>Returns a [=Promise=] to the [=Blob=] corresponding to <var>type</var>.</p> + + <dt><code><var>clipboardItem</var>.<var>types</var></code> + <dd><p>Returns the list of <var>types</var> contained in the <var>clipboardItem</var> object. + + </dl> + <p> + A {{ClipboardItem}} object has an associated [=clipboard item=]. Bikeshed is throwing error due to multiple definitions of `clipboard item`, so I changed the `clipboard item` definition to `<dfn for="ClipboardItem">Clipboard Item</dfn>` > + + <h4 attribute for=ClipboardItem lt=presentationStyle>presentationStyle</h4> + <p> + Each {{ClipboardItem}} has a {{ClipboardItem/presentationStyle}}, which is a {{PresentationStyle}}. + The {{ClipboardItem/presentationStyle}} getter steps are to return [=this=]'s [=clipboard item=]'s [=presentation style=]. + </p> + + <h4 attribute for=ClipboardItem lt=types>types</h4> + <p> Each {{ClipboardItem}} has a {{ClipboardItem/types}}, which contains the MIME types. + {{ClipboardItem/types}} getter steps are to return [=this=]'s [=clipboard item=]'s [=types=].</p> + + <h4 method for=ClipboardItem lt=getType(type)>getType(type)</a> must run the below steps:</h4> + + 1. Let |realm| be [=this=]'s [=relevant realm=]. + + 1. If |type| is not listed in the [=mandatory data types=] list, then [=a promise rejected with=] "The type was not found" DOMException in |realm|. Done. > + The {{ClipboardItem/presentationStyle}} getter steps are to return [=this=]'s [=clipboard item=]'s [=presentation style=]. + </p> + + <h4 attribute for=ClipboardItem lt=types>types</h4> + <p> Each {{ClipboardItem}} has a {{ClipboardItem/types}}, which contains the MIME types. + {{ClipboardItem/types}} getter steps are to return [=this=]'s [=clipboard item=]'s [=types=].</p> + + <h4 method for=ClipboardItem lt=getType(type)>getType(type)</a> must run the below steps:</h4> + + 1. Let |realm| be [=this=]'s [=relevant realm=]. + + 1. If |type| is not listed in the [=mandatory data types=] list, then [=a promise rejected with=] "The type was not found" DOMException in |realm|. + + 1. Let |p| be [=a new promise=] in |realm|. + + 1. Let |blobData| be a [=Blob=] corresponding to the |type|. Clarified some steps using some new concepts defined in the `clipboard item` object. > - Promise<Blob> getType(DOMString type); - }; + 1. Return |p|. + + <h4 typedef>ClipboardItemDataType</h4> Done. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/clipboard-apis/pull/158#discussion_r747066211
Received on Thursday, 11 November 2021 02:30:23 UTC