pi hole update

This commit is contained in:
2026-03-09 02:00:04 +01:00
parent 4adb50dc57
commit 5687fbb21b
5 changed files with 354 additions and 0 deletions

View File

@@ -157,6 +157,68 @@
gap: 6px;
}
.pihole-instance-card {
padding: 16px;
background: var(--panel-2);
display: grid;
gap: 12px;
}
.pihole-card-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.form-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 12px;
}
.form-field {
display: grid;
gap: 6px;
}
.icon-button {
border: 1px solid var(--line);
background: var(--panel);
border-radius: 10px;
width: 36px;
height: 36px;
cursor: pointer;
font-size: 1.1rem;
}
.modal {
position: fixed;
inset: 0;
background: rgba(10, 14, 24, 0.55);
display: none;
align-items: center;
justify-content: center;
padding: 24px;
z-index: 40;
}
.modal.is-open { display: flex; }
.modal-card {
width: min(880px, 96vw);
max-height: 90vh;
overflow: auto;
background: var(--panel);
border: 1px solid var(--line);
border-radius: 16px;
box-shadow: var(--shadow);
padding: 16px;
}
.modal-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
@media (max-width: 680px) {
.pihole-actions {
flex-direction: column;

View File

@@ -0,0 +1,67 @@
(() => {
const modal = document.querySelector('[data-instance-modal]');
const form = document.querySelector('[data-instance-form]');
if (!modal || !form) return;
const title = document.querySelector('[data-instance-modal-title]');
const closeBtn = document.querySelector('[data-instance-close]');
const newBtn = document.querySelector('[data-instance-new]');
const cancelBtn = document.querySelector('[data-instance-cancel]');
const currentIdInput = form.querySelector('input[name="current_id"]');
const idInput = form.querySelector('input[name="instance_id"]');
const nameInput = form.querySelector('input[name="name"]');
const urlInput = form.querySelector('input[name="url"]');
const tokenInput = form.querySelector('input[name="token"]');
const primaryInput = form.querySelector('input[name="is_primary"]');
const resetForm = () => {
if (currentIdInput) currentIdInput.value = '';
if (idInput) idInput.value = '';
if (nameInput) nameInput.value = '';
if (urlInput) urlInput.value = '';
if (tokenInput) tokenInput.value = '';
if (primaryInput) primaryInput.checked = false;
};
const openModal = () => {
modal.classList.add('is-open');
modal.setAttribute('aria-hidden', 'false');
};
const closeModal = () => {
modal.classList.remove('is-open');
modal.setAttribute('aria-hidden', 'true');
};
document.querySelectorAll('[data-instance-edit]').forEach((btn) => {
btn.addEventListener('click', () => {
const card = btn.closest('[data-instance-id]');
if (!card) return;
if (currentIdInput) currentIdInput.value = card.dataset.instanceId || '';
if (idInput) idInput.value = card.dataset.instanceId || '';
if (nameInput) nameInput.value = card.dataset.name || '';
if (urlInput) urlInput.value = card.dataset.url || '';
if (tokenInput) tokenInput.value = '';
if (primaryInput) primaryInput.checked = card.dataset.primary === '1';
if (title) title.textContent = 'Instanz bearbeiten';
openModal();
});
});
if (newBtn) {
newBtn.addEventListener('click', () => {
resetForm();
if (title) title.textContent = 'Neue Instanz';
openModal();
});
}
if (closeBtn) {
closeBtn.addEventListener('click', () => closeModal());
}
if (cancelBtn) {
cancelBtn.addEventListener('click', () => resetForm());
}
})();