From 9c623c66f7b8ad7eef9c09562bd1b1924795b614 Mon Sep 17 00:00:00 2001 From: Alfonso Landin Date: Sun, 9 Jul 2023 12:30:23 +0200 Subject: [PATCH 1/4] Add options parameter to Document#createElement Also to Document#createElementNS --- api-reports/2_12.txt | 9 +++++---- api-reports/2_13.txt | 9 +++++---- dom/src/main/scala/org/scalajs/dom/Document.scala | 6 ++++-- .../scala/org/scalajs/dom/ElementCreationOptions.scala | 7 +++++++ 4 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 dom/src/main/scala/org/scalajs/dom/ElementCreationOptions.scala diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index d874b2985..b309e4cf5 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -1724,8 +1724,8 @@ Document[JC] def createAttributeNS(namespaceURI: String, qualifiedName: String): Document[JC] def createCDATASection(data: String): CDATASection Document[JC] def createComment(data: String): Comment Document[JC] def createDocumentFragment(): DocumentFragment -Document[JC] def createElement(tagName: String): Element -Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +Document[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element Document[JC] def createEvent(eventInterface: String): Event Document[JC] def createNSResolver(node: Node): XPathNSResolver Document[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator @@ -2065,6 +2065,7 @@ Element[JC] def setAttributeNodeNS(newAttr: Attr): Attr Element[JC] def shadowRoot: ShadowRoot Element[JC] def tagName: String Element[JC] var textContent: String +ElementCreationOptions[JT] var is: js.UndefOr[String] ElementDefinitionOptions[JT] var `extends`: js.UndefOr[String] EndOfStreamError[JT] EndOfStreamError[SO] val decode: EndOfStreamError @@ -4901,8 +4902,8 @@ HTMLDocument[JC] def createAttributeNS(namespaceURI: String, qualifiedName: Stri HTMLDocument[JC] def createCDATASection(data: String): CDATASection HTMLDocument[JC] def createComment(data: String): Comment HTMLDocument[JC] def createDocumentFragment(): DocumentFragment -HTMLDocument[JC] def createElement(tagName: String): Element -HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +HTMLDocument[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element HTMLDocument[JC] def createEvent(eventInterface: String): Event HTMLDocument[JC] def createNSResolver(node: Node): XPathNSResolver HTMLDocument[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index d874b2985..b309e4cf5 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -1724,8 +1724,8 @@ Document[JC] def createAttributeNS(namespaceURI: String, qualifiedName: String): Document[JC] def createCDATASection(data: String): CDATASection Document[JC] def createComment(data: String): Comment Document[JC] def createDocumentFragment(): DocumentFragment -Document[JC] def createElement(tagName: String): Element -Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +Document[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element Document[JC] def createEvent(eventInterface: String): Event Document[JC] def createNSResolver(node: Node): XPathNSResolver Document[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator @@ -2065,6 +2065,7 @@ Element[JC] def setAttributeNodeNS(newAttr: Attr): Attr Element[JC] def shadowRoot: ShadowRoot Element[JC] def tagName: String Element[JC] var textContent: String +ElementCreationOptions[JT] var is: js.UndefOr[String] ElementDefinitionOptions[JT] var `extends`: js.UndefOr[String] EndOfStreamError[JT] EndOfStreamError[SO] val decode: EndOfStreamError @@ -4901,8 +4902,8 @@ HTMLDocument[JC] def createAttributeNS(namespaceURI: String, qualifiedName: Stri HTMLDocument[JC] def createCDATASection(data: String): CDATASection HTMLDocument[JC] def createComment(data: String): Comment HTMLDocument[JC] def createDocumentFragment(): DocumentFragment -HTMLDocument[JC] def createElement(tagName: String): Element -HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +HTMLDocument[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element HTMLDocument[JC] def createEvent(eventInterface: String): Event HTMLDocument[JC] def createNSResolver(node: Node): XPathNSResolver HTMLDocument[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator diff --git a/dom/src/main/scala/org/scalajs/dom/Document.scala b/dom/src/main/scala/org/scalajs/dom/Document.scala index e3fc43f27..54c20695b 100644 --- a/dom/src/main/scala/org/scalajs/dom/Document.scala +++ b/dom/src/main/scala/org/scalajs/dom/Document.scala @@ -8,6 +8,7 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ +import scala.scalajs.js.| /** Each web page loaded in the browser has its own document object. The Document interface serves as an entry point to * the web page's content (the DOM tree, including elements such as <body> and <table>) and provides @@ -124,10 +125,11 @@ abstract class Document extends Node with NodeSelector with DocumentEvent with P /** In an HTML document creates the specified HTML element or HTMLUnknownElement if the element is not known. In a XUL * document creates the specified XUL element. In other documents creates an element with a null namespaceURI. */ - def createElement(tagName: String): Element = js.native + def createElement(tagName: String, options: String | ElementCreationOptions = js.native): Element = js.native /** Creates an element with the specified namespace URI and qualified name. */ - def createElementNS(namespaceURI: String, qualifiedName: String): Element = js.native + def createElementNS(namespaceURI: String, qualifiedName: String, + options: String | ElementCreationOptions = js.native): Element = js.native /** createAttribute creates a new attribute node, and returns it. */ def createAttribute(name: String): Attr = js.native diff --git a/dom/src/main/scala/org/scalajs/dom/ElementCreationOptions.scala b/dom/src/main/scala/org/scalajs/dom/ElementCreationOptions.scala new file mode 100644 index 000000000..c16e82ac2 --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ElementCreationOptions.scala @@ -0,0 +1,7 @@ +package org.scalajs.dom + +import scala.scalajs.js + +trait ElementCreationOptions extends js.Object { + var is: js.UndefOr[String] = js.undefined +} From 8668b2015be873182d686858f6a24a1a98afc49d Mon Sep 17 00:00:00 2001 From: zetashift Date: Thu, 20 Jul 2023 20:14:21 +0200 Subject: [PATCH 2/4] Update dom/src/main/scala/org/scalajs/dom/Document.scala Co-authored-by: Arman Bilge --- dom/src/main/scala/org/scalajs/dom/Document.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/Document.scala b/dom/src/main/scala/org/scalajs/dom/Document.scala index 54c20695b..6bfc16d58 100644 --- a/dom/src/main/scala/org/scalajs/dom/Document.scala +++ b/dom/src/main/scala/org/scalajs/dom/Document.scala @@ -125,7 +125,9 @@ abstract class Document extends Node with NodeSelector with DocumentEvent with P /** In an HTML document creates the specified HTML element or HTMLUnknownElement if the element is not known. In a XUL * document creates the specified XUL element. In other documents creates an element with a null namespaceURI. */ - def createElement(tagName: String, options: String | ElementCreationOptions = js.native): Element = js.native + def createElement(tagName: String): Element = js.native + def createElement(tagName: String, options: String): Element = js.native + def createElement(tagName: String, options: ElementCreationOptions): Element = js.native /** Creates an element with the specified namespace URI and qualified name. */ def createElementNS(namespaceURI: String, qualifiedName: String, From d3633f12eb938238013adbcda8337e00b8058750 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 20 Jul 2023 18:39:26 +0000 Subject: [PATCH 3/4] Use overloads instead --- api-reports/2_13.txt | 16 ++++++++++++---- .../main/scala/org/scalajs/dom/Document.scala | 10 +++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index b309e4cf5..a79e51d4e 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -1724,8 +1724,12 @@ Document[JC] def createAttributeNS(namespaceURI: String, qualifiedName: String): Document[JC] def createCDATASection(data: String): CDATASection Document[JC] def createComment(data: String): Comment Document[JC] def createDocumentFragment(): DocumentFragment -Document[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element -Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element +Document[JC] def createElement(tagName: String): Element +Document[JC] def createElement(tagName: String, options: ElementCreationOptions): Element +Document[JC] def createElement(tagName: String, options: String): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: ElementCreationOptions): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String): Element Document[JC] def createEvent(eventInterface: String): Event Document[JC] def createNSResolver(node: Node): XPathNSResolver Document[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator @@ -4902,8 +4906,12 @@ HTMLDocument[JC] def createAttributeNS(namespaceURI: String, qualifiedName: Stri HTMLDocument[JC] def createCDATASection(data: String): CDATASection HTMLDocument[JC] def createComment(data: String): Comment HTMLDocument[JC] def createDocumentFragment(): DocumentFragment -HTMLDocument[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element -HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element +HTMLDocument[JC] def createElement(tagName: String): Element +HTMLDocument[JC] def createElement(tagName: String, options: ElementCreationOptions): Element +HTMLDocument[JC] def createElement(tagName: String, options: String): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: ElementCreationOptions): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String): Element HTMLDocument[JC] def createEvent(eventInterface: String): Event HTMLDocument[JC] def createNSResolver(node: Node): XPathNSResolver HTMLDocument[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator diff --git a/dom/src/main/scala/org/scalajs/dom/Document.scala b/dom/src/main/scala/org/scalajs/dom/Document.scala index 6bfc16d58..691270fe3 100644 --- a/dom/src/main/scala/org/scalajs/dom/Document.scala +++ b/dom/src/main/scala/org/scalajs/dom/Document.scala @@ -8,7 +8,6 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ -import scala.scalajs.js.| /** Each web page loaded in the browser has its own document object. The Document interface serves as an entry point to * the web page's content (the DOM tree, including elements such as <body> and <table>) and provides @@ -126,12 +125,17 @@ abstract class Document extends Node with NodeSelector with DocumentEvent with P * document creates the specified XUL element. In other documents creates an element with a null namespaceURI. */ def createElement(tagName: String): Element = js.native + def createElement(tagName: String, options: String): Element = js.native + def createElement(tagName: String, options: ElementCreationOptions): Element = js.native /** Creates an element with the specified namespace URI and qualified name. */ - def createElementNS(namespaceURI: String, qualifiedName: String, - options: String | ElementCreationOptions = js.native): Element = js.native + def createElementNS(namespaceURI: String, qualifiedName: String): Element = js.native + + def createElementNS(namespaceURI: String, qualifiedName: String, options: String): Element = js.native + + def createElementNS(namespaceURI: String, qualifiedName: String, options: ElementCreationOptions): Element = js.native /** createAttribute creates a new attribute node, and returns it. */ def createAttribute(name: String): Attr = js.native From 33f2db2e6cb36fe112c38e1df62f9cde329bc594 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 20 Jul 2023 19:18:01 +0000 Subject: [PATCH 4/4] Update reports --- api-reports/2_12.txt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index b309e4cf5..a79e51d4e 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -1724,8 +1724,12 @@ Document[JC] def createAttributeNS(namespaceURI: String, qualifiedName: String): Document[JC] def createCDATASection(data: String): CDATASection Document[JC] def createComment(data: String): Comment Document[JC] def createDocumentFragment(): DocumentFragment -Document[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element -Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element +Document[JC] def createElement(tagName: String): Element +Document[JC] def createElement(tagName: String, options: ElementCreationOptions): Element +Document[JC] def createElement(tagName: String, options: String): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: ElementCreationOptions): Element +Document[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String): Element Document[JC] def createEvent(eventInterface: String): Event Document[JC] def createNSResolver(node: Node): XPathNSResolver Document[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator @@ -4902,8 +4906,12 @@ HTMLDocument[JC] def createAttributeNS(namespaceURI: String, qualifiedName: Stri HTMLDocument[JC] def createCDATASection(data: String): CDATASection HTMLDocument[JC] def createComment(data: String): Comment HTMLDocument[JC] def createDocumentFragment(): DocumentFragment -HTMLDocument[JC] def createElement(tagName: String, options: String | ElementCreationOptions?): Element -HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String | ElementCreationOptions?): Element +HTMLDocument[JC] def createElement(tagName: String): Element +HTMLDocument[JC] def createElement(tagName: String, options: ElementCreationOptions): Element +HTMLDocument[JC] def createElement(tagName: String, options: String): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: ElementCreationOptions): Element +HTMLDocument[JC] def createElementNS(namespaceURI: String, qualifiedName: String, options: String): Element HTMLDocument[JC] def createEvent(eventInterface: String): Event HTMLDocument[JC] def createNSResolver(node: Node): XPathNSResolver HTMLDocument[JC] def createNodeIterator(root: Node, whatToShow: Int, filter: NodeFilter, entityReferenceExpansion: Boolean): NodeIterator