MediaWiki:Gadget-LabelScan.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 152: | Zeile 152: | ||
} else { | } else { | ||
bind(); | bind(); | ||
// ----- Helpers: Status/Preview/Datei ----- | |||
let _pickedFile = null; | |||
function setStatus(t){ const el=document.getElementById('ados-scan-status'); if(el) el.textContent=t||''; } | |||
function showPreview(file){ | |||
const prev=document.getElementById('ados-scan-preview'); | |||
if(!prev) return; | |||
const url=URL.createObjectURL(file); | |||
prev.innerHTML = `<img src="${url}" alt="Vorschau" style="max-width:100%; border-radius:6px;">`; | |||
setStatus('Bild bereit.'); | |||
} | |||
function getSelectedFile(){ | |||
const c=document.getElementById('ados-scan-file-camera'); | |||
const g=document.getElementById('ados-scan-file-gallery'); | |||
return _pickedFile || (c && c.files && c.files[0]) || (g && g.files && g.files[0]) || null; | |||
} | |||
// ----- Buttons sauber binden ----- | |||
(function wirePickers(){ | |||
const btnCam = document.getElementById('ados-scan-btn-camera'); | |||
const btnGal = document.getElementById('ados-scan-btn-gallery'); | |||
const inCam = document.getElementById('ados-scan-file-camera'); | |||
const inGal = document.getElementById('ados-scan-file-gallery'); | |||
if (btnCam && inCam) { | |||
btnCam.addEventListener('click', function(ev){ | |||
ev.preventDefault(); ev.stopPropagation(); | |||
inCam.click(); | |||
}); | |||
inCam.addEventListener('change', function(){ | |||
if (inCam.files && inCam.files[0]) { | |||
_pickedFile = inCam.files[0]; | |||
showPreview(_pickedFile); | |||
} | |||
}); | |||
} | |||
if (btnGal && inGal) { | |||
btnGal.addEventListener('click', function(ev){ | |||
ev.preventDefault(); ev.stopPropagation(); | |||
inGal.click(); | |||
}); | |||
inGal.addEventListener('change', function(){ | |||
if (inGal.files && inGal.files[0]) { | |||
_pickedFile = inGal.files[0]; | |||
showPreview(_pickedFile); | |||
} | |||
}); | |||
} | |||
})(); | |||
// ----- Drag&Drop auf der Dropzone ----- | |||
(function wireDropzone(){ | |||
const drop = document.getElementById('ados-scan-drop'); | |||
if (!drop) return; | |||
const stop = e => { e.preventDefault(); e.stopPropagation(); }; | |||
['dragenter','dragover','dragleave','drop'].forEach(evt => drop.addEventListener(evt, stop)); | |||
drop.addEventListener('drop', e => { | |||
const f = e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files[0]; | |||
if (f) { _pickedFile = f; showPreview(f); } | |||
}); | |||
})(); | |||
// ----- „Erkennen & suchen“ nutzt immer die aktuell gewählte Datei ----- | |||
(function wireRun(){ | |||
const runBtn = document.getElementById('ados-scan-run'); | |||
if (!runBtn) return; | |||
runBtn.addEventListener('click', async function(ev){ | |||
ev.preventDefault(); | |||
const file = getSelectedFile(); | |||
if (!file) { alert('Bitte Foto aufnehmen oder Datei wählen.'); return; } | |||
// HIER: dein bestehender Erkennungs-Workflow (phash / Vergleich) | |||
// Beispiel: | |||
// setStatus('Berechne Fingerabdruck …'); const img = await fileToImage(file); | |||
// const hash = computePhash(img); … vergleichen … renderResults(…) | |||
}); | |||
})(); | |||
} | } | ||
})(); | })(); | ||