76 lines
3.4 KiB
JavaScript
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);
|
|
});
|
|
})();
|