In meiner Svelte -Komponente zeige ich Zeilennummern für jede Zeile im Textbereich. Ich habe die Bildlaufnummer deaktiviert. Und manuell synchronisieren Zeilennummernbehälter, wenn ich auf den Textbereich scrolle. Überlauf-y: Hidden; auf #Zeilenzahlen Spielen Sie in diesem Fall eine entscheidende Rolle. Dies funktioniert gut, wenn ich Überlauf hinzufüge: sichtbar; zu #Zeilenzahlen , aber dann ist das Scrollen nicht synchron Beschreibung hier "src =" https://i.static.net/gsx7m3bq.png "/>
Hier ist der Code von Sveltle Komponente < /p>
In meiner Svelte -Komponente zeige ich Zeilennummern für jede Zeile im Textbereich. Ich habe die Bildlaufnummer deaktiviert. Und manuell synchronisieren Zeilennummernbehälter, wenn ich auf den Textbereich scrolle. Überlauf-y: Hidden; auf #Zeilenzahlen Spielen Sie in diesem Fall eine entscheidende Rolle. Dies funktioniert gut, wenn ich Überlauf hinzufüge: sichtbar; zu #Zeilenzahlen , aber dann ist das Scrollen nicht synchron Beschreibung hier "src =" https://i.static.net/gsx7m3bq.png "/> Hier ist der Code von Sveltle Komponente < /p> [code] import { getSelectedLines } from './selection.js'; import { handleEditing } from './text-editor.js'; import { onMount, afterUpdate } from 'svelte'; import './TextArea.css';
// Props export let text = ''; // The text content of the textarea export let placeholder = ''; // Optional placeholder text export let disabled = false; // Whether the textarea is disabled export let stepsExecutionTimes = []; // Execution time data export let mode = "editor"; // editor, monitor
let previousText = ''; // Track previous text for change detection let lineNumbers = []; // Array to hold line numbers let highlightedLines = []; // Array to hold highlighted lines let collapsedLines = new Set(); // Set to hold collapsed lines let lineNumbersContainer; // Reference to the line numbers container let textarea; // Reference to the textarea element let highlightedTextContainer; // Reference to the highlighted text container
// Emit text change events function emitTextChange(newText) { dispatch('textChange', { text: newText }); }
// Emit line selection events function emitLineSelection(selectedLines) { dispatch('lineSelection', { selectedLines }); }
// Handle key down events for text editing and highlighting function handleKeyDown(event) { //.. }
// Highlight the current step node based on the selected lines function highlightCurrentStepNode(event) { const selectedLines = getSelectedLines(event.target, event.key, event.shiftKey); emitLineSelection(selectedLines); // Emit selected lines highlightedLines = selectedLines.nodeIds; }
// Handle key up events to detect text changes function handleKeyUp(event) { //.. }
// Handle click events to highlight the current step function handleClick(event) { //.. }
// Update line numbers based on the text content function updateLineNumbers() { const lines = text.split('\n'); let lineCount = 0; lineNumbers = lines.map((line, index) => { const trimmedLine = line.trim(); //TODO: exclude header lines if (trimmedLine.startsWith("FLOW:")) { lineCount = -1; // Reset line count for new FLOW return null; // No line number for FLOW line } else if (trimmedLine.length === 0) { return null; // No line number for empty lines } else { lineCount++; let className = ""; const exeTime = $stepsExecutionTimes.find(et => et.id === lineCount);
function handleToggleDebug() { dispatch('toggleDebug'); }
// Handle logs button click function handleShowLogs() { dispatch('showLogs'); }
// Sync scrolling between textarea and line numbers function syncScroll(event) { const {scrollTop,scrollLeft} = event.target; lineNumbersContainer.scrollTop = scrollTop; highlightedTextContainer.scrollTop = scrollTop; highlightedTextContainer.scrollLeft = scrollLeft; if(highlightedTextContainer.scrollTop !== scrollTop){ event.target.scrollTop = highlightedTextContainer.scrollTop; lineNumbersContainer.scrollTop = highlightedTextContainer.scrollTop; } // event.preventDefault(); }
// Prevent scrolling on line numbers function preventLineNumberScroll(event) { if (lineNumbersContainer) { lineNumbersContainer.scrollTop = event.target.scrollTop; } }
// Update the highlighted text container function updateHighlightedText() { if (highlightedTextContainer) { highlightedTextContainer.innerHTML = highlightKeywords(text); } }
$: { //Text is not being displayed on load without this code until user click on text area if (text !== previousText) { updateLineNumbers(); updateHighlightedText(); } }
// Initialize line numbers on mount onMount(() => { updateLineNumbers(); updateHighlightedText(); });
// Update line numbers after the component updates (e.g., when switching flows) afterUpdate(() => { updateLineNumbers(); updateHighlightedText(); });
{#each lineNumbers as line, index} {#if line !== null}
{line.lineNumber}
Min: {line.exeTime?.minExeTime || 0} ms Avg: {line.exeTime?.avgExeTime || 0} ms Max: {line.exeTime?.maxExeTime || 0} ms
#line-numbers > div { position: relative; /* Ensure panels are positioned relative to the line number */ padding-right: 10px; /* Add space for the panel */ }
/* Panel */ .panel { position: absolute; top: 0; left: 100%; /* Position to the right of the line number */ background-color: white; border: 1px solid #ccc; padding: 10px; border-radius: 4px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); z-index: 3; /* Ensure panel is above other elements */ pointer-events: none; /* Allow interactions with the panel */ opacity: 0; /* Hidden by default */ transition: opacity 0.2s ease-in-out; min-width: 80px; white-space: nowrap; /* Prevent line breaks */ }
/* Show panel on hover */ #line-numbers > div:hover .panel { opacity: 1; /* Visible when hovered */ pointer-events: auto; }
Ich habe ein Setup, bei dem ich zwei Server habe, von denen jeder seinen eigenen lokalen Cache für eine Karte verwaltet. Bei der Initialisierung wird die Karte zwischengespeichert und jedes Mal, wenn...
Ich habe eine Frage zur Effizienz der CPU-Nutzung in Docker-Umgebungen für monolithische Anwendungen im Vergleich zu auf Mikrodiensten basierenden Designs. Konkret:
Würde die Ausführung mehrerer...
Ich habe eine Frage zur Effizienz der CPU-Nutzung in Docker-Umgebungen für monolithische Anwendungen im Vergleich zu auf Mikrodiensten basierenden Designs. Konkret:
Würde die Ausführung mehrerer...
Ich habe eine Klasse, die std::vector anpasst, um einen Container mit domänenspezifischen Objekten zu modellieren. Ich möchte dem Benutzer den größten Teil der std::vector-API zugänglich machen,...
Ich habe eine animierte SafeAreaView mit zwei Schaltflächen darin, die Ansicht hat Position: absolut .
Wenn ich auf klicke button it durchläuft es und trifft auf die Elemente hinter de button.
Ich...