document.addEventListener("DOMContentLoaded", function () { // Get UI elements const addTrustedBtn = document.getElementById("addTrustedDomain"); const addBlockedBtn = document.getElementById("addBlockedDomain"); const domainModal = document.getElementById("domainModal"); const modalTitle = document.getElementById("modalTitle"); const domainNameInput = document.getElementById("domainName"); const domainTypeSelect = document.getElementById("domainType"); const saveDomainBtn = document.getElementById("saveDomain"); const cancelDomainBtn = document.getElementById("cancelDomain"); const trustedSearch = document.getElementById("trustedSearch"); const blockedSearch = document.getElementById("blockedSearch"); const trustedDomainsList = document.getElementById("trustedDomainsList"); const blockedDomainsList = document.getElementById("blockedDomainsList"); const statusMessage = document.getElementById("statusMessage"); let currentDomainType = 'trusted'; let editingDomain = null; // Load saved domains loadDomains(); // Add domain buttons if (addTrustedBtn) { addTrustedBtn.addEventListener("click", () => openAddModal('trusted')); } if (addBlockedBtn) { addBlockedBtn.addEventListener("click", () => openAddModal('blocked')); } // Modal buttons if (saveDomainBtn) { saveDomainBtn.addEventListener("click", saveDomain); } if (cancelDomainBtn) { cancelDomainBtn.addEventListener("click", closeModal); } // Search functionality if (trustedSearch) { trustedSearch.addEventListener("input", (e) => filterDomains('trusted', e.target.value)); } if (blockedSearch) { blockedSearch.addEventListener("input", (e) => filterDomains('blocked', e.target.value)); } // Functions function loadDomains() { chrome.storage.local.get(["trustedDomains", "blockedDomains"], function (data) { renderDomainList('trusted', data.trustedDomains || []); renderDomainList('blocked', data.blockedDomains || []); }); } function renderDomainList(type, domains) { const list = type === 'trusted' ? trustedDomainsList : blockedDomainsList; if (!list) return; list.innerHTML = ''; domains.forEach(domain => { const item = createDomainItem(domain, type); list.appendChild(item); }); } function createDomainItem(domain, type) { const div = document.createElement('div'); div.className = 'domain-item'; div.innerHTML = `
${domain} ${type}
`; return div; } function openAddModal(type) { currentDomainType = type; editingDomain = null; modalTitle.textContent = `Add ${type === 'trusted' ? 'Trusted' : 'Blocked'} Domain`; domainNameInput.value = ''; domainTypeSelect.value = type; domainModal.classList.add('active'); } function closeModal() { domainModal.classList.remove('active'); editingDomain = null; } function saveDomain() { const domain = domainNameInput.value.trim(); if (!domain) { showStatus('Please enter a domain name', 'error'); return; } chrome.storage.local.get(["trustedDomains", "blockedDomains"], function (data) { const trustedDomains = data.trustedDomains || []; const blockedDomains = data.blockedDomains || []; const type = domainTypeSelect.value; // Remove from both lists if editing if (editingDomain) { const oldType = currentDomainType; if (oldType === 'trusted') { const index = trustedDomains.indexOf(editingDomain); if (index > -1) trustedDomains.splice(index, 1); } else { const index = blockedDomains.indexOf(editingDomain); if (index > -1) blockedDomains.splice(index, 1); } } // Add to appropriate list if (type === 'trusted' && !trustedDomains.includes(domain)) { trustedDomains.push(domain); } else if (type === 'blocked' && !blockedDomains.includes(domain)) { blockedDomains.push(domain); } // Save to storage chrome.storage.local.set({ trustedDomains: trustedDomains, blockedDomains: blockedDomains }, function () { loadDomains(); closeModal(); showStatus(`Domain ${editingDomain ? 'updated' : 'added'} successfully`, 'success'); }); }); } function editDomain(domain, type) { currentDomainType = type; editingDomain = domain; modalTitle.textContent = `Edit ${type === 'trusted' ? 'Trusted' : 'Blocked'} Domain`; domainNameInput.value = domain; domainTypeSelect.value = type; domainModal.classList.add('active'); } function removeDomain(domain, type) { if (confirm(`Are you sure you want to remove ${domain}?`)) { chrome.storage.local.get(["trustedDomains", "blockedDomains"], function (data) { const trustedDomains = data.trustedDomains || []; const blockedDomains = data.blockedDomains || []; if (type === 'trusted') { const index = trustedDomains.indexOf(domain); if (index > -1) trustedDomains.splice(index, 1); } else { const index = blockedDomains.indexOf(domain); if (index > -1) blockedDomains.splice(index, 1); } chrome.storage.local.set({ trustedDomains: trustedDomains, blockedDomains: blockedDomains }, function () { loadDomains(); showStatus('Domain removed successfully', 'success'); }); }); } } function filterDomains(type, searchTerm) { const list = type === 'trusted' ? trustedDomainsList : blockedDomainsList; if (!list) return; const items = list.getElementsByClassName('domain-item'); searchTerm = searchTerm.toLowerCase(); Array.from(items).forEach(item => { const domainName = item.querySelector('.domain-name').textContent.toLowerCase(); item.style.display = domainName.includes(searchTerm) ? '' : 'none'; }); } function showStatus(message, type) { statusMessage.textContent = message; statusMessage.className = `status-message ${type}`; statusMessage.style.display = 'block'; setTimeout(() => { statusMessage.style.display = 'none'; }, 3000); } // Make functions available globally for onclick handlers window.editDomain = editDomain; window.removeDomain = removeDomain; });