Blame view

lib/jsdom/living/nodes/NodeList-impl.js 1.03 KB
858f2bdf5   Boyan Georgiev   fixes
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();
    }
  };