diff --git a/libraries/stdlib/js/idl/org.w3c.dom.pointerevents.idl b/libraries/stdlib/js/idl/org.w3c.dom.pointerevents.idl new file mode 100644 index 00000000000..0f6302bab21 --- /dev/null +++ b/libraries/stdlib/js/idl/org.w3c.dom.pointerevents.idl @@ -0,0 +1,54 @@ +namespace org.w3c.dom.pointerevents; + + +// Downloaded from http://www.w3.org/TR/pointerevents/ +dictionary PointerEventInit : MouseEventInit { + long pointerId = 0; + double width = 1; + double height = 1; + float pressure = 0; + float tangentialPressure = 0; + long tiltX = 0; + long tiltY = 0; + long twist = 0; + DOMString pointerType = ""; + boolean isPrimary = false; +}; + +[Constructor(DOMString type, optional PointerEventInit eventInitDict), Exposed=Window] +interface PointerEvent : MouseEvent { + readonly attribute long pointerId; + readonly attribute double width; + readonly attribute double height; + readonly attribute float pressure; + readonly attribute float tangentialPressure; + readonly attribute long tiltX; + readonly attribute long tiltY; + readonly attribute long twist; + readonly attribute DOMString pointerType; + readonly attribute boolean isPrimary; +}; + +partial interface Element { + void setPointerCapture(long pointerId); + void releasePointerCapture(long pointerId); + boolean hasPointerCapture(long pointerId); +}; + +partial interface GlobalEventHandlers { + attribute EventHandler ongotpointercapture; + attribute EventHandler onlostpointercapture; + attribute EventHandler onpointerdown; + attribute EventHandler onpointermove; + attribute EventHandler onpointerup; + attribute EventHandler onpointercancel; + attribute EventHandler onpointerover; + attribute EventHandler onpointerout; + attribute EventHandler onpointerenter; + attribute EventHandler onpointerleave; +}; + +partial interface Navigator { + readonly attribute long maxTouchPoints; +}; + 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 adb9786c885..dd44dca6613 100644 --- a/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt +++ b/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt @@ -14,6 +14,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 44ea79442c1..556b5d4c362 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 @@ -14,6 +14,7 @@ import org.khronos.webgl.* import org.w3c.dom.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 6e69f5b4b8a..a76c57ad41b 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 @@ -14,6 +14,7 @@ import org.khronos.webgl.* import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 db78e113095..170810e96a4 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.dom.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.kt @@ -14,6 +14,7 @@ import org.khronos.webgl.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* @@ -74,6 +75,16 @@ public external open class Document : Node, GlobalEventHandlers, DocumentAndElem open val documentElement: Element? open val scrollingElement: Element? open val styleSheets: StyleSheetList + override var ongotpointercapture: ((Event) -> dynamic)? + override var onlostpointercapture: ((Event) -> dynamic)? + override var onpointerdown: ((Event) -> dynamic)? + override var onpointermove: ((Event) -> dynamic)? + override var onpointerup: ((Event) -> dynamic)? + override var onpointercancel: ((Event) -> dynamic)? + override var onpointerover: ((Event) -> dynamic)? + override var onpointerout: ((Event) -> dynamic)? + override var onpointerenter: ((Event) -> dynamic)? + override var onpointerleave: ((Event) -> dynamic)? override var onabort: ((Event) -> dynamic)? override var onblur: ((Event) -> dynamic)? override var oncancel: ((Event) -> dynamic)? @@ -2125,6 +2136,16 @@ public inline fun PromiseRejectionEventInit(promise: Promise?, reason: Any * Exposes the JavaScript [GlobalEventHandlers](https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers) to Kotlin */ public external interface GlobalEventHandlers { + var ongotpointercapture: ((Event) -> dynamic)? + var onlostpointercapture: ((Event) -> dynamic)? + var onpointerdown: ((Event) -> dynamic)? + var onpointermove: ((Event) -> dynamic)? + var onpointerup: ((Event) -> dynamic)? + var onpointercancel: ((Event) -> dynamic)? + var onpointerover: ((Event) -> dynamic)? + var onpointerout: ((Event) -> dynamic)? + var onpointerenter: ((Event) -> dynamic)? + var onpointerleave: ((Event) -> dynamic)? var onabort: ((Event) -> dynamic)? var onblur: ((Event) -> dynamic)? var oncancel: ((Event) -> dynamic)? @@ -2237,6 +2258,7 @@ public external interface WindowOrWorkerGlobalScope { */ public external abstract class Navigator : NavigatorID, NavigatorLanguage, NavigatorOnLine, NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, NavigatorConcurrentHardware { open val serviceWorker: ServiceWorkerContainer + open val maxTouchPoints: Int fun vibrate(pattern: dynamic): Boolean } @@ -3199,6 +3221,9 @@ public external abstract class Element : Node, ParentNode, NonDocumentTypeChildN open val clientWidth: Int open val clientHeight: Int fun requestFullscreen(): Promise + fun setPointerCapture(pointerId: Int): Unit + fun releasePointerCapture(pointerId: Int): Unit + fun hasPointerCapture(pointerId: Int): Boolean fun insertAdjacentHTML(position: String, text: String): Unit fun hasAttributes(): Boolean fun getAttributeNames(): Array 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 f0c3d7375c2..1292991eac4 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 @@ -14,6 +14,7 @@ import org.khronos.webgl.* import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 new file mode 100644 index 00000000000..0bab04de6b2 --- /dev/null +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.dom.pointerevents.kt @@ -0,0 +1,119 @@ +/* + * 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.pointerevents + +import kotlin.js.* +import org.khronos.webgl.* +import org.w3c.dom.* +import org.w3c.dom.css.* +import org.w3c.dom.events.* +import org.w3c.dom.parsing.* +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 PointerEventInit : MouseEventInit { + var pointerId: Int? /* = 0 */ + get() = definedExternally + set(value) = definedExternally + var width: Double? /* = 1.0 */ + get() = definedExternally + set(value) = definedExternally + var height: Double? /* = 1.0 */ + get() = definedExternally + set(value) = definedExternally + var pressure: Float? /* = 0f */ + get() = definedExternally + set(value) = definedExternally + var tangentialPressure: Float? /* = 0f */ + get() = definedExternally + set(value) = definedExternally + var tiltX: Int? /* = 0 */ + get() = definedExternally + set(value) = definedExternally + var tiltY: Int? /* = 0 */ + get() = definedExternally + set(value) = definedExternally + var twist: Int? /* = 0 */ + get() = definedExternally + set(value) = definedExternally + var pointerType: String? /* = "" */ + get() = definedExternally + set(value) = definedExternally + var isPrimary: Boolean? /* = false */ + get() = definedExternally + set(value) = definedExternally +} + +@kotlin.internal.InlineOnly +public inline fun PointerEventInit(pointerId: Int? = 0, width: Double? = 1.0, height: Double? = 1.0, pressure: Float? = 0f, tangentialPressure: Float? = 0f, tiltX: Int? = 0, tiltY: Int? = 0, twist: Int? = 0, pointerType: String? = "", isPrimary: Boolean? = false, screenX: Int? = 0, screenY: Int? = 0, clientX: Int? = 0, clientY: Int? = 0, button: Short? = 0, buttons: Short? = 0, relatedTarget: EventTarget? = null, ctrlKey: Boolean? = false, shiftKey: Boolean? = false, altKey: Boolean? = false, metaKey: Boolean? = false, modifierAltGraph: Boolean? = false, modifierCapsLock: Boolean? = false, modifierFn: Boolean? = false, modifierFnLock: Boolean? = false, modifierHyper: Boolean? = false, modifierNumLock: Boolean? = false, modifierScrollLock: Boolean? = false, modifierSuper: Boolean? = false, modifierSymbol: Boolean? = false, modifierSymbolLock: Boolean? = false, view: Window? = null, detail: Int? = 0, bubbles: Boolean? = false, cancelable: Boolean? = false, composed: Boolean? = false): PointerEventInit { + val o = js("({})") + + o["pointerId"] = pointerId + o["width"] = width + o["height"] = height + o["pressure"] = pressure + o["tangentialPressure"] = tangentialPressure + o["tiltX"] = tiltX + o["tiltY"] = tiltY + o["twist"] = twist + o["pointerType"] = pointerType + o["isPrimary"] = isPrimary + o["screenX"] = screenX + o["screenY"] = screenY + o["clientX"] = clientX + o["clientY"] = clientY + o["button"] = button + o["buttons"] = buttons + o["relatedTarget"] = relatedTarget + o["ctrlKey"] = ctrlKey + o["shiftKey"] = shiftKey + o["altKey"] = altKey + o["metaKey"] = metaKey + o["modifierAltGraph"] = modifierAltGraph + o["modifierCapsLock"] = modifierCapsLock + o["modifierFn"] = modifierFn + o["modifierFnLock"] = modifierFnLock + o["modifierHyper"] = modifierHyper + o["modifierNumLock"] = modifierNumLock + o["modifierScrollLock"] = modifierScrollLock + o["modifierSuper"] = modifierSuper + o["modifierSymbol"] = modifierSymbol + o["modifierSymbolLock"] = modifierSymbolLock + o["view"] = view + o["detail"] = detail + o["bubbles"] = bubbles + o["cancelable"] = cancelable + o["composed"] = composed + + return o +} + +/** + * Exposes the JavaScript [PointerEvent](https://developer.mozilla.org/en/docs/Web/API/PointerEvent) to Kotlin + */ +public external open class PointerEvent(type: String, eventInitDict: PointerEventInit = definedExternally) : MouseEvent { + open val pointerId: Int + open val width: Double + open val height: Double + open val pressure: Float + open val tangentialPressure: Float + open val tiltX: Int + open val tiltY: Int + open val twist: Int + open val pointerType: String + open val isPrimary: Boolean +} + 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 75f9045f5ac..ee81f1de685 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 @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.url.* import org.w3c.fetch.* import org.w3c.files.* 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 f460c774d60..865e341a054 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 @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* 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 f047eca71ae..c4bbb5871b5 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.fetch.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.fetch.kt @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.files.* 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 f174194d0f1..6c8e1dd3bf8 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.files.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.files.kt @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 6f66cda7460..4845d4862e5 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.notifications.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.notifications.kt @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 156ff0bd0b2..f87a172ba78 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.performance.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.performance.kt @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 4619c2d75e3..141d6680d49 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.workers.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.workers.kt @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* 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 165f0b79fc2..b74daf68173 100644 --- a/libraries/stdlib/js/src/org.w3c/org.w3c.xhr.kt +++ b/libraries/stdlib/js/src/org.w3c/org.w3c.xhr.kt @@ -15,6 +15,7 @@ import org.w3c.dom.* import org.w3c.dom.css.* import org.w3c.dom.events.* import org.w3c.dom.parsing.* +import org.w3c.dom.pointerevents.* import org.w3c.dom.svg.* import org.w3c.dom.url.* import org.w3c.fetch.* diff --git a/libraries/tools/idl2k/src/main/kotlin/config.kt b/libraries/tools/idl2k/src/main/kotlin/config.kt index ebe5a72170c..875f2b7c1a3 100644 --- a/libraries/tools/idl2k/src/main/kotlin/config.kt +++ b/libraries/tools/idl2k/src/main/kotlin/config.kt @@ -24,6 +24,8 @@ val urls = listOf( "http://www.w3.org/TR/geometry-1/" to "org.w3c.dom", "http://www.w3.org/TR/cssom-view/" to "org.w3c.dom", "http://www.w3.org/TR/uievents/" to "org.w3c.dom.events", + "http://www.w3.org/TR/pointerevents/" to "org.w3c.dom.pointerevents", + "https://drafts.csswg.org/cssom/" to "org.w3c.dom.css", "http://www.w3.org/TR/DOM-Parsing/" to "org.w3c.dom.parsing", "https://raw.githubusercontent.com/whatwg/url/master/url.html" to "org.w3c.dom.url", diff --git a/libraries/tools/idl2k/src/main/kotlin/dl/download.kt b/libraries/tools/idl2k/src/main/kotlin/dl/download.kt index 8261f7e983c..1bb58a690a6 100644 --- a/libraries/tools/idl2k/src/main/kotlin/dl/download.kt +++ b/libraries/tools/idl2k/src/main/kotlin/dl/download.kt @@ -49,15 +49,18 @@ fun main(args: Array) { w.appendln() w.appendln() - e.value.forEach { pair -> - val (url) = pair + e.value.forEach { (url) -> println("Loading $url...") w.appendln("// Downloaded from $url") - if (url.endsWith(".idl")) { - w.appendln(URL(url).readText()) - } else { - extractIDLText(url, w) + val content = fetch(url) + + if (content != null) { + if (url.endsWith(".idl")) { + w.appendln(content) + } else { + extractIDLText(content, w) + } } } @@ -66,9 +69,18 @@ fun main(args: Array) { } } -private fun extractIDLText(url: String, out: Appendable) { - // val soup = Jsoup.connect(url).validateTLSCertificates(false).ignoreHttpErrors(true).get() - val soup = Jsoup.parse(URL(url).readText()) +private fun fetch(url: String): String? { + try { + return URL(url).readText() + } catch (e: Exception) { + println("failed to download ${url}, if it's not a local problem, revisit the list of downloaded entities") + e.printStackTrace() + return null + } +} + +private fun extractIDLText(rawContent: String, out: Appendable) { + val soup = Jsoup.parse(rawContent) fun append(it : Element) { if (!it.tag().preserveWhitespace()) { return append(Element(Tag.valueOf("pre"), it.baseUri()).appendChild(it))