Introduce ItemArrayLike interface and replace multiple asList adapters with the single one.
This commit is contained in:
@@ -62,12 +62,6 @@ fun Document?.elements(namespaceUri: String, localName: String): List<Element> {
|
|||||||
|
|
||||||
// END OF DEPRECATED
|
// END OF DEPRECATED
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a view of this [NodeList] as a list of nodes.
|
|
||||||
*/
|
|
||||||
//@Deprecated(W)
|
|
||||||
public fun NodeList.asList(): List<Node> = NodeListAsList(this)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a view of this [NodeList] as a list of elements assuming that it contains only elements.
|
* Returns a view of this [NodeList] as a list of elements assuming that it contains only elements.
|
||||||
*
|
*
|
||||||
@@ -95,14 +89,6 @@ public fun List<Node>.filterElements(): List<Element> {
|
|||||||
public fun NodeList.filterElements(): List<Element> = asList().filterElements()
|
public fun NodeList.filterElements(): List<Element> = asList().filterElements()
|
||||||
|
|
||||||
|
|
||||||
private class NodeListAsList(private val delegate: NodeList) : AbstractList<Node>() {
|
|
||||||
override val size: Int get() = delegate.length
|
|
||||||
|
|
||||||
override fun get(index: Int): Node = when {
|
|
||||||
index in 0..size - 1 -> delegate.item(index)!!
|
|
||||||
else -> throw IndexOutOfBoundsException("index $index is not in range [0 .. ${size - 1})")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ElementListAsList(private val nodeList: NodeList) : AbstractList<Element>() {
|
private class ElementListAsList(private val nodeList: NodeList) : AbstractList<Element>() {
|
||||||
override fun get(index: Int): Element {
|
override fun get(index: Int): Element {
|
||||||
|
|||||||
@@ -18,29 +18,3 @@ operator fun Document?.get(selector: String): List<Element> {
|
|||||||
operator fun Element.get(selector: String): List<Element> {
|
operator fun Element.get(selector: String): List<Element> {
|
||||||
return querySelectorAll(selector).asList().filterElements()
|
return querySelectorAll(selector).asList().filterElements()
|
||||||
}
|
}
|
||||||
|
|
||||||
private class HTMLCollectionListView(val collection: HTMLCollection) : AbstractList<HTMLElement>() {
|
|
||||||
override val size: Int get() = collection.length
|
|
||||||
|
|
||||||
override fun get(index: Int): HTMLElement =
|
|
||||||
when {
|
|
||||||
index in 0..size - 1 -> collection.item(index) as HTMLElement
|
|
||||||
else -> throw IndexOutOfBoundsException("index $index is not in range [0 .. ${size - 1})")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//@Deprecated(W)
|
|
||||||
public fun HTMLCollection.asList(): List<HTMLElement> = HTMLCollectionListView(this)
|
|
||||||
|
|
||||||
private class DOMTokenListView(val delegate: DOMTokenList) : AbstractList<String>() {
|
|
||||||
override val size: Int get() = delegate.length
|
|
||||||
|
|
||||||
override fun get(index: Int) =
|
|
||||||
when {
|
|
||||||
index in 0..size - 1 -> delegate.item(index)!!
|
|
||||||
else -> throw IndexOutOfBoundsException("index $index is not in range [0 .. ${size - 1})")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//@Deprecated(W)
|
|
||||||
public fun DOMTokenList.asList(): List<String> = DOMTokenListView(this)
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2017 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.w3c.dom
|
||||||
|
|
||||||
|
public external interface ItemArrayLike<out T> {
|
||||||
|
val length: Int
|
||||||
|
fun item(index: Int): T?
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the view of this `ItemArrayLike<T>` collection as `List<T>`
|
||||||
|
*/
|
||||||
|
public fun <T> ItemArrayLike<T>.asList(): List<T> = object : AbstractList<T>() {
|
||||||
|
override val size: Int get() = this@asList.length
|
||||||
|
|
||||||
|
override fun get(index: Int): T = when {
|
||||||
|
index in 0..lastIndex -> this@asList.item(index) as T
|
||||||
|
else -> throw IndexOutOfBoundsException("index $index is not in range [0..$lastIndex)")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2499,15 +2499,15 @@ public external interface Slotable {
|
|||||||
val assignedSlot: HTMLSlotElement?
|
val assignedSlot: HTMLSlotElement?
|
||||||
}
|
}
|
||||||
|
|
||||||
public external abstract class NodeList {
|
public external abstract class NodeList : ItemArrayLike<Node> {
|
||||||
open val length: Int
|
override open val length: Int
|
||||||
fun item(index: Int): Node?
|
override fun item(index: Int): Node?
|
||||||
}
|
}
|
||||||
@kotlin.internal.InlineOnly inline operator fun NodeList.get(index: Int): Node? = asDynamic()[index]
|
@kotlin.internal.InlineOnly inline operator fun NodeList.get(index: Int): Node? = asDynamic()[index]
|
||||||
|
|
||||||
public external abstract class HTMLCollection : UnionElementOrHTMLCollection {
|
public external abstract class HTMLCollection : UnionElementOrHTMLCollection, ItemArrayLike<Element> {
|
||||||
open val length: Int
|
override open val length: Int
|
||||||
fun item(index: Int): Element?
|
override fun item(index: Int): Element?
|
||||||
fun namedItem(name: String): Element?
|
fun namedItem(name: String): Element?
|
||||||
}
|
}
|
||||||
@kotlin.internal.InlineOnly inline operator fun HTMLCollection.get(index: Int): Element? = asDynamic()[index]
|
@kotlin.internal.InlineOnly inline operator fun HTMLCollection.get(index: Int): Element? = asDynamic()[index]
|
||||||
@@ -2775,9 +2775,9 @@ public inline fun ShadowRootInit(mode: ShadowRootMode?): ShadowRootInit {
|
|||||||
return o
|
return o
|
||||||
}
|
}
|
||||||
|
|
||||||
public external abstract class NamedNodeMap {
|
public external abstract class NamedNodeMap : ItemArrayLike<Attr> {
|
||||||
open val length: Int
|
override open val length: Int
|
||||||
fun item(index: Int): Attr?
|
override fun item(index: Int): Attr?
|
||||||
fun getNamedItem(qualifiedName: String): Attr?
|
fun getNamedItem(qualifiedName: String): Attr?
|
||||||
fun getNamedItemNS(namespace: String?, localName: String): Attr?
|
fun getNamedItemNS(namespace: String?, localName: String): Attr?
|
||||||
fun setNamedItem(attr: Attr): Attr?
|
fun setNamedItem(attr: Attr): Attr?
|
||||||
@@ -2935,10 +2935,10 @@ public external interface NodeFilter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public external abstract class DOMTokenList {
|
public external abstract class DOMTokenList : ItemArrayLike<String> {
|
||||||
open val length: Int
|
override open val length: Int
|
||||||
open var value: String
|
open var value: String
|
||||||
fun item(index: Int): String?
|
override fun item(index: Int): String?
|
||||||
fun contains(token: String): Boolean
|
fun contains(token: String): Boolean
|
||||||
fun add(vararg tokens: String): Unit
|
fun add(vararg tokens: String): Unit
|
||||||
fun remove(vararg tokens: String): Unit
|
fun remove(vararg tokens: String): Unit
|
||||||
@@ -3037,9 +3037,9 @@ public inline fun DOMRectInit(x: Double? = 0.0, y: Double? = 0.0, width: Double?
|
|||||||
return o
|
return o
|
||||||
}
|
}
|
||||||
|
|
||||||
public external interface DOMRectList {
|
public external interface DOMRectList : ItemArrayLike<DOMRect> {
|
||||||
val length: Int
|
override val length: Int
|
||||||
fun item(index: Int): DOMRect?
|
override fun item(index: Int): DOMRect?
|
||||||
}
|
}
|
||||||
@kotlin.internal.InlineOnly inline operator fun DOMRectList.get(index: Int): DOMRect? = asDynamic()[index]
|
@kotlin.internal.InlineOnly inline operator fun DOMRectList.get(index: Int): DOMRect? = asDynamic()[index]
|
||||||
|
|
||||||
|
|||||||
@@ -66,9 +66,9 @@ public inline fun FilePropertyBag(lastModified: Int? = null, type: String? = "")
|
|||||||
return o
|
return o
|
||||||
}
|
}
|
||||||
|
|
||||||
public external abstract class FileList {
|
public external abstract class FileList : ItemArrayLike<File> {
|
||||||
open val length: Int
|
override open val length: Int
|
||||||
fun item(index: Int): File?
|
override fun item(index: Int): File?
|
||||||
}
|
}
|
||||||
@kotlin.internal.InlineOnly inline operator fun FileList.get(index: Int): File? = asDynamic()[index]
|
@kotlin.internal.InlineOnly inline operator fun FileList.get(index: Int): File? = asDynamic()[index]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user