From 3fba3892de892f9a6fcb08efae99c650e7ee0d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E8=88=AA?= Date: Sun, 24 Apr 2022 17:52:17 +0800 Subject: [PATCH 1/4] Partial support for custom elements --- .../scalajs/dom/AttachShadowRootOptions.scala | 9 +++++++ .../dom/CustomElementDefineOptions.scala | 8 +++++++ .../scalajs/dom/CustomElementRegistry.scala | 21 ++++++++++++++++ .../main/scala/org/scalajs/dom/Element.scala | 6 +++++ .../org/scalajs/dom/HTMLTemplateElement.scala | 21 ++++++++++++++++ .../scala/org/scalajs/dom/ShadowRoot.scala | 24 +++++++++++++++++++ .../main/scala/org/scalajs/dom/Window.scala | 5 ++++ 7 files changed, 94 insertions(+) create mode 100644 dom/src/main/scala/org/scalajs/dom/AttachShadowRootOptions.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/CustomElementDefineOptions.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/CustomElementRegistry.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/HTMLTemplateElement.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/ShadowRoot.scala diff --git a/dom/src/main/scala/org/scalajs/dom/AttachShadowRootOptions.scala b/dom/src/main/scala/org/scalajs/dom/AttachShadowRootOptions.scala new file mode 100644 index 000000000..6e256e9be --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/AttachShadowRootOptions.scala @@ -0,0 +1,9 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** A AttachShadowRootOptions object represents additional options associated with Element.attachShadow. */ +trait AttachShadowRootOptions extends js.Object { + var mode: js.UndefOr[String] = js.undefined + var delegatesFocus: js.UndefOr[Boolean] = js.undefined +} diff --git a/dom/src/main/scala/org/scalajs/dom/CustomElementDefineOptions.scala b/dom/src/main/scala/org/scalajs/dom/CustomElementDefineOptions.scala new file mode 100644 index 000000000..83b65cae4 --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/CustomElementDefineOptions.scala @@ -0,0 +1,8 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** A CustomElementDefineOptions object represents additional options associated with CustomElementRegsitry.define. */ +trait CustomElementDefineOptions extends js.Object { + var `extends`: js.UndefOr[Boolean] = js.undefined +} diff --git a/dom/src/main/scala/org/scalajs/dom/CustomElementRegistry.scala b/dom/src/main/scala/org/scalajs/dom/CustomElementRegistry.scala new file mode 100644 index 000000000..945559930 --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/CustomElementRegistry.scala @@ -0,0 +1,21 @@ +/** All documentation for facades is thanks to Mozilla Contributors at https://developer.mozilla.org/en-US/docs/Web/API + * and available under the Creative Commons Attribution-ShareAlike v2.5 or later. + * http://creativecommons.org/licenses/by-sa/2.5/ + * + * Everything else is under the MIT License http://opensource.org/licenses/MIT + */ +package org.scalajs.dom + +import scala.scalajs.js +import scala.scalajs.js.annotation._ + +/** The CustomElementRegistry interface provides methods for registering custom elements and querying registered + * elements. To get an instance of it, use the window.customElements property. + */ +@js.native +@JSGlobal +abstract class CustomElementRegistry extends js.Object { + + /** Defines a new custom element. */ + def define(name: String, constructor: js.Dynamic, options: CustomElementDefineOptions = js.native): Unit +} diff --git a/dom/src/main/scala/org/scalajs/dom/Element.scala b/dom/src/main/scala/org/scalajs/dom/Element.scala index 74f73775e..b74edc1ad 100644 --- a/dom/src/main/scala/org/scalajs/dom/Element.scala +++ b/dom/src/main/scala/org/scalajs/dom/Element.scala @@ -259,4 +259,10 @@ abstract class Element extends Node with NodeSelector with ParentNode with NonDo * pointerlockerror events at the Document level. */ def requestPointerLock(): Unit = js.native + + /** Attaches a shadow DOM tree to the specified element and returns a reference to its ShadowRoot. */ + def attachShadow(init: AttachShadowRootOptions): ShadowRoot = js.native + + /** Returns the open shadow root that is hosted by the element, or null if no open shadow root is present. */ + def shadowRoot: ShadowRoot = js.native } diff --git a/dom/src/main/scala/org/scalajs/dom/HTMLTemplateElement.scala b/dom/src/main/scala/org/scalajs/dom/HTMLTemplateElement.scala new file mode 100644 index 000000000..8e18321f6 --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/HTMLTemplateElement.scala @@ -0,0 +1,21 @@ +/** All documentation for facades is thanks to Mozilla Contributors at https://developer.mozilla.org/en-US/docs/Web/API + * and available under the Creative Commons Attribution-ShareAlike v2.5 or later. + * http://creativecommons.org/licenses/by-sa/2.5/ + * + * Everything else is under the MIT License http://opensource.org/licenses/MIT + */ +package org.scalajs.dom + +import scala.scalajs.js +import scala.scalajs.js.annotation._ + +/** The HTMLTemplateElement interface enables access to the contents of an HTML