CI / Build & Test (push) Failing after 28s
Split monolithic dashboard.js (2753 lines) into 18 focused modules
under dashboard/{core,data,ui,pages}/ with refresh.js and events.js
as orchestrators. Extracted ~900-line inline <style> into dashboard.css
and moved dashboard.html to dashboard/dashboard.html.
Split background.js (609 lines) into background/{logs,state,proxy,
native-messaging,tab-lifecycle,message-router}.js with a thin entry
point using importScripts().
Deleted dead files: wrong-domain.js (duplicate of inline script).
Updated manifest.json web_accessible_resources for new paths.
Updated docs/ARCHITECTURE.md to reflect the new file structure.
No functionality changed. No build step introduced.
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
// Depends on: core/utils.js ($), core/navigation.js (navigateTo)
|
|
|
|
function openModal(id) {
|
|
const el = $(id);
|
|
if (!el) return;
|
|
el.classList.add('open');
|
|
setTimeout(() => {
|
|
const input = el.querySelector('input:not([type="checkbox"])');
|
|
if (input) input.focus();
|
|
}, 50);
|
|
}
|
|
|
|
function closeModal(id) {
|
|
const el = $(id);
|
|
if (!el) return;
|
|
el.classList.remove('open');
|
|
el.querySelectorAll('.modal-error').forEach(e => { e.style.display = 'none'; e.textContent = ''; });
|
|
}
|
|
|
|
function showModalError(modalId, errorId, msg) {
|
|
const el = $(errorId);
|
|
if (!el) return;
|
|
el.textContent = msg;
|
|
el.style.display = 'block';
|
|
}
|
|
|
|
// Close modals on backdrop click or close button
|
|
document.addEventListener('click', (e) => {
|
|
const closeBtn = e.target.closest('[data-close-modal]');
|
|
if (closeBtn) {
|
|
closeModal(closeBtn.dataset.closeModal);
|
|
return;
|
|
}
|
|
if (e.target.classList.contains('modal-backdrop')) {
|
|
closeModal(e.target.id);
|
|
}
|
|
const pageLink = e.target.closest('[data-page-link]');
|
|
if (pageLink) {
|
|
navigateTo(pageLink.dataset.pageLink);
|
|
}
|
|
});
|
|
|
|
// Escape key closes topmost open modal
|
|
document.addEventListener('keydown', (e) => {
|
|
if (e.key === 'Escape') {
|
|
const open = document.querySelector('.modal-backdrop.open');
|
|
if (open) closeModal(open.id);
|
|
}
|
|
});
|