Skip to content

Commit d6dce7c

Browse files
FabioPinheirozetashiftarmanbilge
committed
Add support for Web NFC API
Co-authored-by: zetashift <rskaraya@gmail.com> Co-authored-by: Arman Bilge <armanbilge@gmail.com>
1 parent 9d7e1b7 commit d6dce7c

File tree

8 files changed

+250
-0
lines changed

8 files changed

+250
-0
lines changed

api-reports/2_12.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16426,6 +16426,49 @@ MutationRecord[JT] def previousSibling: Node
1642616426
MutationRecord[JT] def removedNodes: NodeList[Node]
1642716427
MutationRecord[JT] def target: Node
1642816428
MutationRecord[JT] def `type`: String
16429+
NDEFMessage[JC] var records: js.Array[NDEFRecord]
16430+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16431+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16432+
NDEFReader[JC] def dispatchEvent(evt: Event): Boolean
16433+
NDEFReader[JC] var onreading: js.Function1[NDEFReadingEvent, Any]
16434+
NDEFReader[JC] var onreadingerror: js.Function1[Event, Any]
16435+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16436+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16437+
NDEFReader[JC] def scan(options: NDEFScanOptions?): js.Promise[Unit]
16438+
NDEFReader[JC] def write(message: String): js.Promise[Unit]
16439+
NDEFReader[JC] def write(message: String, options: NDEFWriteOptions): js.Promise[Unit]
16440+
NDEFReader[JC] def write(message: js.Array[NDEFRecord]): js.Promise[Unit]
16441+
NDEFReader[JC] def write(message: js.Array[NDEFRecord], options: NDEFWriteOptions): js.Promise[Unit]
16442+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer): js.Promise[Unit]
16443+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer, options: NDEFWriteOptions): js.Promise[Unit]
16444+
NDEFReader[JC] def write(message: js.typedarray.DataView): js.Promise[Unit]
16445+
NDEFReader[JC] def write(message: js.typedarray.DataView, options: NDEFWriteOptions): js.Promise[Unit]
16446+
NDEFReadingEvent[JT] def bubbles: Boolean
16447+
NDEFReadingEvent[JT] def cancelBubble: Boolean
16448+
NDEFReadingEvent[JT] def cancelable: Boolean
16449+
NDEFReadingEvent[JT] def composed: Boolean
16450+
NDEFReadingEvent[JT] def currentTarget: EventTarget
16451+
NDEFReadingEvent[JT] def defaultPrevented: Boolean
16452+
NDEFReadingEvent[JT] def eventPhase: Int
16453+
NDEFReadingEvent[JT] def isTrusted: Boolean
16454+
NDEFReadingEvent[JT] var message: NDEFMessage
16455+
NDEFReadingEvent[JT] def preventDefault(): Unit
16456+
NDEFReadingEvent[JT] var serialNumber: String
16457+
NDEFReadingEvent[JT] def stopImmediatePropagation(): Unit
16458+
NDEFReadingEvent[JT] def stopPropagation(): Unit
16459+
NDEFReadingEvent[JT] def target: EventTarget
16460+
NDEFReadingEvent[JT] def timeStamp: Double
16461+
NDEFReadingEvent[JT] def `type`: String
16462+
NDEFRecord[JC] var data: js.typedarray.DataView
16463+
NDEFRecord[JC] var encoding: js.UndefOr[String]
16464+
NDEFRecord[JC] var id: js.UndefOr[String]
16465+
NDEFRecord[JC] var lang: js.UndefOr[String]
16466+
NDEFRecord[JC] var mediaType: js.UndefOr[String]
16467+
NDEFRecord[JC] var recordType: String
16468+
NDEFRecord[JC] def toRecords(): js.Array[NDEFRecord]
16469+
NDEFScanOptions[JT] def signal: js.UndefOr[AbortSignal]
16470+
NDEFWriteOptions[JT] def overwrite: Boolean
16471+
NDEFWriteOptions[JT] def signal: js.UndefOr[AbortSignal]
1642916472
NamedNodeMap[JC] @scala.scalajs.js.annotation.JSBracketAccess def apply(index: Int): Attr
1643016473
NamedNodeMap[JC] def getNamedItem(name: String): Attr
1643116474
NamedNodeMap[JC] def getNamedItemNS(namespaceURI: String, localName: String): Attr

