From 53832c8decf43a5ee9ed9e4b29eedb0895c7466c Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Wed, 13 Apr 2022 16:19:57 -0500 Subject: [PATCH 01/10] Adding facade for ResizeObserver and required types --- .../org/scalajs/dom/DOMRectReadOnly.scala | 55 +++++++++++++++++++ .../org/scalajs/dom/ResizeObserver.scala | 33 +++++++++++ .../org/scalajs/dom/ResizeObserverEntry.scala | 41 ++++++++++++++ .../scalajs/dom/ResizeObserverOptions.scala | 21 +++++++ .../org/scalajs/dom/ResizeObserverSize.scala | 23 ++++++++ 5 files changed, 173 insertions(+) create mode 100644 dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala diff --git a/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala b/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala new file mode 100644 index 000000000..c6d05ccfd --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala @@ -0,0 +1,55 @@ +package org.scalajs.dom + +import scala.scalajs.js + +@js.native +trait DOMRectReadOnly extends js.Object { + + /** The x coordinate of the DOMRect's origin. + * + * MDN + */ + def x: Double = js.native + + /** The y coordinate of the DOMRect's origin. + * + * MDN + */ + def y: Double = js.native + + /** The width of the DOMRect. + * + * MDN + */ + def width: Double = js.native + + /** The height of the DOMRect. + * + * MDN + */ + def height: Double = js.native + + /** Returns the top coordinate value of the DOMRect (usually the same as y.) + * + * MDN + */ + def top: Double = js.native + + /** Returns the right coordinate value of the DOMRect (usually the same as x + width). + * + * MDN + */ + def right: Double = js.native + + /** Returns the bottom coordinate value of the DOMRect (usually the same as y + height) + * + * MDN + */ + def bottom: Double = js.native + + /** Returns the left coordinate value of the DOMRect (usually the same as x) + * + * MDN + */ + def left: Double = js.native +} diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala new file mode 100644 index 000000000..ee692f68b --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala @@ -0,0 +1,33 @@ +package org.scalajs.dom + +import scala.scalajs.js +import scala.scalajs.js.annotation.JSGlobal + +/** The ResizeObserver constructor creates a new ResizeObserver object, which can be used to report changes to the + * content or border box of an Element or the bounding box of an SVGElement - MDN + * + * @param callback + * The function called whenever an observed resize occurs. - MDN + */ +@js.native +@JSGlobal +class ResizeObserver(callback: js.Function2[js.Array[ResizeObserverEntry], ResizeObserver, _]) extends js.Object { + + /** Starts observing the specified Element or SVGElement. + * + * MDN + */ + def observe(target: Node, options: js.UndefOr[ResizeObserverOptions] = js.native): Unit = js.native + + /** Unobserves all observed Element or SVGElement targets. + * + * MDN + */ + def disconnect(): Unit = js.native + + /** Ends the observing of a specified Element or SVGElement. + * + * MDN + */ + def unobserve(target: Node): Unit = js.native +} diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala new file mode 100644 index 000000000..c65523a35 --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala @@ -0,0 +1,41 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** The ResizeObserverEntry interface represents the object passedto the ResizeObserver() constructor's callback + * function, which allows you to access the new dimensions of the Element or SVGElement being observed. + * + * MDN + */ +@js.native +trait ResizeObserverEntry extends js.Object { + + /** A reference to the Element or SVGElement being observed + * + * MDN + */ + def target: Node = js.native + + /** An array containing objects with the new border box size of the observed element. The array is necessary to + * support elements that have multiple fragments, which occur in multi-column scenarios. + * + * MDN + */ + def borderBoxSize: js.Array[ResizeObserverSize] = js.native + + /** An array containing objects with the new content box size of the observed element. The array is necessary to + * support elements that have multiple fragments, which occur in multi-column scenarios. + * + * MDN + */ + def contentBoxSize: js.Array[ResizeObserverSize] = js.native + + /** A [[DOMRectReadOnly]] object containing the new size of the observed element when the callback is run. Note that + * this is better supported than the above two properties, but it is left over from an earlier implementation of the + * Resize Observer API, is still included in the spec for web compat reasons, and may be deprecated in future + * versions. + * + * MDN + */ + def contentRect: DOMRectReadOnly = js.native +} diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala new file mode 100644 index 000000000..e9b86110c --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala @@ -0,0 +1,21 @@ +package org.scalajs.dom + +import scala.scalajs.js + +@js.native +trait ResizeObserverOptions extends js.Object { + var box: js.UndefOr[String] = js.native +} + +/** Factory for [[ResizeObserverOptions]] objects. */ +object ResizeObserverOptions { + + /** Creates a new [[ResizeObserverOptions]] object with the given values. */ + def apply( + box: Option[String] = None + ): ResizeObserverOptions = { + val res = js.Dynamic.asInstanceOf[ResizeObserverOptions] + box.foreach(res.box = _) + res + } +} diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala new file mode 100644 index 000000000..a23c1049b --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala @@ -0,0 +1,23 @@ +package org.scalajs.dom + +import scala.scalajs.js + +@js.native +trait ResizeObserverSize extends js.Object { + + /** The length of the observed element's border box in the block dimension. For boxes with a horizontal writing-mode, + * this is the vertical dimension, or height; if the writing-mode is vertical, this is the horizontal dimension, or + * width. + * + * MDN + */ + def blockSize: Double = js.native + + /** The length of the observed element's border box in the inline dimension. For boxes with a horizontal writing-mode, + * this is the horizontal dimension, or width; if the writing-mode is vertical, this is the vertical dimension, or + * height. + * + * MDN + */ + def inlineSize: Double = js.native +} From 57e739c243437047f8c88540a0c5da59a794b844 Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Wed, 13 Apr 2022 16:23:25 -0500 Subject: [PATCH 02/10] Adding api change set for ResizeObserver --- api-reports/2_12.txt | 19 +++++++++++++++++++ api-reports/2_13.txt | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index fc20a3f5d..e9a6b916e 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -1245,6 +1245,14 @@ DOMRect[JC] var top: Double DOMRect[JC] var width: Double DOMRectList[JC] @JSBracketAccess def apply(index: Int): T DOMRectList[JC] def length: Int +DOMRectReadOnly[JT] def bottom: Double +DOMRectReadOnly[JT] def height: Double +DOMRectReadOnly[JT] def left: Double +DOMRectReadOnly[JT] def right: Double +DOMRectReadOnly[JT] def top: Double +DOMRectReadOnly[JT] def width: Double +DOMRectReadOnly[JT] def x: Double +DOMRectReadOnly[JT] def y: Double DOMSettableTokenList[JT] def add(token: String): Unit DOMSettableTokenList[JT] @JSBracketAccess def apply(index: Int): T DOMSettableTokenList[JT] def contains(token: String): Boolean @@ -15948,6 +15956,17 @@ RequestType[SO] val script: RequestType RequestType[SO] val style: RequestType RequestType[SO] val track: RequestType RequestType[SO] val video: RequestType +ResizeObserver[JC] def disconnect(): Unit +ResizeObserver[JC] def observe(target: Node, options: js.UndefOr[ResizeObserverOptions]?): Unit +ResizeObserver[JC] def unobserve(target: Node): Unit +ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] +ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] +ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly +ResizeObserverEntry[JT] def target: Node +ResizeObserverOptions[JT] var box: js.UndefOr[String] +ResizeObserverOptions[SO] def apply(box: Option[String] = None): ResizeObserverOptions +ResizeObserverSize[JT] def blockSize: Double +ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] Response[JC] def blob(): js.Promise[Blob] Response[JC] val body: ReadableStream[Uint8Array] diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index fc20a3f5d..e9a6b916e 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -1245,6 +1245,14 @@ DOMRect[JC] var top: Double DOMRect[JC] var width: Double DOMRectList[JC] @JSBracketAccess def apply(index: Int): T DOMRectList[JC] def length: Int +DOMRectReadOnly[JT] def bottom: Double +DOMRectReadOnly[JT] def height: Double +DOMRectReadOnly[JT] def left: Double +DOMRectReadOnly[JT] def right: Double +DOMRectReadOnly[JT] def top: Double +DOMRectReadOnly[JT] def width: Double +DOMRectReadOnly[JT] def x: Double +DOMRectReadOnly[JT] def y: Double DOMSettableTokenList[JT] def add(token: String): Unit DOMSettableTokenList[JT] @JSBracketAccess def apply(index: Int): T DOMSettableTokenList[JT] def contains(token: String): Boolean @@ -15948,6 +15956,17 @@ RequestType[SO] val script: RequestType RequestType[SO] val style: RequestType RequestType[SO] val track: RequestType RequestType[SO] val video: RequestType +ResizeObserver[JC] def disconnect(): Unit +ResizeObserver[JC] def observe(target: Node, options: js.UndefOr[ResizeObserverOptions]?): Unit +ResizeObserver[JC] def unobserve(target: Node): Unit +ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] +ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] +ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly +ResizeObserverEntry[JT] def target: Node +ResizeObserverOptions[JT] var box: js.UndefOr[String] +ResizeObserverOptions[SO] def apply(box: Option[String] = None): ResizeObserverOptions +ResizeObserverSize[JT] def blockSize: Double +ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] Response[JC] def blob(): js.Promise[Blob] Response[JC] val body: ReadableStream[Uint8Array] From d84ef7daf5309a96a02a16acccff9db74639277e Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Thu, 14 Apr 2022 11:10:40 -0500 Subject: [PATCH 03/10] Extend DomRect with DomRectReadOnly --- api-reports/2_12.txt | 18 ++++++++++++------ api-reports/2_13.txt | 18 ++++++++++++------ .../main/scala/org/scalajs/dom/DOMRect.scala | 16 +++++++++------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index e9a6b916e..7b3ce5b9d 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -1237,12 +1237,18 @@ DOMList[SO] def iterator: Iterator[T] DOMList[SO] def length: Int DOMList[SO] def next(): T DOMParser[JC] def parseFromString(string: String, mimeType: MIMEType): Document -DOMRect[JC] var bottom: Double -DOMRect[JC] var height: Double -DOMRect[JC] var left: Double -DOMRect[JC] var right: Double -DOMRect[JC] var top: Double -DOMRect[JC] var width: Double +DOMRect[JC] def bottom: Double +DOMRect[JC] def height: Double +DOMRect[JC] def height_ = (height: Double): Unit +DOMRect[JC] def left: Double +DOMRect[JC] def right: Double +DOMRect[JC] def top: Double +DOMRect[JC] def width: Double +DOMRect[JC] def width_ = (width: Double): Unit +DOMRect[JC] def x: Double +DOMRect[JC] def x_ = (x: Double): Unit +DOMRect[JC] def y: Double +DOMRect[JC] def y_ = (y: Double): Unit DOMRectList[JC] @JSBracketAccess def apply(index: Int): T DOMRectList[JC] def length: Int DOMRectReadOnly[JT] def bottom: Double diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index e9a6b916e..7b3ce5b9d 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -1237,12 +1237,18 @@ DOMList[SO] def iterator: Iterator[T] DOMList[SO] def length: Int DOMList[SO] def next(): T DOMParser[JC] def parseFromString(string: String, mimeType: MIMEType): Document -DOMRect[JC] var bottom: Double -DOMRect[JC] var height: Double -DOMRect[JC] var left: Double -DOMRect[JC] var right: Double -DOMRect[JC] var top: Double -DOMRect[JC] var width: Double +DOMRect[JC] def bottom: Double +DOMRect[JC] def height: Double +DOMRect[JC] def height_ = (height: Double): Unit +DOMRect[JC] def left: Double +DOMRect[JC] def right: Double +DOMRect[JC] def top: Double +DOMRect[JC] def width: Double +DOMRect[JC] def width_ = (width: Double): Unit +DOMRect[JC] def x: Double +DOMRect[JC] def x_ = (x: Double): Unit +DOMRect[JC] def y: Double +DOMRect[JC] def y_ = (y: Double): Unit DOMRectList[JC] @JSBracketAccess def apply(index: Int): T DOMRectList[JC] def length: Int DOMRectReadOnly[JT] def bottom: Double diff --git a/dom/src/main/scala/org/scalajs/dom/DOMRect.scala b/dom/src/main/scala/org/scalajs/dom/DOMRect.scala index 3ad89901d..a8a3a6be3 100644 --- a/dom/src/main/scala/org/scalajs/dom/DOMRect.scala +++ b/dom/src/main/scala/org/scalajs/dom/DOMRect.scala @@ -9,13 +9,15 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ +/** A DOMRect describes the size and position of a rectangle. + * + * MDN + */ @js.native @JSGlobal -class DOMRect extends js.Object { - var left: Double = js.native - var width: Double = js.native - var right: Double = js.native - var top: Double = js.native - var bottom: Double = js.native - var height: Double = js.native +class DOMRect extends DOMRectReadOnly { + def width_=(width: Double): Unit = js.native + def height_=(height: Double): Unit = js.native + def x_=(x: Double): Unit = js.native + def y_=(y: Double): Unit = js.native } From ac754a5c099818c87da40d36d44ef5cacca5bf0d Mon Sep 17 00:00:00 2001 From: Chris Shafer Date: Thu, 14 Apr 2022 11:11:32 -0500 Subject: [PATCH 04/10] Apply suggestions from code review Co-authored-by: Arman Bilge --- dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala | 2 +- dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala index c65523a35..71c8ab1cd 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala @@ -14,7 +14,7 @@ trait ResizeObserverEntry extends js.Object { * * MDN */ - def target: Node = js.native + def target: Element = js.native /** An array containing objects with the new border box size of the observed element. The array is necessary to * support elements that have multiple fragments, which occur in multi-column scenarios. diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala index e9b86110c..e0c2e5319 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala @@ -2,9 +2,8 @@ package org.scalajs.dom import scala.scalajs.js -@js.native trait ResizeObserverOptions extends js.Object { - var box: js.UndefOr[String] = js.native + var box: js.UndefOr[String] = js.undefined } /** Factory for [[ResizeObserverOptions]] objects. */ From b865f653fd8c12535b117f1b83477fdffe8b8384 Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Thu, 14 Apr 2022 11:16:43 -0500 Subject: [PATCH 05/10] Remove MDN attributions and ResizeObserverOptions factory --- .../main/scala/org/scalajs/dom/DOMRect.scala | 5 +-- .../org/scalajs/dom/DOMRectReadOnly.scala | 40 ++++--------------- .../org/scalajs/dom/ResizeObserver.scala | 19 +++------ .../org/scalajs/dom/ResizeObserverEntry.scala | 13 +----- .../scalajs/dom/ResizeObserverOptions.scala | 13 ------ .../org/scalajs/dom/ResizeObserverSize.scala | 4 -- 6 files changed, 15 insertions(+), 79 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/DOMRect.scala b/dom/src/main/scala/org/scalajs/dom/DOMRect.scala index a8a3a6be3..5d36618f2 100644 --- a/dom/src/main/scala/org/scalajs/dom/DOMRect.scala +++ b/dom/src/main/scala/org/scalajs/dom/DOMRect.scala @@ -9,10 +9,7 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ -/** A DOMRect describes the size and position of a rectangle. - * - * MDN - */ +/** A DOMRect describes the size and position of a rectangle. */ @js.native @JSGlobal class DOMRect extends DOMRectReadOnly { diff --git a/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala b/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala index c6d05ccfd..7b099aef7 100644 --- a/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala +++ b/dom/src/main/scala/org/scalajs/dom/DOMRectReadOnly.scala @@ -5,51 +5,27 @@ import scala.scalajs.js @js.native trait DOMRectReadOnly extends js.Object { - /** The x coordinate of the DOMRect's origin. - * - * MDN - */ + /** The x coordinate of the DOMRect's origin. */ def x: Double = js.native - /** The y coordinate of the DOMRect's origin. - * - * MDN - */ + /** The y coordinate of the DOMRect's origin. */ def y: Double = js.native - /** The width of the DOMRect. - * - * MDN - */ + /** The width of the DOMRect. */ def width: Double = js.native - /** The height of the DOMRect. - * - * MDN - */ + /** The height of the DOMRect. */ def height: Double = js.native - /** Returns the top coordinate value of the DOMRect (usually the same as y.) - * - * MDN - */ + /** Returns the top coordinate value of the DOMRect (usually the same as y.) */ def top: Double = js.native - /** Returns the right coordinate value of the DOMRect (usually the same as x + width). - * - * MDN - */ + /** Returns the right coordinate value of the DOMRect (usually the same as x + width). */ def right: Double = js.native - /** Returns the bottom coordinate value of the DOMRect (usually the same as y + height) - * - * MDN - */ + /** Returns the bottom coordinate value of the DOMRect (usually the same as y + height) */ def bottom: Double = js.native - /** Returns the left coordinate value of the DOMRect (usually the same as x) - * - * MDN - */ + /** Returns the left coordinate value of the DOMRect (usually the same as x) */ def left: Double = js.native } diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala index ee692f68b..e4e7b7165 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala @@ -4,30 +4,21 @@ import scala.scalajs.js import scala.scalajs.js.annotation.JSGlobal /** The ResizeObserver constructor creates a new ResizeObserver object, which can be used to report changes to the - * content or border box of an Element or the bounding box of an SVGElement - MDN + * content or border box of an Element or the bounding box of an SVGElement * * @param callback - * The function called whenever an observed resize occurs. - MDN + * The function called whenever an observed resize occurs. */ @js.native @JSGlobal class ResizeObserver(callback: js.Function2[js.Array[ResizeObserverEntry], ResizeObserver, _]) extends js.Object { - /** Starts observing the specified Element or SVGElement. - * - * MDN - */ + /** Starts observing the specified Element or SVGElement. */ def observe(target: Node, options: js.UndefOr[ResizeObserverOptions] = js.native): Unit = js.native - /** Unobserves all observed Element or SVGElement targets. - * - * MDN - */ + /** Unobserves all observed Element or SVGElement targets. */ def disconnect(): Unit = js.native - /** Ends the observing of a specified Element or SVGElement. - * - * MDN - */ + /** Ends the observing of a specified Element or SVGElement. */ def unobserve(target: Node): Unit = js.native } diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala index c65523a35..2868c7422 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala @@ -4,29 +4,20 @@ import scala.scalajs.js /** The ResizeObserverEntry interface represents the object passedto the ResizeObserver() constructor's callback * function, which allows you to access the new dimensions of the Element or SVGElement being observed. - * - * MDN */ @js.native trait ResizeObserverEntry extends js.Object { - /** A reference to the Element or SVGElement being observed - * - * MDN - */ + /** A reference to the Element or SVGElement being observed */ def target: Node = js.native /** An array containing objects with the new border box size of the observed element. The array is necessary to * support elements that have multiple fragments, which occur in multi-column scenarios. - * - * MDN */ def borderBoxSize: js.Array[ResizeObserverSize] = js.native /** An array containing objects with the new content box size of the observed element. The array is necessary to * support elements that have multiple fragments, which occur in multi-column scenarios. - * - * MDN */ def contentBoxSize: js.Array[ResizeObserverSize] = js.native @@ -34,8 +25,6 @@ trait ResizeObserverEntry extends js.Object { * this is better supported than the above two properties, but it is left over from an earlier implementation of the * Resize Observer API, is still included in the spec for web compat reasons, and may be deprecated in future * versions. - * - * MDN */ def contentRect: DOMRectReadOnly = js.native } diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala index e9b86110c..f6a2be942 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala @@ -6,16 +6,3 @@ import scala.scalajs.js trait ResizeObserverOptions extends js.Object { var box: js.UndefOr[String] = js.native } - -/** Factory for [[ResizeObserverOptions]] objects. */ -object ResizeObserverOptions { - - /** Creates a new [[ResizeObserverOptions]] object with the given values. */ - def apply( - box: Option[String] = None - ): ResizeObserverOptions = { - val res = js.Dynamic.asInstanceOf[ResizeObserverOptions] - box.foreach(res.box = _) - res - } -} diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala index a23c1049b..14eedb79c 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverSize.scala @@ -8,16 +8,12 @@ trait ResizeObserverSize extends js.Object { /** The length of the observed element's border box in the block dimension. For boxes with a horizontal writing-mode, * this is the vertical dimension, or height; if the writing-mode is vertical, this is the horizontal dimension, or * width. - * - * MDN */ def blockSize: Double = js.native /** The length of the observed element's border box in the inline dimension. For boxes with a horizontal writing-mode, * this is the horizontal dimension, or width; if the writing-mode is vertical, this is the vertical dimension, or * height. - * - * MDN */ def inlineSize: Double = js.native } From 70ce65fb7e3258cbb0390fa9c6d23866331a5e23 Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Thu, 14 Apr 2022 11:28:08 -0500 Subject: [PATCH 06/10] Adding type facades for ResizeObserverBoxOption --- api-reports/2_12.txt | 7 +++++-- api-reports/2_13.txt | 7 +++++-- .../org/scalajs/dom/ResizeObserverBoxOption.scala | 13 +++++++++++++ .../org/scalajs/dom/ResizeObserverBoxOption.scala | 12 ++++++++++++ .../org/scalajs/dom/ResizeObserverOptions.scala | 2 +- 5 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 dom/src/main/scala-2/org/scalajs/dom/ResizeObserverBoxOption.scala create mode 100644 dom/src/main/scala-3/org/scalajs/dom/ResizeObserverBoxOption.scala diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 7b3ce5b9d..fb128960a 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15965,12 +15965,15 @@ RequestType[SO] val video: RequestType ResizeObserver[JC] def disconnect(): Unit ResizeObserver[JC] def observe(target: Node, options: js.UndefOr[ResizeObserverOptions]?): Unit ResizeObserver[JC] def unobserve(target: Node): Unit +ResizeObserverBoxOption[JT] +ResizeObserverBoxOption[SO] val `border-box`: ResizeObserverBoxOption +ResizeObserverBoxOption[SO] val `content-box`: ResizeObserverBoxOption +ResizeObserverBoxOption[SO] val `device-pixel-content-box`: ResizeObserverBoxOption ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly ResizeObserverEntry[JT] def target: Node -ResizeObserverOptions[JT] var box: js.UndefOr[String] -ResizeObserverOptions[SO] def apply(box: Option[String] = None): ResizeObserverOptions +ResizeObserverOptions[JT] var box: js.UndefOr[ResizeObserverBoxOption] ResizeObserverSize[JT] def blockSize: Double ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 7b3ce5b9d..fb128960a 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15965,12 +15965,15 @@ RequestType[SO] val video: RequestType ResizeObserver[JC] def disconnect(): Unit ResizeObserver[JC] def observe(target: Node, options: js.UndefOr[ResizeObserverOptions]?): Unit ResizeObserver[JC] def unobserve(target: Node): Unit +ResizeObserverBoxOption[JT] +ResizeObserverBoxOption[SO] val `border-box`: ResizeObserverBoxOption +ResizeObserverBoxOption[SO] val `content-box`: ResizeObserverBoxOption +ResizeObserverBoxOption[SO] val `device-pixel-content-box`: ResizeObserverBoxOption ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly ResizeObserverEntry[JT] def target: Node -ResizeObserverOptions[JT] var box: js.UndefOr[String] -ResizeObserverOptions[SO] def apply(box: Option[String] = None): ResizeObserverOptions +ResizeObserverOptions[JT] var box: js.UndefOr[ResizeObserverBoxOption] ResizeObserverSize[JT] def blockSize: Double ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] diff --git a/dom/src/main/scala-2/org/scalajs/dom/ResizeObserverBoxOption.scala b/dom/src/main/scala-2/org/scalajs/dom/ResizeObserverBoxOption.scala new file mode 100644 index 000000000..9e4e40894 --- /dev/null +++ b/dom/src/main/scala-2/org/scalajs/dom/ResizeObserverBoxOption.scala @@ -0,0 +1,13 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** ResizeObserverOptions [[https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe]] */ +@js.native +sealed trait ResizeObserverBoxOption extends js.Any + +object ResizeObserverBoxOption { + val `content-box`: ResizeObserverBoxOption = "content-box".asInstanceOf[ResizeObserverBoxOption] + val `border-box`: ResizeObserverBoxOption = "border-box".asInstanceOf[ResizeObserverBoxOption] + val `device-pixel-content-box`: ResizeObserverBoxOption = "device-pixel-content-box".asInstanceOf[ResizeObserverBoxOption] +} diff --git a/dom/src/main/scala-3/org/scalajs/dom/ResizeObserverBoxOption.scala b/dom/src/main/scala-3/org/scalajs/dom/ResizeObserverBoxOption.scala new file mode 100644 index 000000000..fd6cbcf2e --- /dev/null +++ b/dom/src/main/scala-3/org/scalajs/dom/ResizeObserverBoxOption.scala @@ -0,0 +1,12 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** ResizeObserverOptions [[https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe]] */ +opaque type ResizeObserverBoxOption <: String = String + +object ResizeObserverBoxOption { + val `content-box`: ResizeObserverBoxOption = "content-box" + val `border-box`: ResizeObserverBoxOption = "border-box" + val `device-pixel-content-box`: ResizeObserverBoxOption = "device-pixel-content-box" +} diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala index f6a2be942..8d4ec9cd2 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala @@ -4,5 +4,5 @@ import scala.scalajs.js @js.native trait ResizeObserverOptions extends js.Object { - var box: js.UndefOr[String] = js.native + var box: js.UndefOr[ResizeObserverBoxOption] = js.native } From 7aa2eb037180e68efe91003343b4d1f0fa8462c4 Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Thu, 14 Apr 2022 11:38:05 -0500 Subject: [PATCH 07/10] account for formatting --- api-reports/2_12.txt | 4 ++-- api-reports/2_13.txt | 4 ++-- dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index fb128960a..5d6837869 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15972,8 +15972,8 @@ ResizeObserverBoxOption[SO] val `device-pixel-content-box`: ResizeObserverBoxOpt ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly -ResizeObserverEntry[JT] def target: Node -ResizeObserverOptions[JT] var box: js.UndefOr[ResizeObserverBoxOption] +ResizeObserverEntry[JT] def target: Element +ResizeObserverOptions[JT] var box: js.UndefOr[String] ResizeObserverSize[JT] def blockSize: Double ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index fb128960a..5d6837869 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15972,8 +15972,8 @@ ResizeObserverBoxOption[SO] val `device-pixel-content-box`: ResizeObserverBoxOpt ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly -ResizeObserverEntry[JT] def target: Node -ResizeObserverOptions[JT] var box: js.UndefOr[ResizeObserverBoxOption] +ResizeObserverEntry[JT] def target: Element +ResizeObserverOptions[JT] var box: js.UndefOr[String] ResizeObserverSize[JT] def blockSize: Double ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala index a05b8d46a..da4ededdb 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverEntry.scala @@ -10,7 +10,7 @@ trait ResizeObserverEntry extends js.Object { /** A reference to the Element or SVGElement being observed */ def target: Element = js.native - + /** An array containing objects with the new border box size of the observed element. The array is necessary to * support elements that have multiple fragments, which occur in multi-column scenarios. */ From 837567ae534568a2cf1ff7942e64c7e4a58d3787 Mon Sep 17 00:00:00 2001 From: Chris Shafer Date: Thu, 14 Apr 2022 11:55:17 -0500 Subject: [PATCH 08/10] Apply suggestions from code review Co-authored-by: Arman Bilge --- dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala | 4 ++-- .../main/scala/org/scalajs/dom/ResizeObserverOptions.scala | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala index e4e7b7165..5af037fb9 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala @@ -14,11 +14,11 @@ import scala.scalajs.js.annotation.JSGlobal class ResizeObserver(callback: js.Function2[js.Array[ResizeObserverEntry], ResizeObserver, _]) extends js.Object { /** Starts observing the specified Element or SVGElement. */ - def observe(target: Node, options: js.UndefOr[ResizeObserverOptions] = js.native): Unit = js.native + def observe(target: Element, options: js.UndefOr[ResizeObserverOptions] = js.native): Unit = js.native /** Unobserves all observed Element or SVGElement targets. */ def disconnect(): Unit = js.native /** Ends the observing of a specified Element or SVGElement. */ - def unobserve(target: Node): Unit = js.native + def unobserve(target: Element): Unit = js.native } diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala index be5716c22..0f0f37ed8 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserverOptions.scala @@ -3,5 +3,5 @@ package org.scalajs.dom import scala.scalajs.js trait ResizeObserverOptions extends js.Object { - var box: js.UndefOr[String] = js.undefined + var box: js.UndefOr[ResizeObserverBoxOption] = js.undefined } From 6d45039cdb9ba9d41e4f1b7bbf2ab89edf94a440 Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Thu, 14 Apr 2022 11:57:49 -0500 Subject: [PATCH 09/10] Update API reports to reflect interface changes --- api-reports/2_12.txt | 6 +++--- api-reports/2_13.txt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 5d6837869..84796d763 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15963,8 +15963,8 @@ RequestType[SO] val style: RequestType RequestType[SO] val track: RequestType RequestType[SO] val video: RequestType ResizeObserver[JC] def disconnect(): Unit -ResizeObserver[JC] def observe(target: Node, options: js.UndefOr[ResizeObserverOptions]?): Unit -ResizeObserver[JC] def unobserve(target: Node): Unit +ResizeObserver[JC] def observe(target: Element, options: js.UndefOr[ResizeObserverOptions]?): Unit +ResizeObserver[JC] def unobserve(target: Element): Unit ResizeObserverBoxOption[JT] ResizeObserverBoxOption[SO] val `border-box`: ResizeObserverBoxOption ResizeObserverBoxOption[SO] val `content-box`: ResizeObserverBoxOption @@ -15973,7 +15973,7 @@ ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly ResizeObserverEntry[JT] def target: Element -ResizeObserverOptions[JT] var box: js.UndefOr[String] +ResizeObserverOptions[JT] var box: js.UndefOr[ResizeObserverBoxOption] ResizeObserverSize[JT] def blockSize: Double ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 5d6837869..84796d763 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15963,8 +15963,8 @@ RequestType[SO] val style: RequestType RequestType[SO] val track: RequestType RequestType[SO] val video: RequestType ResizeObserver[JC] def disconnect(): Unit -ResizeObserver[JC] def observe(target: Node, options: js.UndefOr[ResizeObserverOptions]?): Unit -ResizeObserver[JC] def unobserve(target: Node): Unit +ResizeObserver[JC] def observe(target: Element, options: js.UndefOr[ResizeObserverOptions]?): Unit +ResizeObserver[JC] def unobserve(target: Element): Unit ResizeObserverBoxOption[JT] ResizeObserverBoxOption[SO] val `border-box`: ResizeObserverBoxOption ResizeObserverBoxOption[SO] val `content-box`: ResizeObserverBoxOption @@ -15973,7 +15973,7 @@ ResizeObserverEntry[JT] def borderBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentBoxSize: js.Array[ResizeObserverSize] ResizeObserverEntry[JT] def contentRect: DOMRectReadOnly ResizeObserverEntry[JT] def target: Element -ResizeObserverOptions[JT] var box: js.UndefOr[String] +ResizeObserverOptions[JT] var box: js.UndefOr[ResizeObserverBoxOption] ResizeObserverSize[JT] def blockSize: Double ResizeObserverSize[JT] def inlineSize: Double Response[JC] def arrayBuffer(): js.Promise[ArrayBuffer] From a0b2346c4c738bc9cb57a5334900f855086e8479 Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Fri, 15 Apr 2022 12:11:22 -0500 Subject: [PATCH 10/10] Overload observer function instead of default, update api-reports --- api-reports/2_12.txt | 3 ++- api-reports/2_13.txt | 3 ++- dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 84796d763..05f683b6c 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15963,7 +15963,8 @@ RequestType[SO] val style: RequestType RequestType[SO] val track: RequestType RequestType[SO] val video: RequestType ResizeObserver[JC] def disconnect(): Unit -ResizeObserver[JC] def observe(target: Element, options: js.UndefOr[ResizeObserverOptions]?): Unit +ResizeObserver[JC] def observe(target: Element): Unit +ResizeObserver[JC] def observe(target: Element, options: ResizeObserverOptions): Unit ResizeObserver[JC] def unobserve(target: Element): Unit ResizeObserverBoxOption[JT] ResizeObserverBoxOption[SO] val `border-box`: ResizeObserverBoxOption diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 84796d763..05f683b6c 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15963,7 +15963,8 @@ RequestType[SO] val style: RequestType RequestType[SO] val track: RequestType RequestType[SO] val video: RequestType ResizeObserver[JC] def disconnect(): Unit -ResizeObserver[JC] def observe(target: Element, options: js.UndefOr[ResizeObserverOptions]?): Unit +ResizeObserver[JC] def observe(target: Element): Unit +ResizeObserver[JC] def observe(target: Element, options: ResizeObserverOptions): Unit ResizeObserver[JC] def unobserve(target: Element): Unit ResizeObserverBoxOption[JT] ResizeObserverBoxOption[SO] val `border-box`: ResizeObserverBoxOption diff --git a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala index 5af037fb9..b220a17c0 100644 --- a/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala +++ b/dom/src/main/scala/org/scalajs/dom/ResizeObserver.scala @@ -14,7 +14,8 @@ import scala.scalajs.js.annotation.JSGlobal class ResizeObserver(callback: js.Function2[js.Array[ResizeObserverEntry], ResizeObserver, _]) extends js.Object { /** Starts observing the specified Element or SVGElement. */ - def observe(target: Element, options: js.UndefOr[ResizeObserverOptions] = js.native): Unit = js.native + def observe(target: Element): Unit = js.native + def observe(target: Element, options: ResizeObserverOptions): Unit = js.native /** Unobserves all observed Element or SVGElement targets. */ def disconnect(): Unit = js.native