import logger from 'App/logger'; import type Screen from '../../Screen/Screen'; import type { Message, SetNodeScroll } from '../../messages'; import { MType } from '../../messages'; import ListWalker from '../../../common/ListWalker'; import StylesManager from './StylesManager'; import FocusManager from './FocusManager'; import SelectionManager from './SelectionManager'; import { StyleElement, VSpriteMap, OnloadStyleSheet, VDocument, VElement, VHTMLElement, VShadowRoot, VText, OnloadVRoot, } from './VirtualDOM'; import { deleteRule, insertRule } from './safeCSSRules'; function isStyleVElement( vElem: VElement, ): vElem is VElement & { node: StyleElement } { return vElem.tagName.toLowerCase() === 'style'; } function setupWindowLogging( vTexts: Map, vElements: Map, olVRoots: Map, ) { // @ts-ignore window.checkVElements = () => vElements; // @ts-ignore window.checkVTexts = () => vTexts; // @ts-ignore window.checkVRoots = () => olVRoots; } const IGNORED_ATTRS = ['autocomplete']; const ATTR_NAME_REGEXP = /([^\t\n\f \/>"'=]+)/; export default class DOMManager extends ListWalker { private readonly vTexts: Map = new Map(); // map vs object here? private readonly vElements: Map = new Map(); private readonly olVRoots: Map = new Map(); /** required to keep track of iframes, frameId : vnodeId */ private readonly iframeRoots: Record = {}; private shadowRootParentMap: Map = new Map(); /** Constructed StyleSheets https://developer.mozilla.org/en-US/docs/Web/API/Document/adoptedStyleSheets * as well as