From 11e79f4e30356ed5940ed66bcf1050b2ee629795 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 2 Jan 2022 09:17:38 +0100 Subject: [PATCH 01/59] Update scalafmt-core to 3.3.1 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 943690a56..b4b06d903 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.3.0 +version = 3.3.1 runner.dialect = scala213source3 project.git = true style = Scala.js From ee9ee369b12776fc448da5aedfe42737b9344168 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Jan 2022 12:21:15 +0000 Subject: [PATCH 02/59] Bump JamesIves/github-pages-deploy-action from 4.1.8 to 4.1.9 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.1.8 to 4.1.9. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/4.1.8...4.1.9) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 61944a1aa..cb78e69ec 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@4.1.8 + uses: JamesIves/github-pages-deploy-action@4.1.9 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From d043233e4f463f2f14d1cdf6a93ac661c054a252 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jan 2022 12:19:26 +0000 Subject: [PATCH 03/59] Bump JamesIves/github-pages-deploy-action from 4.1.9 to 4.2.0 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.1.9 to 4.2.0. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/4.1.9...4.2.0) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index cb78e69ec..7219fbafb 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@4.1.9 + uses: JamesIves/github-pages-deploy-action@4.2.0 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From a3e1e60bc44e707f96b74ba4f8423e895acbbc6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jan 2022 12:19:55 +0000 Subject: [PATCH 04/59] Bump JamesIves/github-pages-deploy-action from 4.2.0 to 4.2.1 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.2.0 to 4.2.1. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/4.2.0...4.2.1) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 7219fbafb..c8c9055fd 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@4.2.0 + uses: JamesIves/github-pages-deploy-action@4.2.1 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From ac1d71f97b131c8a6fa75b153fcfcf8757a54857 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jan 2022 12:18:40 +0000 Subject: [PATCH 05/59] Bump JamesIves/github-pages-deploy-action from 4.2.1 to 4.2.2 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.2.1 to 4.2.2. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/4.2.1...v4.2.2) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index c8c9055fd..ee7b5fd66 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@4.2.1 + uses: JamesIves/github-pages-deploy-action@v4.2.2 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From 16d0c1d2fcb1610e4eecb47719c6201858107508 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 12 Jan 2022 01:39:21 +0100 Subject: [PATCH 06/59] Update sbt-scalafix, scalafix-core to 0.9.34 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 5ec36db84..2370d62c6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,7 +1,7 @@ libraryDependencies += "org.scala-js" %% "scalajs-env-jsdom-nodejs" % "1.1.0" libraryDependencies += "org.scala-js" %% "scalajs-env-selenium" % "1.1.1" -addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.33") +addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.34") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.10") addSbtPlugin("com.lihaoyi" % "scalatex-sbt-plugin" % "0.3.11") From 4a19984bca32b408b45bd068f520467fa7f13f2e Mon Sep 17 00:00:00 2001 From: Alexis Hernandez Date: Wed, 12 Jan 2022 13:00:03 -0700 Subject: [PATCH 07/59] Showcase that the crypto api is broken --- .../dom/tests/chrome/CryptoTests.scala | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala diff --git a/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala b/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala new file mode 100644 index 000000000..91d011079 --- /dev/null +++ b/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala @@ -0,0 +1,21 @@ +package org.scalajs.dom.tests.chrome + +import org.junit.Test + +class CryptoTests { + import org.scalajs.dom + import scala.scalajs.js.typedarray._ + + @Test final def cryptoGetRandomValuesWork(): Unit = { + // This fails + dom.crypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) + } + + @Test final def webcryptoGetRandomValuesWork(): Unit = { + dom.webcrypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) + } + + @Test final def cryptoCryptoGetRandomValuesWork(): Unit = { + dom.crypto.crypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) + } +} From df03142ef85011d10981d937f3c78ce6ef71d1cb Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 12 Jan 2022 22:42:15 +0000 Subject: [PATCH 08/59] Move crypto test to BrowserTests --- .../dom/tests/chrome/CryptoTests.scala | 21 ------------------- .../dom/tests/shared/BrowserTests.scala | 6 ++++++ 2 files changed, 6 insertions(+), 21 deletions(-) delete mode 100644 tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala diff --git a/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala b/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala deleted file mode 100644 index 91d011079..000000000 --- a/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala +++ /dev/null @@ -1,21 +0,0 @@ -package org.scalajs.dom.tests.chrome - -import org.junit.Test - -class CryptoTests { - import org.scalajs.dom - import scala.scalajs.js.typedarray._ - - @Test final def cryptoGetRandomValuesWork(): Unit = { - // This fails - dom.crypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) - } - - @Test final def webcryptoGetRandomValuesWork(): Unit = { - dom.webcrypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) - } - - @Test final def cryptoCryptoGetRandomValuesWork(): Unit = { - dom.crypto.crypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) - } -} diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index 10d8c26a8..28d037267 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -2,6 +2,7 @@ package org.scalajs.dom.tests.shared import org.junit.Assert.assertEquals import org.junit.Test +import org.scalajs.dom import org.scalajs.dom.QueuingStrategy import org.scalajs.dom.ReadableStream import org.scalajs.dom.ReadableStreamController @@ -15,10 +16,15 @@ import scala.concurrent.Future import scala.concurrent.Promise import scala.scalajs.js import scala.scalajs.js.Thenable.Implicits._ +import scala.scalajs.js.typedarray._ import scala.util.Try trait BrowserTests { + // https://github.com/scala-js/scala-js-dom/issues/668 + @Test final def cryptoGetRandomValues(): Unit = + dom.crypto.getRandomValues(new Uint8Array(1)) + def read[T](reader: ReadableStreamReader[T])(values: Seq[T]): Future[Seq[T]] = { reader .read() From d1335210713bd2421453ab175d32335a3fdff62e Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 12 Jan 2022 23:00:52 +0000 Subject: [PATCH 09/59] Fix dom.crypto.getRandomValues --- api-reports/2_12.txt | 2 +- api-reports/2_13.txt | 2 +- dom/src/main/scala/org/scalajs/dom/crypto/package.scala | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 88725ae45..4a065f9df 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -25514,7 +25514,7 @@ crypto/package[SO] @deprecated("use dom.RsaKeyGenParams instead", "2.0.0") val R crypto/package[SO] @deprecated("use dom.RsaOaepParams instead", "2.0.0") val RsaOaepParams = dom.RsaOaepParams crypto/package[SO] @deprecated("use dom.RsaPssParams instead", "2.0.0") val RsaPssParams = dom.RsaPssParams crypto/package[SO] def crypto: Crypto (@deprecated in 2.0.0) -crypto/package[SO] @JSGlobal("crypto.getRandomValues") @js.native def getRandomValues(array: ArrayBufferView): ArrayBufferView +crypto/package[SO] def getRandomValues(array: ArrayBufferView): ArrayBufferView crypto/package[SO] @JSGlobal("crypto.subtle") @js.native val subtle: dom.SubtleCrypto experimental/Fullscreen[SO] (@deprecated in 2.0.0) experimental/PointerLock[SO] type PointerLockDocument = dom.Document (@deprecated in 2.0.0) diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 88725ae45..4a065f9df 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -25514,7 +25514,7 @@ crypto/package[SO] @deprecated("use dom.RsaKeyGenParams instead", "2.0.0") val R crypto/package[SO] @deprecated("use dom.RsaOaepParams instead", "2.0.0") val RsaOaepParams = dom.RsaOaepParams crypto/package[SO] @deprecated("use dom.RsaPssParams instead", "2.0.0") val RsaPssParams = dom.RsaPssParams crypto/package[SO] def crypto: Crypto (@deprecated in 2.0.0) -crypto/package[SO] @JSGlobal("crypto.getRandomValues") @js.native def getRandomValues(array: ArrayBufferView): ArrayBufferView +crypto/package[SO] def getRandomValues(array: ArrayBufferView): ArrayBufferView crypto/package[SO] @JSGlobal("crypto.subtle") @js.native val subtle: dom.SubtleCrypto experimental/Fullscreen[SO] (@deprecated in 2.0.0) experimental/PointerLock[SO] type PointerLockDocument = dom.Document (@deprecated in 2.0.0) diff --git a/dom/src/main/scala/org/scalajs/dom/crypto/package.scala b/dom/src/main/scala/org/scalajs/dom/crypto/package.scala index 9b2d3dbd0..6c61a8c45 100644 --- a/dom/src/main/scala/org/scalajs/dom/crypto/package.scala +++ b/dom/src/main/scala/org/scalajs/dom/crypto/package.scala @@ -15,9 +15,8 @@ package object crypto { val subtle: dom.SubtleCrypto = js.native /** Fills the passed TypedArray with cryptographically sound random values. */ - @JSGlobal("crypto.getRandomValues") - @js.native - def getRandomValues(array: ArrayBufferView): ArrayBufferView = js.native + @inline def getRandomValues(array: ArrayBufferView): ArrayBufferView = + webcrypto.getRandomValues(array) @deprecated("use dom.crypto instead", "2.0.0") @inline def crypto: Crypto = GlobalCrypto.crypto From f5b46f0ebe4dc616da02010f05a4d4480109af6c Mon Sep 17 00:00:00 2001 From: Alexis Hernandez Date: Thu, 13 Jan 2022 09:34:48 -0700 Subject: [PATCH 10/59] Add WebCryptoApiTests --- .../dom/tests/chrome/CryptoTests.scala | 21 --- .../dom/tests/shared/SharedTests.scala | 2 +- .../dom/tests/shared/WebCryptoApiTests.scala | 122 ++++++++++++++++++ 3 files changed, 123 insertions(+), 22 deletions(-) delete mode 100644 tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala create mode 100644 tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala diff --git a/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala b/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala deleted file mode 100644 index 91d011079..000000000 --- a/tests-chrome/src/test/scala/org/scalajs/dom/tests/chrome/CryptoTests.scala +++ /dev/null @@ -1,21 +0,0 @@ -package org.scalajs.dom.tests.chrome - -import org.junit.Test - -class CryptoTests { - import org.scalajs.dom - import scala.scalajs.js.typedarray._ - - @Test final def cryptoGetRandomValuesWork(): Unit = { - // This fails - dom.crypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) - } - - @Test final def webcryptoGetRandomValuesWork(): Unit = { - dom.webcrypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) - } - - @Test final def cryptoCryptoGetRandomValuesWork(): Unit = { - dom.crypto.crypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) - } -} diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala index 3a02babea..59843ebd0 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala @@ -3,7 +3,7 @@ package org.scalajs.dom.tests.shared import org.scalajs.dom.tests.shared.AsyncTesting._ import org.junit.Test -trait SharedTests { +trait SharedTests extends WebCryptoApiTests { // =================================================================================================================== // Tests WITHOUT org.scalajs.dom._ in scope diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala new file mode 100644 index 000000000..a53b13dda --- /dev/null +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala @@ -0,0 +1,122 @@ +package org.scalajs.dom.tests.shared + +import org.junit.Assert._ +import org.junit.Test +import org.scalajs.dom +import org.scalajs.dom.tests.shared.AsyncTesting._ + +import scala.scalajs.js +import scala.scalajs.js.typedarray._ + +trait WebCryptoApiTests { + + @Test final def getRandomValuesWork: Unit = { + dom.webcrypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) + } + + @Test final def generateAESEncryptionKeyWorks: AsyncResult = async { + generateAESEncryptionKey() + } + + @Test final def aesEncryptionDecryptionTest: AsyncResult = async { + val data = "data" + for { + key <- generateAESEncryptionKey() + iv = generateAESInitializationVector() + encrypted <- aesEncrypt(key, iv, data) + decrypted <- aesDecrypt(key, iv, encrypted) + } yield assertEquals(data, decrypted) + } + + @Test final def aesKeyDerivationWorks: AsyncResult = async { + val derivationAlgorithm = "PBKDF2" + val pbdkf2 = new dom.Pbkdf2Params { + val name = derivationAlgorithm + val salt = "salt".getBytes.toTypedArray.buffer + val iterations = 100.toDouble + val hash = "SHA-512" + } + val aesCtr = new dom.AesDerivedKeyParams { + val name = "AES-GCM" + val length = 256 + } + + for { + pbkdf2Key <- dom.crypto.subtle + .importKey( + dom.KeyFormat.raw, + "password".getBytes.toTypedArray.buffer, + derivationAlgorithm, + false, + js.Array(dom.KeyUsage.deriveKey, dom.KeyUsage.deriveBits) + ) + .toFuture + + aesKey <- dom.crypto.subtle + .deriveKey( + pbdkf2, + pbkdf2Key, + aesCtr, + true, + js.Array(dom.KeyUsage.encrypt, dom.KeyUsage.decrypt) + ) + .toFuture + .map(_.asInstanceOf[dom.CryptoKey]) + } yield assertNotNull(aesKey) + } + + private def generateAESEncryptionKey() = { + dom.crypto.subtle + .generateKey( + new dom.AesKeyAlgorithm { + val name = "AES-GCM" + val length = 256 + }, + true, + js.Array(dom.KeyUsage.encrypt, dom.KeyUsage.decrypt) + ) + .toFuture + .map(_.asInstanceOf[dom.CryptoKey]) + } + + private def generateAESInitializationVector() = { + dom.webcrypto.getRandomValues(Array.ofDim[Byte](12).toTypedArray) + } + + private def aesEncrypt(key: dom.CryptoKey, iv0: dom.BufferSource, data: String) = { + dom.crypto.subtle + .encrypt( + new dom.AesGcmParams { + val name = "AES-GCM" + val iv = iv0 + val tagLength = 128 + val additionalData = "".getBytes.toTypedArray.buffer + }, + key, + data.getBytes().toTypedArray + ) + .toFuture + .map(_.asInstanceOf[ArrayBuffer]) + } + + private def aesDecrypt(key: dom.CryptoKey, iv0: dom.BufferSource, encrypted: dom.BufferSource) = { + dom.crypto.subtle + .decrypt( + new dom.AesGcmParams { + val name = "AES-GCM" + val iv = iv0 + val tagLength = 128 + val additionalData = "".getBytes.toTypedArray.buffer + }, + key, + encrypted + ) + .toFuture + .map(_.asInstanceOf[ArrayBuffer]) + .map { buffer => + val arr = Array.ofDim[Byte](buffer.byteLength) + TypedArrayBuffer.wrap(buffer).get(arr) + new String(arr, "UTF-8") + } + } +} From 64a26639abb74fb1648c6db6450605668d896bb8 Mon Sep 17 00:00:00 2001 From: Alexis Hernandez Date: Thu, 13 Jan 2022 09:57:09 -0700 Subject: [PATCH 11/59] Fix tests --- .../org/scalajs/dom/tests/shared/BrowserTests.scala | 2 +- .../org/scalajs/dom/tests/shared/SharedTests.scala | 2 +- .../scalajs/dom/tests/shared/WebCryptoApiTests.scala | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index 10d8c26a8..c0e55b4ad 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -17,7 +17,7 @@ import scala.scalajs.js import scala.scalajs.js.Thenable.Implicits._ import scala.util.Try -trait BrowserTests { +trait BrowserTests extends WebCryptoApiTests { def read[T](reader: ReadableStreamReader[T])(values: Seq[T]): Future[Seq[T]] = { reader diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala index 59843ebd0..3a02babea 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/SharedTests.scala @@ -3,7 +3,7 @@ package org.scalajs.dom.tests.shared import org.scalajs.dom.tests.shared.AsyncTesting._ import org.junit.Test -trait SharedTests extends WebCryptoApiTests { +trait SharedTests { // =================================================================================================================== // Tests WITHOUT org.scalajs.dom._ in scope diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala index a53b13dda..17b0c8725 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala @@ -29,12 +29,14 @@ trait WebCryptoApiTests { } @Test final def aesKeyDerivationWorks: AsyncResult = async { + import scalajs.js.|._ + val derivationAlgorithm = "PBKDF2" val pbdkf2 = new dom.Pbkdf2Params { val name = derivationAlgorithm - val salt = "salt".getBytes.toTypedArray.buffer + val salt: dom.BufferSource = "salt".getBytes.toTypedArray.buffer val iterations = 100.toDouble - val hash = "SHA-512" + val hash: dom.HashAlgorithmIdentifier = dom.HashAlgorithm.`SHA-512` } val aesCtr = new dom.AesDerivedKeyParams { val name = "AES-GCM" @@ -90,7 +92,7 @@ trait WebCryptoApiTests { val name = "AES-GCM" val iv = iv0 val tagLength = 128 - val additionalData = "".getBytes.toTypedArray.buffer + val additionalData: dom.BufferSource = "".getBytes.toTypedArray.buffer }, key, data.getBytes().toTypedArray @@ -106,7 +108,7 @@ trait WebCryptoApiTests { val name = "AES-GCM" val iv = iv0 val tagLength = 128 - val additionalData = "".getBytes.toTypedArray.buffer + val additionalData: dom.BufferSource = "".getBytes.toTypedArray.buffer }, key, encrypted From c268215a98808576bd9338b4d069891718edc919 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 19 Jan 2022 18:28:01 +0000 Subject: [PATCH 12/59] Tap dance for bincompat --- api-reports/2_12.txt | 2 +- api-reports/2_13.txt | 2 +- dom/src/main/scala/org/scalajs/dom/crypto/package.scala | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 4a065f9df..7fd0c3c34 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -25514,7 +25514,7 @@ crypto/package[SO] @deprecated("use dom.RsaKeyGenParams instead", "2.0.0") val R crypto/package[SO] @deprecated("use dom.RsaOaepParams instead", "2.0.0") val RsaOaepParams = dom.RsaOaepParams crypto/package[SO] @deprecated("use dom.RsaPssParams instead", "2.0.0") val RsaPssParams = dom.RsaPssParams crypto/package[SO] def crypto: Crypto (@deprecated in 2.0.0) -crypto/package[SO] def getRandomValues(array: ArrayBufferView): ArrayBufferView +crypto/package[SO] def getRandomValues(array: ArrayBufferView)(implicit dummy: DummyImplicit): ArrayBufferView crypto/package[SO] @JSGlobal("crypto.subtle") @js.native val subtle: dom.SubtleCrypto experimental/Fullscreen[SO] (@deprecated in 2.0.0) experimental/PointerLock[SO] type PointerLockDocument = dom.Document (@deprecated in 2.0.0) diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 4a065f9df..7fd0c3c34 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -25514,7 +25514,7 @@ crypto/package[SO] @deprecated("use dom.RsaKeyGenParams instead", "2.0.0") val R crypto/package[SO] @deprecated("use dom.RsaOaepParams instead", "2.0.0") val RsaOaepParams = dom.RsaOaepParams crypto/package[SO] @deprecated("use dom.RsaPssParams instead", "2.0.0") val RsaPssParams = dom.RsaPssParams crypto/package[SO] def crypto: Crypto (@deprecated in 2.0.0) -crypto/package[SO] def getRandomValues(array: ArrayBufferView): ArrayBufferView +crypto/package[SO] def getRandomValues(array: ArrayBufferView)(implicit dummy: DummyImplicit): ArrayBufferView crypto/package[SO] @JSGlobal("crypto.subtle") @js.native val subtle: dom.SubtleCrypto experimental/Fullscreen[SO] (@deprecated in 2.0.0) experimental/PointerLock[SO] type PointerLockDocument = dom.Document (@deprecated in 2.0.0) diff --git a/dom/src/main/scala/org/scalajs/dom/crypto/package.scala b/dom/src/main/scala/org/scalajs/dom/crypto/package.scala index 6c61a8c45..735b07f2f 100644 --- a/dom/src/main/scala/org/scalajs/dom/crypto/package.scala +++ b/dom/src/main/scala/org/scalajs/dom/crypto/package.scala @@ -14,8 +14,13 @@ package object crypto { @js.native val subtle: dom.SubtleCrypto = js.native + // for binary compat; unusable + @JSGlobal("crypto.getRandomValues") + @js.native + protected[crypto] def getRandomValues(array: ArrayBufferView): ArrayBufferView = js.native + /** Fills the passed TypedArray with cryptographically sound random values. */ - @inline def getRandomValues(array: ArrayBufferView): ArrayBufferView = + @inline def getRandomValues(array: ArrayBufferView)(implicit dummy: DummyImplicit): ArrayBufferView = webcrypto.getRandomValues(array) @deprecated("use dom.crypto instead", "2.0.0") From 390faff6fd03f80043d4566361680a25d4bf0a4b Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 19 Jan 2022 18:31:41 +0000 Subject: [PATCH 13/59] Relocate test --- .../scala/org/scalajs/dom/tests/shared/BrowserTests.scala | 4 ---- .../org/scalajs/dom/tests/shared/WebCryptoApiTests.scala | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index aae3838be..e1085d9c8 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -21,10 +21,6 @@ import scala.util.Try trait BrowserTests extends WebCryptoApiTests { - // https://github.com/scala-js/scala-js-dom/issues/668 - @Test final def cryptoGetRandomValues(): Unit = - dom.crypto.getRandomValues(new Uint8Array(1)) - def read[T](reader: ReadableStreamReader[T])(values: Seq[T]): Future[Seq[T]] = { reader .read() diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala index 17b0c8725..2d28f7535 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/WebCryptoApiTests.scala @@ -10,6 +10,10 @@ import scala.scalajs.js.typedarray._ trait WebCryptoApiTests { + // https://github.com/scala-js/scala-js-dom/issues/668 + @Test final def cryptoGetRandomValues(): Unit = + dom.crypto.getRandomValues(new Uint8Array(1)) + @Test final def getRandomValuesWork: Unit = { dom.webcrypto.getRandomValues(Array.ofDim[Byte](8).toTypedArray) } From e836956818912ba6554261a750468e75e4be053d Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 19 Jan 2022 18:38:41 +0000 Subject: [PATCH 14/59] Remove unused import --- .../main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index e1085d9c8..5eca6b29a 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -16,7 +16,6 @@ import scala.concurrent.Future import scala.concurrent.Promise import scala.scalajs.js import scala.scalajs.js.Thenable.Implicits._ -import scala.scalajs.js.typedarray._ import scala.util.Try trait BrowserTests extends WebCryptoApiTests { From 4cc7429dd594fe178eadc11a067c0103465fc457 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 19 Jan 2022 18:46:00 +0000 Subject: [PATCH 15/59] Another unused import --- .../main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index 5eca6b29a..c0e55b4ad 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -2,7 +2,6 @@ package org.scalajs.dom.tests.shared import org.junit.Assert.assertEquals import org.junit.Test -import org.scalajs.dom import org.scalajs.dom.QueuingStrategy import org.scalajs.dom.ReadableStream import org.scalajs.dom.ReadableStreamController From 85832d7634e86ed33511cfab04315c8dc39fe510 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 20 Jan 2022 06:42:27 +0100 Subject: [PATCH 16/59] Update scalafmt-core to 3.3.2 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index b4b06d903..11368dc83 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.3.1 +version = 3.3.2 runner.dialect = scala213source3 project.git = true style = Scala.js From c9814a864bb5b69dc8061c53c9c54c51613271f8 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 22 Jan 2022 21:26:18 +0100 Subject: [PATCH 17/59] Update scalafmt-core to 3.3.3 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 11368dc83..b884a11b8 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.3.2 +version = 3.3.3 runner.dialect = scala213source3 project.git = true style = Scala.js From 308d5c2e1158b643b91fba314703da645067f2b3 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 29 Jan 2022 17:49:46 +0100 Subject: [PATCH 18/59] Update scalafmt-core to 3.4.0 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index b884a11b8..42dab251e 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.3.3 +version = 3.4.0 runner.dialect = scala213source3 project.git = true style = Scala.js From a6cc8578f2f2230872f6ee5c4df18f25b7b10c6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 12:16:12 +0000 Subject: [PATCH 19/59] Bump JamesIves/github-pages-deploy-action from 4.2.2 to 4.2.3 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.2.2 to 4.2.3. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/v4.2.2...v4.2.3) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index ee7b5fd66..257c7147b 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.2.2 + uses: JamesIves/github-pages-deploy-action@v4.2.3 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From 56a24d42617fbf05baa29d3e7cf93c345d7ab5f1 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Tue, 1 Feb 2022 19:10:32 +0100 Subject: [PATCH 20/59] Update sbt to 1.6.2 --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 3161d2146..c8fcab543 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.6.1 +sbt.version=1.6.2 From 6a7ccdb2f6ff87c3e589f00a4e41dea77600b1f3 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 6 Feb 2022 17:43:10 +0100 Subject: [PATCH 21/59] Update scalafmt-core to 3.4.2 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 42dab251e..40588b06e 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.4.0 +version = 3.4.2 runner.dialect = scala213source3 project.git = true style = Scala.js From 452d3ea04c64bd7388f31afe9ff93eb023786135 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Feb 2022 12:20:23 +0000 Subject: [PATCH 22/59] Bump japgolly/setup-everything-scala from 3.0 to 3.1 Bumps [japgolly/setup-everything-scala](https://github.com/japgolly/setup-everything-scala) from 3.0 to 3.1. - [Release notes](https://github.com/japgolly/setup-everything-scala/releases) - [Commits](https://github.com/japgolly/setup-everything-scala/compare/v3.0...v3.1) --- updated-dependencies: - dependency-name: japgolly/setup-everything-scala dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- .github/workflows/ghpages.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a39b9c8b..e5585d2ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v2 - name: Setup Scala - uses: japgolly/setup-everything-scala@v3.0 + uses: japgolly/setup-everything-scala@v3.1 - name: Build and test run: sbt -DCI=1 "++${{ matrix.scalaversion }}" test package doc @@ -35,6 +35,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: japgolly/setup-everything-scala@v3.0 + - uses: japgolly/setup-everything-scala@v3.1 - name: Readme generation run: sbt readme/run diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 257c7147b..a3e920e4f 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v2 - name: Setup Scala - uses: japgolly/setup-everything-scala@v3.0 + uses: japgolly/setup-everything-scala@v3.1 - name: Build run: sbt readme/run diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d88788b4d..f3340628b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: fetch-depth: 0 - name: Setup Scala - uses: japgolly/setup-everything-scala@v3.0 + uses: japgolly/setup-everything-scala@v3.1 - name: Release run: sbt ci-release From 5fabe21b10f27f5191a8a71519b1a14e0f4467c5 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 12 Feb 2022 14:34:36 +0100 Subject: [PATCH 23/59] Update scalafmt-core to 3.4.3 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 40588b06e..ce81dfa18 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.4.2 +version = 3.4.3 runner.dialect = scala213source3 project.git = true style = Scala.js From fe15035e0202da9cf6a20451dde53ae0038b06d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Feb 2022 12:17:42 +0000 Subject: [PATCH 24/59] Bump JamesIves/github-pages-deploy-action from 4.2.3 to 4.2.5 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.2.3 to 4.2.5. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/v4.2.3...v4.2.5) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index a3e920e4f..91e9e546a 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.2.3 + uses: JamesIves/github-pages-deploy-action@v4.2.5 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From 08b5114f083e6167b1d5fc7000951e4fc79e9336 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 17 Feb 2022 23:04:48 +0100 Subject: [PATCH 25/59] Update sbt-buildinfo to 0.11.0 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 2370d62c6..fef2d80d1 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,7 +2,7 @@ libraryDependencies += "org.scala-js" %% "scalajs-env-jsdom-nodejs" % "1.1.0" libraryDependencies += "org.scala-js" %% "scalajs-env-selenium" % "1.1.1" addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.34") -addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") +addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.10") addSbtPlugin("com.lihaoyi" % "scalatex-sbt-plugin" % "0.3.11") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.5.1") From ba20e639dac9343c90c371f99d483a7ef6b05878 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Mar 2022 12:19:53 +0000 Subject: [PATCH 26/59] Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- .github/workflows/ghpages.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5585d2ac..ab24612de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: scalaversion: ["2.11.12", "2.12.14", "2.13.6", "3.0.2"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Scala uses: japgolly/setup-everything-scala@v3.1 @@ -34,7 +34,7 @@ jobs: readme: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: japgolly/setup-everything-scala@v3.1 - name: Readme generation run: sbt readme/run diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 91e9e546a..8206a4184 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -10,7 +10,7 @@ jobs: build-and-deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Scala uses: japgolly/setup-everything-scala@v3.1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f3340628b..3717059d9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 From 2efca6b60e957992b70d64bb625f788b7710239f Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 17 Mar 2022 18:27:37 +0000 Subject: [PATCH 27/59] Add `EventListenerOptions#signal` --- api-reports/2_12.txt | 1 + api-reports/2_13.txt | 1 + .../main/scala/org/scalajs/dom/EventListenerOptions.scala | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 7fd0c3c34..9be38550d 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -1822,6 +1822,7 @@ EventInit[JT] var scoped: js.UndefOr[Boolean] EventListenerOptions[JT] var capture: js.UndefOr[Boolean] EventListenerOptions[JT] var once: js.UndefOr[Boolean] EventListenerOptions[JT] var passive: js.UndefOr[Boolean] +EventListenerOptions[JT] var signal: js.UndefOr[AbortSignal] EventSource[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit EventSource[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit EventSource[JC] def close(): Unit diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 7fd0c3c34..9be38550d 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -1822,6 +1822,7 @@ EventInit[JT] var scoped: js.UndefOr[Boolean] EventListenerOptions[JT] var capture: js.UndefOr[Boolean] EventListenerOptions[JT] var once: js.UndefOr[Boolean] EventListenerOptions[JT] var passive: js.UndefOr[Boolean] +EventListenerOptions[JT] var signal: js.UndefOr[AbortSignal] EventSource[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit EventSource[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit EventSource[JC] def close(): Unit diff --git a/dom/src/main/scala/org/scalajs/dom/EventListenerOptions.scala b/dom/src/main/scala/org/scalajs/dom/EventListenerOptions.scala index c635eaee0..1552553b5 100644 --- a/dom/src/main/scala/org/scalajs/dom/EventListenerOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/EventListenerOptions.scala @@ -26,4 +26,9 @@ trait EventListenerOptions extends js.Object { * See Improving scrolling performance with passive listeners to learn more. */ var passive: js.UndefOr[Boolean] = js.undefined + + /** An AbortSignal. The listener will be removed when the given AbortSignal object's abort() method is called. If not + * specified, no AbortSignal is associated with the listener. + */ + var signal: js.UndefOr[AbortSignal] = js.undefined } From 4e1b6b273898b3af00036d7e58457d6bc0efea6d Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 2 Apr 2022 23:22:51 +0200 Subject: [PATCH 28/59] Update scalafmt-core to 3.5.0 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index ce81dfa18..3de89884f 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.4.3 +version = 3.5.0 runner.dialect = scala213source3 project.git = true style = Scala.js From cb3b4721d7e48e4b62c339e2c526d6bbfebc31cc Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 2 Apr 2022 23:23:04 +0200 Subject: [PATCH 29/59] Reformat with scalafmt 3.5.0 --- .../scala/org/scalajs/dom/scalafix/GenerateApiReport.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scalafix/src/main/scala/org/scalajs/dom/scalafix/GenerateApiReport.scala b/scalafix/src/main/scala/org/scalajs/dom/scalafix/GenerateApiReport.scala index 512873f4f..680e8888e 100644 --- a/scalafix/src/main/scala/org/scalajs/dom/scalafix/GenerateApiReport.scala +++ b/scalafix/src/main/scala/org/scalajs/dom/scalafix/GenerateApiReport.scala @@ -31,8 +31,8 @@ class GenerateApiReport extends SemanticRule("GenerateApiReport") { Patch.empty } - private def process(parentMods: List[Mod], sym: Symbol, body: Template, typ: ScopeType)( - implicit doc: SemanticDocument): Unit = { + private def process(parentMods: List[Mod], sym: Symbol, body: Template, + typ: ScopeType)(implicit doc: SemanticDocument): Unit = { // Skip non-public scopes val info = sym.info.get if (!info.isPublic && !info.isPackageObject) From 99f890e1f9ffce3dddc0b5d842faece8dae6ad93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 12:17:54 +0000 Subject: [PATCH 30/59] Bump JamesIves/github-pages-deploy-action from 4.2.5 to 4.3.0 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.2.5 to 4.3.0. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/v4.2.5...v4.3.0) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 8206a4184..c960e31e0 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -19,7 +19,7 @@ jobs: run: sbt readme/run - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.2.5 + uses: JamesIves/github-pages-deploy-action@v4.3.0 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From b26c5279a283ff391d0d68b8617c2d52d0d9a9a0 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 17:11:41 +0000 Subject: [PATCH 31/59] Add WorkerOptions to [Shared]Worker constructors --- api-reports/2_12.txt | 6 ++++++ api-reports/2_13.txt | 6 ++++++ dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 10 ++++++---- dom/src/main/scala/org/scalajs/dom/Worker.scala | 7 ++++++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 9be38550d..12de4c157 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -25351,6 +25351,12 @@ WorkerNavigator[JT] def onLine: Boolean WorkerNavigator[JT] def platform: String WorkerNavigator[JT] def sendBeacon(url: String, data: BodyInit?): Boolean (@deprecated in 2.0.0) WorkerNavigator[JT] def userAgent: String +WorkerOptions[JT] var credentials: js.UndefOr[RequestCredentials] +WorkerOptions[JT] var name: js.UndefOr[String] +WorkerOptions[JT] var `type`: js.UndefOr[WorkerType] +WorkerType[JT] +WorkerType[SO] val classic: WorkerType +WorkerType[SO] val module: WorkerType WriteableState[JT] WriteableState[SO] val closed: WriteableState WriteableState[SO] val closing: WriteableState diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 9be38550d..12de4c157 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -25351,6 +25351,12 @@ WorkerNavigator[JT] def onLine: Boolean WorkerNavigator[JT] def platform: String WorkerNavigator[JT] def sendBeacon(url: String, data: BodyInit?): Boolean (@deprecated in 2.0.0) WorkerNavigator[JT] def userAgent: String +WorkerOptions[JT] var credentials: js.UndefOr[RequestCredentials] +WorkerOptions[JT] var name: js.UndefOr[String] +WorkerOptions[JT] var `type`: js.UndefOr[WorkerType] +WorkerType[JT] +WorkerType[SO] val classic: WorkerType +WorkerType[SO] val module: WorkerType WriteableState[JT] WriteableState[SO] val closed: WriteableState WriteableState[SO] val closing: WriteableState diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index 1fd081f51..7762b125e 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -2,6 +2,7 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ +import scala.scalajs.js.| /** The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, * such as several windows, iframes or even workers. They implement an interface different than dedicated workers and @@ -17,13 +18,14 @@ import scala.scalajs.js.annotation._ * {{{var myWorker = new SharedWorker("aURL", name);}}} * @param stringUrl * A DOMString representing the URL of the script the worker will execute. It must obey the same-origin policy. - * @param name - * An optional argument that specifies an existing SharedWorkerGlobalScope.name — if this is specified then that - * SharedWorkerGlobalScope will be used as the scope for this shared worker. + * @param options + * A DOMString specifying an identifying name for the SharedWorkerGlobalScope representing the scope of the worker, + * which is mainly useful for debugging purposes. Or, an object containing option properties that can set when + * creating the object instance. */ @js.native @JSGlobal -class SharedWorker(stringUrl: String, name: js.UndefOr[String] = js.native) extends AbstractWorker { +class SharedWorker(scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) extends AbstractWorker { /** The port property of the SharedWorker interface returns a [[MessagePort]] object used to communicate and control * the shared worker. diff --git a/dom/src/main/scala/org/scalajs/dom/Worker.scala b/dom/src/main/scala/org/scalajs/dom/Worker.scala index 7cb7ee7c3..31e0b7154 100644 --- a/dom/src/main/scala/org/scalajs/dom/Worker.scala +++ b/dom/src/main/scala/org/scalajs/dom/Worker.scala @@ -10,10 +10,15 @@ import scala.scalajs.js.annotation._ * Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same * origin as the parent page. In addition, workers may use XMLHttpRequest for network I/O, with the exception that the * responseXML and channel attributes on XMLHttpRequest always return null. + * + * @param scriptURL + * A USVString representing the URL of the script the worker will execute. It must obey the same-origin policy. + * @param options + * An object containing option properties that can be set when creating the object instance. */ @js.native @JSGlobal -class Worker(stringUrl: String) extends AbstractWorker { +class Worker(scriptURL: String, options: js.UndefOr[WorkerOptions] = js.native) extends AbstractWorker { /** The Worker.onmessage property represents an EventHandler, that is a function to be called when the message event * occurs. These events are of type MessageEvent and will be called when the worker calls its own postMessage() From 2f3597dd683cfa43fc1cbbed6b56dd3d68c7d8a9 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 10:14:25 -0700 Subject: [PATCH 32/59] Match scaladoc to code --- dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index 7762b125e..beea279d5 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -16,7 +16,7 @@ import scala.scalajs.js.| * thrown. * @example * {{{var myWorker = new SharedWorker("aURL", name);}}} - * @param stringUrl + * @param scriptURL * A DOMString representing the URL of the script the worker will execute. It must obey the same-origin policy. * @param options * A DOMString specifying an identifying name for the SharedWorkerGlobalScope representing the scope of the worker, From 928cb9ed840c531f9122dfef41f75d7c3839d496 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 17:15:17 +0000 Subject: [PATCH 33/59] Forgot to check in new files (: --- .../scala-2/org/scalajs/dom/WorkerType.scala | 11 +++++++++++ .../scala-3/org/scalajs/dom/WorkerType.scala | 10 ++++++++++ .../scala/org/scalajs/dom/WorkerOptions.scala | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala create mode 100644 dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala diff --git a/dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala b/dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala new file mode 100644 index 000000000..3fef2275e --- /dev/null +++ b/dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala @@ -0,0 +1,11 @@ +package org.scalajs.dom + +import scala.scalajs.js + +@js.native +sealed trait WorkerType extends js.Any + +object WorkerType { + val classic: WorkerType = "classic".asInstanceOf[WorkerType] + val module: WorkerType = "module".asInstanceOf[WorkerType] +} diff --git a/dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala b/dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala new file mode 100644 index 000000000..8a32bec38 --- /dev/null +++ b/dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala @@ -0,0 +1,10 @@ +package org.scalajs.dom + +import scala.scalajs.js + +opaque type WorkerType <: String = String + +object WorkerType { + val classic: WorkerType = "classic" + val module: WorkerType = "module" +} diff --git a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala new file mode 100644 index 000000000..9f9965eef --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala @@ -0,0 +1,18 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** The Worker interface represents a background task that can be easily created and can send messages back to their + * creators. Creating a worker is as simple as calling the Worker() constructor, specifying a script to be run in the + * worker thread. + * + * Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same + * origin as the parent page. In addition, workers may use XMLHttpRequest for network I/O, with the exception that the + * responseXML and channel attributes on XMLHttpRequest always return null. + */ +@js.native +trait WorkerOptions extends js.Any { + var credentials: js.UndefOr[RequestCredentials] = js.native + var name: js.UndefOr[String] = js.native + var `type`: js.UndefOr[WorkerType] = js.native +} From 68f793be8833be81a4a406c41f7610f92d9b8333 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 17:19:36 +0000 Subject: [PATCH 34/59] Delete wrong scaladoc --- dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala index 9f9965eef..4acabfe9d 100644 --- a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala @@ -2,14 +2,6 @@ package org.scalajs.dom import scala.scalajs.js -/** The Worker interface represents a background task that can be easily created and can send messages back to their - * creators. Creating a worker is as simple as calling the Worker() constructor, specifying a script to be run in the - * worker thread. - * - * Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same - * origin as the parent page. In addition, workers may use XMLHttpRequest for network I/O, with the exception that the - * responseXML and channel attributes on XMLHttpRequest always return null. - */ @js.native trait WorkerOptions extends js.Any { var credentials: js.UndefOr[RequestCredentials] = js.native From 8e3c7dab5200a5d2238a66e1a02706336dd3ce3f Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 13:51:15 +0000 Subject: [PATCH 35/59] Fix WorkerOptions encoding --- dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala index 4acabfe9d..986b3e2b8 100644 --- a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala @@ -2,9 +2,8 @@ package org.scalajs.dom import scala.scalajs.js -@js.native -trait WorkerOptions extends js.Any { - var credentials: js.UndefOr[RequestCredentials] = js.native - var name: js.UndefOr[String] = js.native - var `type`: js.UndefOr[WorkerType] = js.native +trait WorkerOptions extends js.Object { + var credentials: js.UndefOr[RequestCredentials] = js.undefined + var name: js.UndefOr[String] = js.undefined + var `type`: js.UndefOr[WorkerType] = js.undefined } From a9ab55f9d2fa3ae94f14fabe0963ce77d76c6aa3 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 13:52:25 +0000 Subject: [PATCH 36/59] Use overload for Worker constructor --- dom/src/main/scala/org/scalajs/dom/Worker.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/Worker.scala b/dom/src/main/scala/org/scalajs/dom/Worker.scala index 31e0b7154..a38e99eeb 100644 --- a/dom/src/main/scala/org/scalajs/dom/Worker.scala +++ b/dom/src/main/scala/org/scalajs/dom/Worker.scala @@ -18,7 +18,9 @@ import scala.scalajs.js.annotation._ */ @js.native @JSGlobal -class Worker(scriptURL: String, options: js.UndefOr[WorkerOptions] = js.native) extends AbstractWorker { +class Worker(scriptURL: String, options: WorkerOptions) extends AbstractWorker { + + def this(scriptURL: String) = this(scriptURL, js.native) /** The Worker.onmessage property represents an EventHandler, that is a function to be called when the message event * occurs. These events are of type MessageEvent and will be called when the worker calls its own postMessage() From ce9293bd7f4f40a3496cf0f7ba84ce7f8bb45c71 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 14:27:20 +0000 Subject: [PATCH 37/59] Add constructor overloads for SharedWorker --- dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index beea279d5..b16a565a7 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -25,7 +25,14 @@ import scala.scalajs.js.| */ @js.native @JSGlobal -class SharedWorker(scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) extends AbstractWorker { +class SharedWorker private[this] (scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) + extends AbstractWorker { + + def this(scriptURL: String) = this(scriptURL, js.undefined) + + def this(scriptURL: String, name: String) = this(scriptURL, js.defined(name)) + + def this(scriptURL: String, options: WorkerOptions) = this(scriptURL, js.defined(options)) /** The port property of the SharedWorker interface returns a [[MessagePort]] object used to communicate and control * the shared worker. From f48f839ae603118d6fc831db5b5019d7077231f5 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 07:39:43 -0700 Subject: [PATCH 38/59] Simplify SharedWorker constructors --- dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index b16a565a7..1b3e756ec 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -25,14 +25,10 @@ import scala.scalajs.js.| */ @js.native @JSGlobal -class SharedWorker private[this] (scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) - extends AbstractWorker { +class SharedWorker(scriptURL: String) extends AbstractWorker { + def this(scriptURL: String, name: String) = this(scriptURL) - def this(scriptURL: String) = this(scriptURL, js.undefined) - - def this(scriptURL: String, name: String) = this(scriptURL, js.defined(name)) - - def this(scriptURL: String, options: WorkerOptions) = this(scriptURL, js.defined(options)) + def this(scriptURL: String, options: WorkerOptions) = this(scriptURL) /** The port property of the SharedWorker interface returns a [[MessagePort]] object used to communicate and control * the shared worker. From 101ea9643f550b7052bc3b546ae2c7c5ed00c025 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 14:50:18 +0000 Subject: [PATCH 39/59] Fix compile --- api-reports/2_12.txt | 1 + api-reports/2_13.txt | 1 + dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 12de4c157..fc20a3f5d 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -24057,6 +24057,7 @@ SharedWorker[JC] var onerror: js.Function1[ErrorEvent, _] SharedWorker[JC] def port: MessagePort SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit +SharedWorker[SO] SharedWorkerGlobalScope[JO] def self: SharedWorkerGlobalScope SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 12de4c157..fc20a3f5d 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -24057,6 +24057,7 @@ SharedWorker[JC] var onerror: js.Function1[ErrorEvent, _] SharedWorker[JC] def port: MessagePort SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit +SharedWorker[SO] SharedWorkerGlobalScope[JO] def self: SharedWorkerGlobalScope SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index 1b3e756ec..257252274 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -2,7 +2,6 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ -import scala.scalajs.js.| /** The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, * such as several windows, iframes or even workers. They implement an interface different than dedicated workers and @@ -35,3 +34,5 @@ class SharedWorker(scriptURL: String) extends AbstractWorker { */ def port: MessagePort = js.native } + +object SharedWorker From 066cd19f9abf718ceab4073f5a09b84625f872de Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Fri, 8 Apr 2022 03:00:41 +0200 Subject: [PATCH 40/59] Update sbt-scalafix, scalafix-core to 0.10.0 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index fef2d80d1..af3f9c6c7 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,7 +1,7 @@ libraryDependencies += "org.scala-js" %% "scalajs-env-jsdom-nodejs" % "1.1.0" libraryDependencies += "org.scala-js" %% "scalajs-env-selenium" % "1.1.1" -addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.34") +addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.10.0") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.10") addSbtPlugin("com.lihaoyi" % "scalatex-sbt-plugin" % "0.3.11") From 53832c8decf43a5ee9ed9e4b29eedb0895c7466c Mon Sep 17 00:00:00 2001 From: chrisshafer Date: Wed, 13 Apr 2022 16:19:57 -0500 Subject: [PATCH 41/59] 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 42/59] 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 43/59] 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 44/59] 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 45/59] 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 46/59] 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 47/59] 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 48/59] 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 49/59] 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 50/59] 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 From e9a3ccb91064c13d8911669171e73d1ca2debbfa Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 17 Apr 2022 00:45:57 +0200 Subject: [PATCH 51/59] Update scalafmt-core to 3.5.1 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 3de89884f..e99fb0970 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.5.0 +version = 3.5.1 runner.dialect = scala213source3 project.git = true style = Scala.js 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 52/59] 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