correction oif a tabulation error
This commit is contained in:
+166
-166
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user