diff --git a/frontend/app/player/common/ListWalker.ts b/frontend/app/player/common/ListWalker.ts index ca3d409ac..61f93f8df 100644 --- a/frontend/app/player/common/ListWalker.ts +++ b/frontend/app/player/common/ListWalker.ts @@ -105,11 +105,11 @@ export default class ListWalker { : null } - /* - Returns last message with the time <= t. - Assumed that the current message is already handled so - if pointer doesn't cahnge is returned. - */ + /** + * @returns last message with the time <= t. + * Assumed that the current message is already handled so + * if pointer doesn't cahnge is returned. + */ moveGetLast(t: number, index?: number): T | null { let key: string = "time"; //TODO let val = t; @@ -130,7 +130,13 @@ export default class ListWalker { return changed ? this.list[ this.p - 1 ] : null; } - async moveWait(t: number, callback: (msg: T) => Promise | undefined): Promise { + /** + * Moves over the messages starting from the current+1 to the last one with the time <= t + * applying callback on each of them + * @param t - max message time to move to; will move & apply callback while msg.time <= t + * @param callback - a callback to apply on each message passing by while moving + */ + moveApply(t: number, callback: (msg: T) => void): void { // Applying only in increment order for now if (t < this.timeNow) { this.reset(); @@ -138,8 +144,7 @@ export default class ListWalker { const list = this.list while (list[this.p] && list[this.p].time <= t) { - const maybePromise = callback(this.list[ this.p++ ]); - if (maybePromise) { await maybePromise } + callback(this.list[ this.p++ ]) } } diff --git a/frontend/app/player/common/SimpleStore.ts b/frontend/app/player/common/SimpleStore.ts index dd7e1ee7b..973fa4cb8 100644 --- a/frontend/app/player/common/SimpleStore.ts +++ b/frontend/app/player/common/SimpleStore.ts @@ -1,6 +1,5 @@ import { Store } from './types' -// (not a type) export default class SimpleSore implements Store { constructor(private state: G){} get(): G { diff --git a/frontend/app/player/web/managers/DOM/DOMManager.ts b/frontend/app/player/web/managers/DOM/DOMManager.ts index 8e0fb8b6b..f6291fa0a 100644 --- a/frontend/app/player/web/managers/DOM/DOMManager.ts +++ b/frontend/app/player/web/managers/DOM/DOMManager.ts @@ -9,40 +9,36 @@ import FocusManager from './FocusManager'; import SelectionManager from './SelectionManager'; import type { StyleElement } from './VirtualDOM'; import { - PostponedStyleSheet, + OnloadStyleSheet, VDocument, VElement, + VHTMLElement, VNode, VShadowRoot, - VStyleElement, VText, + OnloadVRoot, } from './VirtualDOM'; import { deleteRule, insertRule } from './safeCSSRules'; -type HTMLElementWithValue = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement; -const IGNORED_ATTRS = [ "autocomplete" ]; -const ATTR_NAME_REGEXP = /([^\t\n\f \/>"'=]+)/; // regexp costs ~ - - -// TODO: filter out non-relevant prefixes -// function replaceCSSPrefixes(css: string) { -// return css -// .replace(/\-ms\-/g, "") -// .replace(/\-webkit\-/g, "") -// .replace(/\-moz\-/g, "") -// .replace(/\-webkit\-/g, "") -// } +function isStyleVElement(vElem: VElement): vElem is VElement & { node: StyleElement } { + return vElem.tagName.toLowerCase() === "style" +} +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 vRoots: Map = new Map() - private styleSheets: Map = new Map() - private ppStyleSheets: Map = new Map() + private readonly olVRoots: Map = new Map() + /** Constructed StyleSheets https://developer.mozilla.org/en-US/docs/Web/API/Document/adoptedStyleSheets + * as well as