From ca4521d57df033090c77e0b25e2ac6a6da164ea5 Mon Sep 17 00:00:00 2001 From: Shagen Ogandzhanian Date: Tue, 18 Dec 2018 15:07:34 +0100 Subject: [PATCH] Support ClipboardEvent in definitions generated from idl --- .../stdlib/js/idl/org.w3c.dom.clipboard.idl | 47 +++++++++++ .../js/src/org.w3c/org.khronos.webgl.kt | 1 + .../js/src/org.w3c/org.w3c.css.masking.kt | 1 + .../js/src/org.w3c/org.w3c.dom.clipboard.kt | 79 +++++++++++++++++++ .../stdlib/js/src/org.w3c/org.w3c.dom.css.kt | 1 + .../js/src/org.w3c/org.w3c.dom.events.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.dom.kt | 36 +++++---- .../src/org.w3c/org.w3c.dom.mediacapture.kt | 1 + .../js/src/org.w3c/org.w3c.dom.parsing.kt | 1 + .../src/org.w3c/org.w3c.dom.pointerevents.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.dom.svg.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.dom.url.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.fetch.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.files.kt | 1 + .../js/src/org.w3c/org.w3c.notifications.kt | 1 + .../js/src/org.w3c/org.w3c.performance.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.workers.kt | 1 + .../stdlib/js/src/org.w3c/org.w3c.xhr.kt | 1 + .../tools/idl2k/src/main/kotlin/config.kt | 6 ++ 19 files changed, 166 insertions(+), 17 deletions(-) create mode 100644 libraries/stdlib/js/idl/org.w3c.dom.clipboard.idl create mode 100644 libraries/stdlib/js/src/org.w3c/org.w3c.dom.clipboard.kt diff --git a/libraries/stdlib/js/idl/org.w3c.dom.clipboard.idl b/libraries/stdlib/js/idl/org.w3c.dom.clipboard.idl new file mode 100644 index 00000000000..dbfda5b644c --- /dev/null +++ b/libraries/stdlib/js/idl/org.w3c.dom.clipboard.idl @@ -0,0 +1,47 @@ +namespace org.w3c.dom.clipboard; + + +// Downloaded from https://w3c.github.io/clipboard-apis +dictionary ClipboardEventInit : EventInit { + DataTransfer? clipboardData = null; +}; +[Constructor(DOMString type, optional ClipboardEventInit eventInitDict), Exposed=Window] +interface ClipboardEvent : Event { + readonly attribute DataTransfer? clipboardData; +}; +partial interface Navigator { + [SecureContext, SameObject] readonly attribute Clipboard clipboard; +}; +[SecureContext, Exposed=Window] interface Clipboard : EventTarget { + Promise read(); + Promise readText(); + Promise write(DataTransfer data); + Promise writeText(DOMString data); +}; +dictionary ClipboardPermissionDescriptor : PermissionDescriptor { + boolean allowWithoutGesture = false; +}; +dictionary ClipboardEventInit : EventInit { + DataTransfer? clipboardData = null; +}; + +[Constructor(DOMString type, optional ClipboardEventInit eventInitDict), Exposed=Window] +interface ClipboardEvent : Event { + readonly attribute DataTransfer? clipboardData; +}; + +partial interface Navigator { + [SecureContext, SameObject] readonly attribute Clipboard clipboard; +}; + +[SecureContext, Exposed=Window] interface Clipboard : EventTarget { + Promise read(); + Promise readText(); + Promise write(DataTransfer data); + Promise writeText(DOMString data); +}; + +dictionary ClipboardPermissionDescriptor : PermissionDescriptor { + boolean allowWithoutGesture = false; +}; + diff --git a/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt b/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt index 1480a8126c1..478cb425fe2 100644 --- a/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt +++ b/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt @@ -12,6 +12,7 @@ package org.khronos.webgl import kotlin.js.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.css.masking.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.css.masking.kt index b0537126c19..27e1e986c9b 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.css.masking.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.css.masking.kt @@ -12,6 +12,7 @@ package org.w3c.css.masking import kotlin.js.* import org.khronos.webgl.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.clipboard.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.clipboard.kt new file mode 100644 index 00000000000..566eff19faf --- /dev/null +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.clipboard.kt @@ -0,0 +1,79 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +// NOTE: THIS FILE IS AUTO-GENERATED, DO NOT EDIT! +// See libraries/tools/idl2k for details + +@file:Suppress("NESTED_CLASS_IN_EXTERNAL_INTERFACE") +package org.w3c.dom.clipboard + +import kotlin.js.* +import org.khronos.webgl.* +import org.w3c.css.masking.* +import org.w3c.dom.* +import org.w3c.dom.css.* +import org.w3c.dom.events.* +import org.w3c.dom.mediacapture.* +import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* +import org.w3c.dom.svg.* +import org.w3c.dom.url.* +import org.w3c.fetch.* +import org.w3c.files.* +import org.w3c.notifications.* +import org.w3c.performance.* +import org.w3c.workers.* +import org.w3c.xhr.* + +public external interface ClipboardEventInit : EventInit { + var clipboardData: DataTransfer? /* = null */ + get() = definedExternally + set(value) = definedExternally +} + +@kotlin.internal.InlineOnly +public inline fun ClipboardEventInit(clipboardData: DataTransfer? = null, bubbles: Boolean? = false, cancelable: Boolean? = false, composed: Boolean? = false): ClipboardEventInit { + val o = js("({})") + + o["clipboardData"] = clipboardData + o["bubbles"] = bubbles + o["cancelable"] = cancelable + o["composed"] = composed + + return o +} + +/** + * Exposes the JavaScript [ClipboardEvent](https://developer.mozilla.org/en/docs/Web/API/ClipboardEvent) to Kotlin + */ +public external open class ClipboardEvent(type: String, eventInitDict: ClipboardEventInit = definedExternally) : Event { + open val clipboardData: DataTransfer? +} + +/** + * Exposes the JavaScript [Clipboard](https://developer.mozilla.org/en/docs/Web/API/Clipboard) to Kotlin + */ +public external abstract class Clipboard : EventTarget { + fun read(): Promise + fun readText(): Promise + fun write(data: DataTransfer): Promise + fun writeText(data: String): Promise +} + +public external interface ClipboardPermissionDescriptor { + var allowWithoutGesture: Boolean? /* = false */ + get() = definedExternally + set(value) = definedExternally +} + +@kotlin.internal.InlineOnly +public inline fun ClipboardPermissionDescriptor(allowWithoutGesture: Boolean? = false): ClipboardPermissionDescriptor { + val o = js("({})") + + o["allowWithoutGesture"] = allowWithoutGesture + + return o +} + diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.css.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.css.kt index 7928901698d..3952fe435ad 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.css.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.css.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* import org.w3c.dom.parsing.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.events.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.events.kt index 116b58585b0..b67de6f36cd 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.events.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.events.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.mediacapture.* import org.w3c.dom.parsing.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.kt index c25787c5f34..708cfe93442 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.kt @@ -12,6 +12,7 @@ package org.w3c.dom import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* @@ -26,6 +27,18 @@ import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* +/** + * Exposes the JavaScript [Navigator](https://developer.mozilla.org/en/docs/Web/API/Navigator) to Kotlin + */ +public external abstract class Navigator : NavigatorID, NavigatorLanguage, NavigatorOnLine, NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, NavigatorConcurrentHardware { + open val serviceWorker: ServiceWorkerContainer + open val maxTouchPoints: Int + open val mediaDevices: MediaDevices + open val clipboard: Clipboard + fun vibrate(pattern: dynamic): Boolean + fun getUserMedia(constraints: MediaStreamConstraints, successCallback: (MediaStream) -> Unit, errorCallback: (dynamic) -> Unit): Unit +} + /** * Exposes the JavaScript [Document](https://developer.mozilla.org/en/docs/Web/API/Document) to Kotlin */ @@ -148,9 +161,9 @@ public external open class Document : Node, GlobalEventHandlers, DocumentAndElem override var ontoggle: ((Event) -> dynamic)? override var onvolumechange: ((Event) -> dynamic)? override var onwaiting: ((Event) -> dynamic)? - override var oncopy: ((Event) -> dynamic)? - override var oncut: ((Event) -> dynamic)? - override var onpaste: ((Event) -> dynamic)? + override var oncopy: ((ClipboardEvent) -> dynamic)? + override var oncut: ((ClipboardEvent) -> dynamic)? + override var onpaste: ((ClipboardEvent) -> dynamic)? override val fullscreenElement: Element? override val children: HTMLCollection override val firstElementChild: Element? @@ -2233,9 +2246,9 @@ public external interface WindowEventHandlers { } public external interface DocumentAndElementEventHandlers { - var oncopy: ((Event) -> dynamic)? - var oncut: ((Event) -> dynamic)? - var onpaste: ((Event) -> dynamic)? + var oncopy: ((ClipboardEvent) -> dynamic)? + var oncut: ((ClipboardEvent) -> dynamic)? + var onpaste: ((ClipboardEvent) -> dynamic)? } /** @@ -2255,17 +2268,6 @@ public external interface WindowOrWorkerGlobalScope { fun createImageBitmap(image: dynamic, sx: Int, sy: Int, sw: Int, sh: Int, options: ImageBitmapOptions = definedExternally): Promise } -/** - * Exposes the JavaScript [Navigator](https://developer.mozilla.org/en/docs/Web/API/Navigator) to Kotlin - */ -public external abstract class Navigator : NavigatorID, NavigatorLanguage, NavigatorOnLine, NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, NavigatorConcurrentHardware { - open val serviceWorker: ServiceWorkerContainer - open val maxTouchPoints: Int - open val mediaDevices: MediaDevices - fun vibrate(pattern: dynamic): Boolean - fun getUserMedia(constraints: MediaStreamConstraints, successCallback: (MediaStream) -> Unit, errorCallback: (dynamic) -> Unit): Unit -} - /** * Exposes the JavaScript [NavigatorID](https://developer.mozilla.org/en/docs/Web/API/NavigatorID) to Kotlin */ diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.mediacapture.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.mediacapture.kt index b6f6f7d22d0..92156f7823a 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.mediacapture.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.mediacapture.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.parsing.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.parsing.kt index 23ceb9dc72d..ab1d11978cf 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.parsing.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.parsing.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.pointerevents.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.pointerevents.kt index cdb9064ef8b..da03f415ffe 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.pointerevents.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.pointerevents.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.svg.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.svg.kt index 16ac22564f3..0310e9a0b53 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.svg.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.svg.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.url.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.url.kt index f9c7e33d74c..a5a40c95b79 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.url.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.url.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.fetch.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.fetch.kt index 7eb70f3b195..01a658bb59f 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.fetch.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.fetch.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.files.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.files.kt index cab27f5f448..ac379d9397e 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.files.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.files.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.notifications.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.notifications.kt index 3ed7d0870e5..83eefd2d85e 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.notifications.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.notifications.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.performance.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.performance.kt index b7227288c73..ae367bf18f2 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.performance.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.performance.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.workers.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.workers.kt index a5e2b3cb4de..e81879de124 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.workers.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.workers.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/stdlib/js/src/org.w3c/org.w3c.xhr.kt b/libraries/stdlib/js/src/org.w3c/org.w3c.xhr.kt index dd3b89802f5..c35507fd27f 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.xhr.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.xhr.kt @@ -13,6 +13,7 @@ import kotlin.js.* import org.khronos.webgl.* import org.w3c.css.masking.* import org.w3c.dom.* +import org.w3c.dom.clipboard.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.mediacapture.* diff --git a/libraries/tools/idl2k/src/main/kotlin/config.kt b/libraries/tools/idl2k/src/main/kotlin/config.kt index b76fd6cc791..d1d2365b476 100644 --- a/libraries/tools/idl2k/src/main/kotlin/config.kt +++ b/libraries/tools/idl2k/src/main/kotlin/config.kt @@ -31,6 +31,7 @@ val urls = listOf( "https://w3c.github.io/mediacapture-main/" to "org.w3c.dom.mediacapture", "http://www.w3.org/TR/DOM-Parsing/" to "org.w3c.dom.parsing", + "https://w3c.github.io/clipboard-apis" to "org.w3c.dom.clipboard", "https://raw.githubusercontent.com/whatwg/url/master/url.html" to "org.w3c.dom.url", "https://www.w3.org/TR/SVG2/single-page.html" to "org.w3c.dom.svg", @@ -108,6 +109,11 @@ val eventSpecifierMapper = mapOf( "ondragstart" to "DragEvent", "ondrop" to "DragEvent", + "oncopy" to "ClipboardEvent", + "oncut" to "ClipboardEvent", + "onpaste" to "ClipboardEvent", + + "onfetch" to "FetchEvent", "onblur" to "FocusEvent",