fix(frontend/player): safe insert/deleteRule for every case to reduce affection of a replay

This commit is contained in:
Alex Kaminskii 2022-10-10 11:19:19 +02:00
parent 1122d1daab
commit e92ac4be33
5 changed files with 32 additions and 26 deletions

View file

@ -181,7 +181,6 @@ export default class AssistManager {
}
for (let msg = reader.readNext();msg !== null;msg = reader.readNext()) {
//@ts-ignore
if (this.jumped) {
// @ts-ignore
msg.time = this.md.getLastRecordedMessageTime() + msg.time

View file

@ -15,6 +15,7 @@ import {
PostponedStyleSheet,
} from './VirtualDOM';
import type { StyleElement } from './VirtualDOM';
import { insertRule, deleteRule } from './safeCSSRules';
type HTMLElementWithValue = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement
@ -32,27 +33,6 @@ const ATTR_NAME_REGEXP = /([^\t\n\f \/>"'=]+)/; // regexp costs ~
// .replace(/\-webkit\-/g, "")
// }
function insertRule(sheet: CSSStyleSheet | PostponedStyleSheet, msg: { rule: string, index: number }) {
try {
sheet.insertRule(msg.rule, msg.index)
} catch (e) {
logger.warn(e, msg)
try {
sheet.insertRule(msg.rule, 0)
logger.warn("Inserting rule into 0-index", e, msg)
} catch (e) {
logger.warn("Cannot insert rule.", e, msg)
}
}
}
function deleteRule(sheet: CSSStyleSheet | PostponedStyleSheet, msg: { index: number }) {
try {
sheet.deleteRule(msg.index)
} catch (e) {
logger.warn(e, msg)
}
}
export default class DOMManager extends ListWalker<Message> {
private vTexts: Map<number, VText> = new Map() // map vs object here?

View file

@ -1,7 +1,7 @@
import type StatedScreen from '../../StatedScreen';
import type { CssInsertRule, CssDeleteRule, ReplaceVcss } from '../../messages';
import type { CssInsertRule, CssDeleteRule } from '../../messages';
type CSSRuleMessage = CssInsertRule | CssDeleteRule | ReplaceVcss;
type CSSRuleMessage = CssInsertRule | CssDeleteRule;
import ListWalker from '../ListWalker';

View file

@ -2,6 +2,8 @@ type VChild = VElement | VText
export type VNode = VDocument | VShadowRoot | VElement | VText
import { insertRule, deleteRule } from './safeCSSRules';
abstract class VParent {
abstract node: Node | null
protected children: VChild[] = []
@ -182,11 +184,11 @@ export class PostponedStyleSheet {
}
insertRule(rule: string, index: number) {
this.applyCallback(s => s.insertRule(rule, index))
this.applyCallback(s => insertRule(s, { rule, index }))
}
deleteRule(index: number) {
this.applyCallback(s => s.deleteRule(index))
this.applyCallback(s => deleteRule(s, { index }))
}
}

View file

@ -0,0 +1,25 @@
import logger from 'App/logger';
export type { PostponedStyleSheet } from './VirtualDOM'
export function insertRule(sheet: CSSStyleSheet | PostponedStyleSheet, msg: { rule: string, index: number }) {
try {
sheet.insertRule(msg.rule, msg.index)
} catch (e) {
logger.warn(e, msg)
try {
sheet.insertRule(msg.rule, 0)
logger.warn("Inserting rule into 0-index", e, msg)
} catch (e) {
logger.warn("Cannot insert rule.", e, msg)
}
}
}
export function deleteRule(sheet: CSSStyleSheet | PostponedStyleSheet, msg: { index: number }) {
try {
sheet.deleteRule(msg.index)
} catch (e) {
logger.warn(e, msg)
}
}