feat: add initial implementation of eSodisce / GURS batch helper extension
Publish Firefox extension / publish (push) Successful in 4m21s
Publish Firefox extension / publish (push) Successful in 4m21s
This commit is contained in:
1 parent
902cf5d813
commit
f1a16ddec0
10 files changed
+769
-1
No files matched your search
@@ -0,0 +1,75 @@
|
||||
(() => {
|
||||
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);
|
||||
});
|
||||
})();
|
||||
Reference in new issue
Block a user