/************************************************************* * * Copyright (c) 2018-2025 The MathJax Consortium * * 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. */ /** * @file Implements a lightweight DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import { LiteNode } from './Element.js'; /************************************************************/ /** * Implements a lightweight DocumentFragment or NodeList replacement * * @template N The HTMLElement node class */ export class LiteList { /** * The nodes held in the fragment */ public nodes: N[] = []; /** * @param {N[]} children The children for the fragment * @class */ constructor(children: N[]) { this.nodes = [...children]; } /** * @param {N} node A node to append to the fragment */ public append(node: N) { this.nodes.push(node); } /** * Make this class iterable (so it can be used with Array.from()) * * @returns {Iterator} The iterator. */ public [Symbol.iterator](): Iterator { let i = 0; return { /** * @returns {IteratorResult} The next iterator. */ next(): IteratorResult { return i === this.nodes.length ? { value: null, done: true } : { value: this.nodes[i++], done: false }; }, }; } }