Files
zemljiska-knjiga-vticnik/popup.js
T
komelt f1a16ddec0
Publish Firefox extension / publish (push) Successful in 4m21s
feat: add initial implementation of eSodisce / GURS batch helper extension
2026-10-05 14:42:50 +02:00

76 lines
3.4 KiB
JavaScript

(() => {
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);
});
})();