k96beni commited on
Commit
d89236a
·
verified ·
1 Parent(s): a1352f4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +90 -3
app.py CHANGED
@@ -1006,18 +1006,105 @@ with gr.Blocks(css=custom_css, title="ChargeNode Kundtjänst") as app:
1006
 
1007
  # Lägg till anpassad JavaScript för att styra scrollning
1008
  js_code = """
 
1009
  function scrollToLatestBotMessage() {
1010
- const latestBotMessage = document.querySelector('.gradio-container .message.bot:last-child');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1011
  if (latestBotMessage) {
 
 
1012
  // Scrolla så att det senaste botmeddelandet är synligt i toppen av chattrutan
1013
- latestBotMessage.scrollIntoView({block: 'start', behavior: 'smooth'});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1014
  }
1015
  }
1016
 
1017
  // Kör funktionen när nya meddelanden läggs till
1018
  document.addEventListener('DOMNodeInserted', function(event) {
1019
- if (event.target.classList && event.target.classList.contains('bot')) {
 
 
 
 
 
 
 
1020
  setTimeout(scrollToLatestBotMessage, 100);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1021
  }
1022
  });
1023
  """
 
1006
 
1007
  # Lägg till anpassad JavaScript för att styra scrollning
1008
  js_code = """
1009
+ // Mer robust funktion för att scrolla till senaste botmeddelandet
1010
  function scrollToLatestBotMessage() {
1011
+ console.log("Försöker scrolla till senaste botmeddelandet");
1012
+
1013
+ // Försök hitta det senaste botmeddelandet med olika selektorer (för kompatibilitet med Hugging Face)
1014
+ let latestBotMessage = document.querySelector('.gradio-container .message.bot:last-child');
1015
+
1016
+ // Alternativ selektor för Hugging Face
1017
+ if (!latestBotMessage) {
1018
+ latestBotMessage = document.querySelector('.gradio-container [data-testid="bot"]:last-child');
1019
+ }
1020
+
1021
+ // Ytterligare alternativ selektor
1022
+ if (!latestBotMessage) {
1023
+ latestBotMessage = document.querySelector('.gradio-container .message:last-child');
1024
+ }
1025
+
1026
  if (latestBotMessage) {
1027
+ console.log("Hittade senaste botmeddelandet, scrollar till det");
1028
+
1029
  // Scrolla så att det senaste botmeddelandet är synligt i toppen av chattrutan
1030
+ try {
1031
+ latestBotMessage.scrollIntoView({block: 'start', behavior: 'smooth'});
1032
+ console.log("scrollIntoView utförd");
1033
+ } catch (e) {
1034
+ console.error("Fel vid scrollning:", e);
1035
+
1036
+ // Fallback: Använd manuell scrollning om scrollIntoView misslyckas
1037
+ try {
1038
+ const chatContainer = latestBotMessage.closest('.chat');
1039
+ if (chatContainer) {
1040
+ const topPos = latestBotMessage.offsetTop;
1041
+ chatContainer.scrollTop = topPos;
1042
+ console.log("Manuell scrollning utförd");
1043
+ }
1044
+ } catch (e2) {
1045
+ console.error("Fallback-scrollning misslyckades:", e2);
1046
+ }
1047
+ }
1048
+ } else {
1049
+ console.log("Kunde inte hitta senaste botmeddelandet");
1050
  }
1051
  }
1052
 
1053
  // Kör funktionen när nya meddelanden läggs till
1054
  document.addEventListener('DOMNodeInserted', function(event) {
1055
+ // Kontrollera om det infogade elementet är ett botmeddelande
1056
+ if (event.target.classList &&
1057
+ (event.target.classList.contains('bot') ||
1058
+ event.target.getAttribute('data-testid') === 'bot')) {
1059
+
1060
+ console.log("Bot-meddelande detekterat, schemalägg scrollning");
1061
+
1062
+ // Använd flera timeouts med olika fördröjningar för att säkerställa att scrollningen fungerar
1063
  setTimeout(scrollToLatestBotMessage, 100);
1064
+ setTimeout(scrollToLatestBotMessage, 300);
1065
+ setTimeout(scrollToLatestBotMessage, 500);
1066
+ }
1067
+ });
1068
+
1069
+ // Lägg även till en MutationObserver som ett alternativt sätt att upptäcka nya meddelanden
1070
+ document.addEventListener('DOMContentLoaded', function() {
1071
+ console.log("DOM laddad, sätter upp MutationObserver");
1072
+
1073
+ // Hitta chatcontainern
1074
+ const chatContainer = document.querySelector('.gradio-container');
1075
+
1076
+ if (chatContainer) {
1077
+ // Skapa en observer som övervakar ändringar i DOM
1078
+ const observer = new MutationObserver(function(mutations) {
1079
+ let shouldScroll = false;
1080
+
1081
+ mutations.forEach(function(mutation) {
1082
+ // Kontrollera om nya noder har lagts till
1083
+ if (mutation.addedNodes.length) {
1084
+ mutation.addedNodes.forEach(function(node) {
1085
+ // Kontrollera om den tillagda noden är ett botmeddelande
1086
+ if (node.classList &&
1087
+ (node.classList.contains('bot') ||
1088
+ node.getAttribute('data-testid') === 'bot')) {
1089
+ shouldScroll = true;
1090
+ }
1091
+ });
1092
+ }
1093
+ });
1094
+
1095
+ if (shouldScroll) {
1096
+ console.log("MutationObserver detekterade nytt botmeddelande");
1097
+ setTimeout(scrollToLatestBotMessage, 200);
1098
+ }
1099
+ });
1100
+
1101
+ // Starta övervakning av hela chatcontainern för ändringar i DOM
1102
+ observer.observe(chatContainer, {
1103
+ childList: true,
1104
+ subtree: true
1105
+ });
1106
+
1107
+ console.log("MutationObserver startad");
1108
  }
1109
  });
1110
  """