Der Auftraggeber hatte Funktion 2 ausdruecklich auf QR beschraenkt, obwohl die 2D-Codes auf seinen RAM-Etiketten DataMatrix sind. Am Geraet zeigte sich, dass die Funktion auf seiner Ware nichts fand - er hat die Entscheidung revidiert. Funktion 2 liest jetzt zusaetzlich zu QRCode/MicroQRCode/RMQRCode auch DataMatrix, Aztec und PDF417 und heisst in der Oberflaeche "2D-Code" statt "QR-Code". Die Kennung bleibt aus historischen Gruenden `qrcode`. Veralteten Kommentar in scan-modes.js berichtigt, Test auf die neue Codeliste/Beschriftung umgestellt (statt geloescht) und einen Test ergaenzt, der paarweise verschiedene Kennungen/Beschriftungen der drei Funktionen erzwingt. README-Funktionstabelle und Geraete-Checkliste entsprechend angepasst. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
73 lines
2.8 KiB
JavaScript
73 lines
2.8 KiB
JavaScript
// Die drei Scan-Funktionen, die der Nutzer vor dem Scannen waehlt. Reines
|
|
// Modul ohne Browser-Zugriff (kein window/document/navigator) - einzige
|
|
// Quelle fuer Kennung, Beschriftung, Codearten und Verhalten je Funktion.
|
|
// Sowohl die Auswahl-Oberflaeche als auch main.js lesen ausschliesslich von
|
|
// hier - es darf keine zweite Stelle geben, an der Codearten oder
|
|
// Beschriftungen stehen.
|
|
//
|
|
// Funktion 2 ("2D-Code") deckt die praktisch vorkommenden zweidimensionalen
|
|
// Codearten ab: die QR-Varianten (QRCode, MicroQRCode, RMQRCode) sowie
|
|
// DataMatrix, Aztec und PDF417. Grund: Die 2D-Codes auf den eigenen
|
|
// RAM-Etiketten sind DataMatrix, nicht QR - eine auf QR beschraenkte Funktion
|
|
// faende auf dieser Ware nichts. Die Kennung heisst weiterhin `qrcode`, siehe
|
|
// Kommentar dort.
|
|
|
|
/**
|
|
* @typedef {object} ScanMode
|
|
* @property {string} id Kennung, intern verwendet (main.js, Speicherung der Wahl).
|
|
* @property {string} label Deutsche Beschriftung fuer die Oberflaeche.
|
|
* @property {string[]} barcodeFormats An decodeBarcodes() zu uebergebende
|
|
* Codearten (zxing-wasm-Formatnamen). Leer, wenn die Funktion keine
|
|
* Barcode-Dekodierung nutzt.
|
|
* @property {boolean} continuousSearch Ob waehrend die Kamera laeuft
|
|
* fortwaehrend nach Codes gesucht wird (statt nur auf Knopfdruck).
|
|
* @property {boolean} useOcr Ob die Texterkennung (Tesseract) genutzt wird.
|
|
*/
|
|
|
|
/** @type {ScanMode[]} */
|
|
export const SCAN_MODES = [
|
|
{
|
|
id: 'barcode',
|
|
label: 'Strichcode',
|
|
// Eindimensionale Codes, wie sie auf Teilenummern-Etiketten vorkommen.
|
|
barcodeFormats: ['Code128', 'Code39', 'Code93', 'ITF', 'EAN13', 'EAN8', 'UPCA', 'UPCE', 'Codabar'],
|
|
continuousSearch: true,
|
|
useOcr: false,
|
|
},
|
|
{
|
|
// Kennung bleibt aus historischen Gruenden `qrcode`, obwohl die Funktion
|
|
// inzwischen alle 2D-Codearten liest (nicht mehr nur QR) - Umbenennung
|
|
// nicht vorgenommen, da `qrcode` an mehreren Stellen durchgereicht wird.
|
|
id: 'qrcode',
|
|
label: '2D-Code',
|
|
// QR-Varianten plus DataMatrix, Aztec, PDF417 - siehe Kommentar am Kopf.
|
|
barcodeFormats: ['QRCode', 'MicroQRCode', 'RMQRCode', 'DataMatrix', 'Aztec', 'PDF417'],
|
|
continuousSearch: true,
|
|
useOcr: false,
|
|
},
|
|
{
|
|
id: 'ocr',
|
|
label: 'Text erkennen',
|
|
// Keine Codes - allein die Texterkennung, auf Knopfdruck.
|
|
barcodeFormats: [],
|
|
continuousSearch: false,
|
|
useOcr: true,
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Liefert die Funktion zu einer Kennung.
|
|
* @param {string} id
|
|
* @returns {ScanMode}
|
|
* @throws {Error} wenn die Kennung keiner der drei Funktionen entspricht -
|
|
* ein Programmfehler (main.js darf nie eine fremde Kennung durchreichen),
|
|
* kein regulaerer Ausgang.
|
|
*/
|
|
export function getScanMode(id) {
|
|
const mode = SCAN_MODES.find((candidate) => candidate.id === id);
|
|
if (!mode) {
|
|
throw new Error(`Unbekannte Scan-Funktion: ${id}`);
|
|
}
|
|
return mode;
|
|
}
|