fix ui: fix for sorting (#2077)

This commit is contained in:
Delirium 2024-04-11 17:29:43 +02:00 committed by GitHub
parent 64cde1fb7c
commit a316c90472
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -98,6 +98,7 @@ export default class MessageLoader {
} }
let brokenMessages = 0; let brokenMessages = 0;
let originalCopy = [...msgs];
msgs.forEach((msg) => { msgs.forEach((msg) => {
if (!msg.time) { if (!msg.time) {
msg.time = artificialStartTime; msg.time = artificialStartTime;
@ -106,11 +107,12 @@ export default class MessageLoader {
}); });
const sortedMsgs = msgs const sortedMsgs = msgs
.sort((m1, m2) => m1.time - m2.time); // .sort((m1, m2) => m1.time - m2.time);
// .sort(brokenDomSorter); .sort(brokenDomSorter)
.sort(sortIframes);
if (brokenMessages > 0) { if (brokenMessages > 0) {
console.warn('Broken timestamp messages', brokenMessages); console.warn('Broken timestamp messages', brokenMessages, originalCopy);
} }
onMessagesDone(sortedMsgs, `${file} ${fileNum}`); onMessagesDone(sortedMsgs, `${file} ${fileNum}`);
@ -277,6 +279,7 @@ const DOMMessages = [
MType.CreateTextNode, MType.CreateTextNode,
MType.MoveNode, MType.MoveNode,
MType.RemoveNode, MType.RemoveNode,
MType.CreateIFrameDocument
]; ];
function brokenDomSorter(m1: PlayerMsg, m2: PlayerMsg) { function brokenDomSorter(m1: PlayerMsg, m2: PlayerMsg) {
@ -287,20 +290,11 @@ function brokenDomSorter(m1: PlayerMsg, m2: PlayerMsg) {
if (m1.tp !== MType.CreateDocument && m2.tp === MType.CreateDocument) if (m1.tp !== MType.CreateDocument && m2.tp === MType.CreateDocument)
return 1; return 1;
if (m1.tp === MType.CreateIFrameDocument && m2.tp === MType.CreateElementNode) {
if (m2.id === m1.frameID) return 1;
if (m2.parentID === m1.id) return -1
}
if (m1.tp === MType.CreateElementNode && m2.tp === MType.CreateIFrameDocument) {
if (m1.id === m2.frameID) return -1;
if (m1.parentID === m2.id) return 1
}
const m1IsDOM = DOMMessages.includes(m1.tp); const m1IsDOM = DOMMessages.includes(m1.tp);
const m2IsDOM = DOMMessages.includes(m2.tp); const m2IsDOM = DOMMessages.includes(m2.tp);
if (m1IsDOM && m2IsDOM) { if (m1IsDOM && m2IsDOM) {
// @ts-ignore DOM msg has id but checking for 'id' in m is expensive // @ts-ignore DOM msg has id but checking for 'id' in m is expensive
if (m1.id !== m2.id) return m1.id - m2.id; return m1.id - m2.id;
return m1.tp - m2.tp;
} }
if (m1IsDOM && !m2IsDOM) return -1; if (m1IsDOM && !m2IsDOM) return -1;
@ -309,6 +303,17 @@ function brokenDomSorter(m1: PlayerMsg, m2: PlayerMsg) {
return 0; return 0;
} }
function sortIframes(m1, m2) {
if (m1.time === m2.time
&& [MType.CreateIFrameDocument, MType.CreateElementNode].includes(m1.tp)
&& [MType.CreateIFrameDocument, MType.CreateElementNode].includes(m2.tp)
) {
if (m1.frameID === m2.id) return 1;
if (m1.id === m2.frameID) return -1;
}
return 0;
}
/** /**
* Search for orphan nodes in session * Search for orphan nodes in session
*/ */
@ -356,4 +361,5 @@ function findBrokenNodes(nodes: any[]) {
return result; return result;
} }
// @ts-ignore
window.searchOrphans = (msgs) => findBrokenNodes(msgs.filter(m => [8,9,10,70].includes(m.tp))); window.searchOrphans = (msgs) => findBrokenNodes(msgs.filter(m => [8,9,10,70].includes(m.tp)));