"use strict";
|
|
const idlUtils = require("../generated/utils.js");
|
|
exports.implementation = class NodeListImpl {
|
constructor(args, privateData) {
|
if (privateData.nodes) {
|
this._list = [...privateData.nodes];
|
this._isLive = false;
|
} else {
|
this._list = [];
|
this._isLive = true;
|
this._version = -1;
|
this._element = privateData.element;
|
this._query = privateData.query;
|
this._update();
|
}
|
}
|
get length() {
|
this._update();
|
return this._list.length;
|
}
|
item(index) {
|
this._update();
|
return this._list[index] || null;
|
}
|
_update() {
|
if (this._isLive) {
|
if (this._version < this._element._version) {
|
const snapshot = this._query();
|
for (let i = 0; i < snapshot.length; i++) {
|
this._list[i] = snapshot[i];
|
}
|
this._list.length = snapshot.length;
|
this._version = this._element._version;
|
}
|
}
|
}
|
get [idlUtils.supportedPropertyIndices]() {
|
this._update();
|
return this._list.keys();
|
}
|
};
|