correction oif a tabulation error

This commit is contained in:
2026-06-11 22:08:53 +02:00
parent 1633118d7f
commit a81a8775a5
+166 -166
View File
@@ -1113,184 +1113,184 @@
}); });
// Globale Variablen für den Scanner-Status (falls nicht schon woanders definiert) // Globale Variablen für den Scanner-Status (falls nicht schon woanders definiert)
let code4LastScanned = ''; let code4LastScanned = '';
let code4LastScannedAt = 0; let code4LastScannedAt = 0;
/**
* Schaltet das UI basierend auf dem ausgewählten Modus um
*/
function toggleScanMode() {
const mode = document.getElementById('scan_mode').value;
const rangeGroup = document.getElementById('range_generator_group');
const scanButton = document.getElementById('scan-code4-btn');
const scannerBox = document.getElementById('code4-scanner');
// Scanner stoppen, falls der Modus gewechselt wird und er noch läuft /**
if (scannerBox && scannerBox.style.display !== 'none') { * Schaltet das UI basierend auf dem ausgewählten Modus um
if (typeof killScannerHardware === 'function') killScannerHardware(); */
scannerBox.style.display = 'none'; function toggleScanMode() {
if (scanButton) scanButton.textContent = 'Barcode scannen'; const mode = document.getElementById('scan_mode').value;
} const rangeGroup = document.getElementById('range_generator_group');
const scanButton = document.getElementById('scan-code4-btn');
if (mode === 'range') { const scannerBox = document.getElementById('code4-scanner');
rangeGroup.style.display = 'block';
if(scanButton) scanButton.style.display = 'none'; // Verstecke Scanner im Range-Modus
} else {
rangeGroup.style.display = 'none';
if(scanButton) scanButton.style.display = 'inline-block';
}
}
/**
* Generiert eine Liste von Codes basierend auf den Eingaben
*/
function generateCodeRange() {
const prefix = document.getElementById('range_prefix').value.trim();
const startStr = document.getElementById('range_start').value.trim();
const endStr = document.getElementById('range_end').value.trim();
const start = parseInt(startStr, 10);
const end = parseInt(endStr, 10);
// Die Länge des End-Wertes bestimmt das Padding (die führenden Nullen)
// Beispiel: Ende = "050" -> Länge 3 -> "001", "002", etc.
const paddingLength = endStr.length;
if (isNaN(start) || isNaN(end) || start > end) {
alert("Bitte gültige Zahlen für Start und Ende eingeben. Der Startwert darf nicht größer als der Endwert sein.");
return;
}
let generatedCodes = [];
for (let i = start; i <= end; i++) {
// Nullen auffüllen
let numStr = i.toString().padStart(paddingLength, '0');
generatedCodes.push(`${prefix}${numStr}`);
}
const codeField = document.getElementById('code_4');
const individualCodesArea = document.getElementById('individual_codes');
if (generatedCodes.length > 0) {
// 1. Basis-Code setzen (falls leer oder wenn wir komplett neu generieren)
if (!codeField.value || confirm("Soll der aktuelle Basis-Code überschrieben werden?")) {
codeField.value = generatedCodes[0];
if (typeof validateCodeField === 'function') validateCodeField(codeField);
generatedCodes.shift(); // Den ersten aus dem Array entfernen, da er im Basis-Feld steht
}
// 2. Den Rest in die Textarea einfügen // Scanner stoppen, falls der Modus gewechselt wird und er noch läuft
if (scannerBox && scannerBox.style.display !== 'none') {
if (typeof killScannerHardware === 'function') killScannerHardware();
scannerBox.style.display = 'none';
if (scanButton) scanButton.textContent = 'Barcode scannen';
}
if (mode === 'range') {
rangeGroup.style.display = 'block';
if(scanButton) scanButton.style.display = 'none'; // Verstecke Scanner im Range-Modus
} else {
rangeGroup.style.display = 'none';
if(scanButton) scanButton.style.display = 'inline-block';
}
}
/**
* Generiert eine Liste von Codes basierend auf den Eingaben
*/
function generateCodeRange() {
const prefix = document.getElementById('range_prefix').value.trim();
const startStr = document.getElementById('range_start').value.trim();
const endStr = document.getElementById('range_end').value.trim();
const start = parseInt(startStr, 10);
const end = parseInt(endStr, 10);
// Die Länge des End-Wertes bestimmt das Padding (die führenden Nullen)
// Beispiel: Ende = "050" -> Länge 3 -> "001", "002", etc.
const paddingLength = endStr.length;
if (isNaN(start) || isNaN(end) || start > end) {
alert("Bitte gültige Zahlen für Start und Ende eingeben. Der Startwert darf nicht größer als der Endwert sein.");
return;
}
let generatedCodes = [];
for (let i = start; i <= end; i++) {
// Nullen auffüllen
let numStr = i.toString().padStart(paddingLength, '0');
generatedCodes.push(`${prefix}${numStr}`);
}
const codeField = document.getElementById('code_4');
const individualCodesArea = document.getElementById('individual_codes');
if (generatedCodes.length > 0) { if (generatedCodes.length > 0) {
let existing = individualCodesArea.value.trim(); // 1. Basis-Code setzen (falls leer oder wenn wir komplett neu generieren)
// Wenn schon was drin steht, machen wir einen Zeilenumbruch, sonst nicht if (!codeField.value || confirm("Soll der aktuelle Basis-Code überschrieben werden?")) {
individualCodesArea.value = existing ? existing + '\n' + generatedCodes.join('\n') : generatedCodes.join('\n'); codeField.value = generatedCodes[0];
if (typeof validateCodeField === 'function') validateCodeField(codeField);
generatedCodes.shift(); // Den ersten aus dem Array entfernen, da er im Basis-Feld steht
}
// 2. Den Rest in die Textarea einfügen
if (generatedCodes.length > 0) {
let existing = individualCodesArea.value.trim();
// Wenn schon was drin steht, machen wir einen Zeilenumbruch, sonst nicht
individualCodesArea.value = existing ? existing + '\n' + generatedCodes.join('\n') : generatedCodes.join('\n');
}
// Visuelles Feedback
alert(`Bereich erfolgreich generiert! (${end - start + 1} Codes)`);
} }
// Visuelles Feedback
alert(`Bereich erfolgreich generiert! (${end - start + 1} Codes)`);
} }
}
/**
/** * Scanner-Funktion (Single & Continuous Modus)
* Scanner-Funktion (Single & Continuous Modus) */
*/ function startCode4Scanner() {
function startCode4Scanner() { const scannerBox = document.getElementById('code4-scanner');
const scannerBox = document.getElementById('code4-scanner'); const scanButton = document.getElementById('scan-code4-btn');
const scanButton = document.getElementById('scan-code4-btn'); const codeField = document.getElementById('code_4');
const codeField = document.getElementById('code_4'); const individualCodesArea = document.getElementById('individual_codes');
const individualCodesArea = document.getElementById('individual_codes'); const scanMode = document.getElementById('scan_mode').value;
const scanMode = document.getElementById('scan_mode').value;
if (!scannerBox || !scanButton || !codeField) return;
if (!scannerBox || !scanButton || !codeField) return;
// Beende evtl. laufenden ISBN Scanner
// Beende evtl. laufenden ISBN Scanner const isbnScannerBox = document.getElementById('isbn-scanner');
const isbnScannerBox = document.getElementById('isbn-scanner'); if (isbnScannerBox && isbnScannerBox.style.display !== 'none') {
if (isbnScannerBox && isbnScannerBox.style.display !== 'none') { if (typeof killScannerHardware === 'function') killScannerHardware();
if (typeof killScannerHardware === 'function') killScannerHardware(); isbnScannerBox.style.display = 'none';
isbnScannerBox.style.display = 'none'; const isbnScanButton = document.getElementById('scan-isbn-btn');
const isbnScanButton = document.getElementById('scan-isbn-btn'); if (isbnScanButton) isbnScanButton.textContent = 'ISBN scannen';
if (isbnScanButton) isbnScanButton.textContent = 'ISBN scannen'; if (typeof setIsbnScanStatus === 'function') setIsbnScanStatus('Scanner gestoppt.');
if (typeof setIsbnScanStatus === 'function') setIsbnScanStatus('Scanner gestoppt.'); }
}
// Scanner ausschalten, wenn er bereits läuft
// Scanner ausschalten, wenn er bereits läuft if (scannerBox.style.display !== 'none') {
if (scannerBox.style.display !== 'none') { if (typeof killScannerHardware === 'function') killScannerHardware();
if (typeof killScannerHardware === 'function') killScannerHardware(); scannerBox.style.display = 'none';
scannerBox.style.display = 'none'; scanButton.textContent = 'Barcode scannen';
scanButton.textContent = 'Barcode scannen'; if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus('Scanner gestoppt.');
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus('Scanner gestoppt.'); return;
return; }
}
// Scanner starten
// Scanner starten scannerBox.style.display = 'block';
scannerBox.style.display = 'block'; scanButton.textContent = scanMode === 'continuous' ? 'Fortlaufenden Scan stoppen' : 'Scanner stoppen';
scanButton.textContent = scanMode === 'continuous' ? 'Fortlaufenden Scan stoppen' : 'Scanner stoppen'; if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus('Scanner initialisiert. Richte die Kamera auf den Barcode...');
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus('Scanner initialisiert. Richte die Kamera auf den Barcode...');
if (typeof runEngineInitialization === 'function') {
if (typeof runEngineInitialization === 'function') { runEngineInitialization(
runEngineInitialization( '#code4-scanner',
'#code4-scanner', function(decodedText) {
function(decodedText) { const now = Date.now();
const now = Date.now(); // Verhindere Doppel-Scans desselben Codes innerhalb von 1.5 Sekunden
// Verhindere Doppel-Scans desselben Codes innerhalb von 1.5 Sekunden if (decodedText === code4LastScanned && (now - code4LastScannedAt) < 1500) {
if (decodedText === code4LastScanned && (now - code4LastScannedAt) < 1500) { return;
return; }
} code4LastScanned = decodedText;
code4LastScanned = decodedText; code4LastScannedAt = now;
code4LastScannedAt = now;
if (scanMode === 'single') {
if (scanMode === 'single') { // VERHALTEN: Einzel-Scan
// VERHALTEN: Einzel-Scan if (typeof killScannerHardware === 'function') killScannerHardware();
if (typeof killScannerHardware === 'function') killScannerHardware(); scannerBox.style.display = 'none';
scannerBox.style.display = 'none'; scanButton.textContent = 'Barcode scannen';
scanButton.textContent = 'Barcode scannen';
codeField.value = decodedText;
if (typeof validateCodeField === 'function') validateCodeField(codeField);
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Code gesetzt: ${decodedText}`);
} else if (scanMode === 'continuous') {
// VERHALTEN: Fortlaufender Scan
let currentAreaCodes = individualCodesArea.value.split('\n').map(c => c.trim()).filter(c => c !== '');
if (!codeField.value) {
// Basis-Code setzen, falls noch leer
codeField.value = decodedText; codeField.value = decodedText;
if (typeof validateCodeField === 'function') validateCodeField(codeField); if (typeof validateCodeField === 'function') validateCodeField(codeField);
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Basis-Code gesetzt: ${decodedText}`); if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Code gesetzt: ${decodedText}`);
} else if (!currentAreaCodes.includes(decodedText) && codeField.value !== decodedText) {
// In Textarea anhängen, falls Code noch nicht existiert
individualCodesArea.value += (individualCodesArea.value ? '\n' : '') + decodedText;
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Zusatz-Code erfasst: ${decodedText}`);
// Audio-Feedback für kontinuierliches Scannen (optional, aber sehr hilfreich) } else if (scanMode === 'continuous') {
try { // VERHALTEN: Fortlaufender Scan
const audioCtx = new (window.AudioContext || window.webkitAudioContext)(); let currentAreaCodes = individualCodesArea.value.split('\n').map(c => c.trim()).filter(c => c !== '');
const oscillator = audioCtx.createOscillator();
const gainNode = audioCtx.createGain(); if (!codeField.value) {
oscillator.connect(gainNode); // Basis-Code setzen, falls noch leer
gainNode.connect(audioCtx.destination); codeField.value = decodedText;
oscillator.type = 'sine'; if (typeof validateCodeField === 'function') validateCodeField(codeField);
oscillator.frequency.value = 800; // Hoher Beep if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Basis-Code gesetzt: ${decodedText}`);
gainNode.gain.setValueAtTime(0.1, audioCtx.currentTime); } else if (!currentAreaCodes.includes(decodedText) && codeField.value !== decodedText) {
oscillator.start(); // In Textarea anhängen, falls Code noch nicht existiert
oscillator.stop(audioCtx.currentTime + 0.1); individualCodesArea.value += (individualCodesArea.value ? '\n' : '') + decodedText;
} catch (e) { if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Zusatz-Code erfasst: ${decodedText}`);
console.log("Audio feedback not supported");
// Audio-Feedback für kontinuierliches Scannen (optional, aber sehr hilfreich)
try {
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const oscillator = audioCtx.createOscillator();
const gainNode = audioCtx.createGain();
oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);
oscillator.type = 'sine';
oscillator.frequency.value = 800; // Hoher Beep
gainNode.gain.setValueAtTime(0.1, audioCtx.currentTime);
oscillator.start();
oscillator.stop(audioCtx.currentTime + 0.1);
} catch (e) {
console.log("Audio feedback not supported");
}
} else {
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Code ${decodedText} wurde bereits gescannt.`);
} }
} else {
if (typeof setCode4ScanStatus === 'function') setCode4ScanStatus(`Code ${decodedText} wurde bereits gescannt.`);
} }
} },
}, 'Scanner läuft. Richte die Kamera auf den Barcode.',
'Scanner läuft. Richte die Kamera auf den Barcode.', setCode4ScanStatus
setCode4ScanStatus );
); } else {
} else { console.error("runEngineInitialization is not defined. Ensure your scanner script is loaded.");
console.error("runEngineInitialization is not defined. Ensure your scanner script is loaded."); }
} }
}
function startIsbnScanner() { function startIsbnScanner() {
if (!libraryModuleEnabled) { if (!libraryModuleEnabled) {
setIsbnScanStatus('Bibliotheks-Modul ist deaktiviert.', true); setIsbnScanStatus('Bibliotheks-Modul ist deaktiviert.', true);