api-reports/2_13.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16426,6 +16426,49 @@ MutationRecord[JT] def previousSibling: Node
1642616426
MutationRecord[JT] def removedNodes: NodeList[Node]
1642716427
MutationRecord[JT] def target: Node
1642816428
MutationRecord[JT] def `type`: String
16429+
NDEFMessage[JC] var records: js.Array[NDEFRecord]
16430+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16431+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16432+
NDEFReader[JC] def dispatchEvent(evt: Event): Boolean
16433+
NDEFReader[JC] var onreading: js.Function1[NDEFReadingEvent, Any]
16434+
NDEFReader[JC] var onreadingerror: js.Function1[Event, Any]
16435+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16436+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16437+
NDEFReader[JC] def scan(options: NDEFScanOptions?): js.Promise[Unit]
16438+
NDEFReader[JC] def write(message: String): js.Promise[Unit]
16439+
NDEFReader[JC] def write(message: String, options: NDEFWriteOptions): js.Promise[Unit]
16440+
NDEFReader[JC] def write(message: js.Array[NDEFRecord]): js.Promise[Unit]
16441+
NDEFReader[JC] def write(message: js.Array[NDEFRecord], options: NDEFWriteOptions): js.Promise[Unit]
16442+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer): js.Promise[Unit]
16443+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer, options: NDEFWriteOptions): js.Promise[Unit]
16444+
NDEFReader[JC] def write(message: js.typedarray.DataView): js.Promise[Unit]
16445+
NDEFReader[JC] def write(message: js.typedarray.DataView, options: NDEFWriteOptions): js.Promise[Unit]
16446+
NDEFReadingEvent[JT] def bubbles: Boolean
16447+
NDEFReadingEvent[JT] def cancelBubble: Boolean
16448+
NDEFReadingEvent[JT] def cancelable: Boolean
16449+
NDEFReadingEvent[JT] def composed: Boolean
16450+
NDEFReadingEvent[JT] def currentTarget: EventTarget
16451+
NDEFReadingEvent[JT] def defaultPrevented: Boolean
16452+
NDEFReadingEvent[JT] def eventPhase: Int
16453+
NDEFReadingEvent[JT] def isTrusted: Boolean
16454+
NDEFReadingEvent[JT] var message: NDEFMessage
16455+
NDEFReadingEvent[JT] def preventDefault(): Unit
16456+
NDEFReadingEvent[JT] var serialNumber: String
16457+
NDEFReadingEvent[JT] def stopImmediatePropagation(): Unit
16458+
NDEFReadingEvent[JT] def stopPropagation(): Unit
16459+
NDEFReadingEvent[JT] def target: EventTarget
16460+
NDEFReadingEvent[JT] def timeStamp: Double
16461+
NDEFReadingEvent[JT] def `type`: String
16462+
NDEFRecord[JC] var data: js.typedarray.DataView
16463+
NDEFRecord[JC] var encoding: js.UndefOr[String]
16464+
NDEFRecord[JC] var id: js.UndefOr[String]
16465+
NDEFRecord[JC] var lang: js.UndefOr[String]
16466+
NDEFRecord[JC] var mediaType: js.UndefOr[String]
16467+
NDEFRecord[JC] var recordType: String
16468+
NDEFRecord[JC] def toRecords(): js.Array[NDEFRecord]
16469+
NDEFScanOptions[JT] def signal: js.UndefOr[AbortSignal]
16470+
NDEFWriteOptions[JT] def overwrite: Boolean
16471+
NDEFWriteOptions[JT] def signal: js.UndefOr[AbortSignal]
1642916472
NamedNodeMap[JC] @scala.scalajs.js.annotation.JSBracketAccess def apply(index: Int): Attr
1643016473
NamedNodeMap[JC] def getNamedItem(name: String): Attr
1643116474
NamedNodeMap[JC] def getNamedItemNS(namespaceURI: String, localName: String): Attr
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The [[NDEFMessage]] interface of the Web NFC API represents the content of an NDEF message that has been read from
7+
* or could be written to an NFC tag. An instance is acquired by calling the NDEFMessage() constructor or from the
8+
* NDEFReadingEvent.message property, which is passed to the reading event.
9+
*
10+
* @param records
11+
* The records property of NDEFMessage interface represents a list of NDEFRecords present in the NDEF message.
12+
*/
13+
@js.native
14+
@JSGlobal
15+
class NDEFMessage extends js.Object {
16+
17+
/** Returns the list of NDEF records contained in the message. */
18+
var records: js.Array[NDEFRecord] = js.native
19+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The [[NDEFReader]] interface of the Web NFC API (https://developer.mozilla.org/en-US/docs/Web/API/Web_NFC_API) is
7+
* used to read from and write data to compatible NFC devices, e.g. NFC tags supporting NDEF, when these devices are
8+
* within the reader's magnetic induction field.
9+
*/
10+
@JSGlobal("NDEFReader")
11+
@js.native
12+
class NDEFReader() extends EventTarget {
13+
14+
/** Activates a reading device and returns a Promise that either resolves when an NFC tag read operation is scheduled
15+
* or rejects if a hardware or permission error is encountered. This method triggers a permission prompt if the "nfc"
16+
* permission has not been previously granted.
17+
*
18+
* @return
19+
* a Promise that resolves immediately after scheduling read operations for the NFC adapter.
20+
*/
21+
def scan(options: NDEFScanOptions = js.native): js.Promise[Unit] = js.native
22+
23+
/** Attempts to write an NDEF message to a tag and returns a Promise that either resolves when a message has been
24+
* written to the tag or rejects if a hardware or permission error is encountered. This method triggers a permission
25+
* prompt if the "nfc" permission has not been previously granted.
26+
*
27+
* @param message
28+
* The message to be written, either a string object or literal, an ArrayBuffer, a TypedArray, a DataView, or an
29+
* array of records. A record has the following members:
30+
* @param options
31+
* An object with the following properties:
32+
*
33+
* @return
34+
* a Promise that either resolves when a message has been written to the tag or rejects if a hardware or permission
35+
* error is encountered.
36+
*/
37+
def write(message: String, options: NDEFWriteOptions): js.Promise[Unit] = js.native
38+
def write(message: js.typedarray.ArrayBuffer, options: NDEFWriteOptions): js.Promise[Unit] = js.native
39+
// def write(message:js.typedarray.TypedArray[NDEFRecord, ???] , options: NDEFWriteOptions = js.native): js.Promise[Unit] = js.native
40+
def write(message: js.typedarray.DataView, options: NDEFWriteOptions): js.Promise[Unit] = js.native
41+
def write(message: js.Array[NDEFRecord], options: NDEFWriteOptions): js.Promise[Unit] = js.native
42+
43+
def write(message: String): js.Promise[Unit] = js.native
44+
def write(message: js.typedarray.ArrayBuffer): js.Promise[Unit] = js.native
45+
// def write(message:js.typedarray.TypedArray[NDEFRecord, ???]): js.Promise[Unit] = js.native
46+
def write(message: js.typedarray.DataView): js.Promise[Unit] = js.native
47+
def write(message: js.Array[NDEFRecord]): js.Promise[Unit] = js.native
48+
49+
/** The reading event of the NDEFReader interface is fired whenever a new reading is available from compatible NFC
50+
* devices (e.g. NFC tags supporting NDEF) when these devices are within the reader's magnetic induction field.
51+
*/
52+
var onreading: js.Function1[NDEFReadingEvent, Any] = js.native
53+
54+
/** The readingerror event of the NDEFReader interface is fired whenever an error occurs during reading of NFC tags,
55+
* e.g. when tags leave the reader's magnetic induction field.
56+
*/
57+
var onreadingerror: js.Function1[Event, Any] = js.native
58+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
5+
/** The NDEFReadingEvent interface of the Web NFC API represents events dispatched on new NFC readings obtained by
6+
* NDEFReader.
7+
*
8+
* @see
9+
* https://developer.mozilla.org/en-US/docs/Web/API/NDEFReadingEvent
10+
*/
11+
@js.native
12+
trait NDEFReadingEvent extends Event {
13+
14+
/** Returns an NDEFMessage object containing the received message. */
15+
var message: NDEFMessage = js.native
16+
17+
/** Returns the serial number of the device, which is used for anti-collision and identification, or an empty string
18+
* if no serial number is available.
19+
*/
20+
var serialNumber: String = js.native
21+
22+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The [[NDEFRecord]] interface of the Web NFC API provides data that can be read from, or written to, compatible NFC
7+
* devices, e.g. NFC tags supporting NDEF.
8+
*/
9+
@js.native
10+
@JSGlobal
11+
class NDEFRecord extends js.Object {
12+
13+
/** Returns the record type of the record. Records must have either a standardized well-known type name such as
14+
* "empty", "text", "url", "smart-poster", "absolute-url", "mime", or "unknown" or else an external type name, which
15+
* consists of a domain name and custom type name separated by a colon (":").
16+
*/
17+
var recordType: String = js.native
18+
19+
/** Returns the MIME type of the record. This value will be null if recordType is not equal to "mime". */
20+
var mediaType: js.UndefOr[String] = js.native
21+
22+
/** Returns the record identifier, which is an absolute or relative URL used to identify the record.
23+
*
24+
* Note: The uniqueness of the identifier is enforced only by the generator of the record.
25+
*/
26+
var id: js.UndefOr[String] = js.native
27+
28+
/** Returns a DataView containing the raw bytes of the record's payload. */
29+
var data: js.typedarray.DataView = js.native
30+
// var data: DataView = js.native
31+
32+
/** Returns the encoding of a textual payload, or null otherwise. */
33+
var encoding: js.UndefOr[String] = js.native
34+
35+
/** Returns the language of a textual payload, or null if one was not supplied. */
36+
var lang: js.UndefOr[String] = js.native
37+
38+
/** Converts [[NDEFRecord.data]] to a sequence of records. This allows parsing the payloads of record types which may
39+
* contain nested records, such as smart poster and external type records.
40+
*/
41+
def toRecords(): js.Array[NDEFRecord] = js.native
42+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
5+
@js.native
6+
trait NDEFScanOptions extends js.Object {
7+
8+
/** An AbortSignal that allows the current write operation to be canceled. */
9+
def `signal`: js.UndefOr[AbortSignal] = js.native
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
5+
@js.native
6+
trait NDEFWriteOptions extends js.Object {
7+
8+
/** A boolean value specifying whether or not existing records should be overwritten, if such exists. */
9+
def `overwrite`: Boolean = js.native
10+
11+
/** An AbortSignal that allows the current write operation to be canceled. */
12+
def `signal`: js.UndefOr[AbortSignal] = js.native
13+
}

0 commit comments

Comments
 (0)