blob: 6f83035e93c557a1d7492d14150373be53ab1257 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
"use strict";
const idlUtils = require("../generated/utils.js");
exports.implementation = class NodeListImpl {
constructor(globalObject, 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();
}
};
|