(() => { const inputFile = document.querySelector('#inputFile'); const fileInfo = document.querySelector('#fileInfo'); const startButton = document.querySelector('#startButton'); const stopButton = document.querySelector('#stopButton'); const delayInput = document.querySelector('#delayMs'); const status = document.querySelector('#status'); let records = []; function updateLoadedFile(fileName) { fileInfo.textContent = `${fileName}: ${records.length} veljavnih zapisov`; startButton.disabled = records.length === 0; } function setStatus(text) { status.textContent = text; } function parseLine(line) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith('#')) return null; // Prefer tab, then semicolon, then comma; exactly two fields are required. const separator = trimmed.includes('\t') ? '\t' : (trimmed.includes(';') ? ';' : ','); const fields = trimmed.split(separator).map((field) => field.trim().replace(/^"|"$/g, '')); if (fields.length !== 2 || !fields[0] || !fields[1]) return null; const header = `${fields[0]} ${fields[1]}`.toLocaleLowerCase('sl'); if (header.includes('katastr') && header.includes('parcel')) return null; if (!/^\d+$/.test(fields[0]) || /^0+$/.test(fields[0])) return null; return { koNumber: fields[0], parcel: fields[1] }; } inputFile.addEventListener('change', async () => { const file = inputFile.files?.[0]; if (!file) return; const lines = (await file.text()).split(/\r?\n/); records = lines.map(parseLine).filter(Boolean); await browser.storage.local.set({ batchInput: { fileName: file.name, records } }); updateLoadedFile(file.name); setStatus(records.length ? 'Pripravljeno za trenutni zavihek.' : 'Ni veljavnih zapisov.'); }); browser.storage.local.get('batchInput').then(({ batchInput }) => { if (!batchInput || !Array.isArray(batchInput.records) || !batchInput.records.length) return; records = batchInput.records; updateLoadedFile(batchInput.fileName || 'Shranjena vhodna datoteka'); setStatus('Naložena je zadnja izbrana vhodna datoteka.'); }); startButton.addEventListener('click', async () => { if (!records.length) return; const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); if (!tab?.id) { setStatus('Ciljnega zavihka ni mogoče najti.'); return; } const confirmMode = document.querySelector('input[name="confirmMode"]:checked').value; const delayMs = Math.max(500, Number.parseInt(delayInput.value, 10) || 1500); try { const response = await browser.tabs.sendMessage(tab.id, { type: 'START_BATCH', records, confirmMode, delayMs }); setStatus(response?.message || 'Obdelava zagnana.'); } catch (error) { setStatus(`Napaka: odprite ciljno stran in poskusite znova. ${error.message}`); } }); stopButton.addEventListener('click', async () => { const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); if (!tab?.id) { setStatus('Ciljnega zavihka ni mogoče najti.'); return; } try { const response = await browser.tabs.sendMessage(tab.id, { type: 'STOP_BATCH' }); setStatus(response?.message || 'Zahteva za ustavitev poslana.'); } catch (error) { setStatus(`Napaka: odprite ciljno stran in poskusite znova. ${error.message}`); } }); browser.runtime.onMessage.addListener((message) => { if (message.type === 'BATCH_STATUS') setStatus(message.text); }); })();