From 6f25e6d6acd2a442a2cd7bf12c6e7fc3b7b93cb5 Mon Sep 17 00:00:00 2001 From: oobabooga <112222186+oobabooga@users.noreply.github.com> Date: Sun, 1 Jun 2025 11:40:41 -0700 Subject: [PATCH] Further optimize handleMorphdomUpdate a bit --- js/global_scope_js.js | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/js/global_scope_js.js b/js/global_scope_js.js index 89498814..d5140c93 100644 --- a/js/global_scope_js.js +++ b/js/global_scope_js.js @@ -230,9 +230,22 @@ function removeLastClick() { } function handleMorphdomUpdate(data) { + // Determine target element and use it as query scope + var target_element, target_html; + if (data.last_message_only) { + const childNodes = document.getElementsByClassName("messages")[0].childNodes; + target_element = childNodes[childNodes.length - 1]; + target_html = data.html; + } else { + target_element = document.getElementById("chat").parentNode; + target_html = "
" + data.html + "
"; + } + + const queryScope = target_element; + // Track open blocks const openBlocks = new Set(); - document.querySelectorAll(".thinking-block").forEach(block => { + queryScope.querySelectorAll(".thinking-block").forEach(block => { const blockId = block.getAttribute("data-block-id"); // If block exists and is open, add to open set if (blockId && block.hasAttribute("open")) { @@ -242,7 +255,7 @@ function handleMorphdomUpdate(data) { // Store scroll positions for any open blocks const scrollPositions = {}; - document.querySelectorAll(".thinking-block[open]").forEach(block => { + queryScope.querySelectorAll(".thinking-block[open]").forEach(block => { const content = block.querySelector(".thinking-content"); const blockId = block.getAttribute("data-block-id"); if (content && blockId) { @@ -254,16 +267,6 @@ function handleMorphdomUpdate(data) { } }); - var target_element, target_html; - if (data.last_message_only) { - const childNodes = document.getElementsByClassName("messages")[0].childNodes; - target_element = childNodes[childNodes.length - 1]; - target_html = data.html; - } else { - target_element = document.getElementById("chat").parentNode; - target_html = "
" + data.html + "
"; - } - morphdom( target_element, target_html, @@ -317,7 +320,7 @@ function handleMorphdomUpdate(data) { ); // Add toggle listeners for new blocks - document.querySelectorAll(".thinking-block").forEach(block => { + queryScope.querySelectorAll(".thinking-block").forEach(block => { if (!block._hasToggleListener) { block.addEventListener("toggle", function(e) { if (this.open) {