fix(frontend/player): safe insert/deleteRule for every case to reduce affection of a replay
This commit is contained in:
parent
1122d1daab
commit
e92ac4be33
5 changed files with 32 additions and 26 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
||||
|
|
|
|||
|
|
@ -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 }))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue