126 lines
3.9 KiB
JavaScript
126 lines
3.9 KiB
JavaScript
|
|
(function () {
|
||
|
|
const storageProviderSelects = document.querySelectorAll("[data-storage-provider]");
|
||
|
|
|
||
|
|
function syncStorageProvider(select) {
|
||
|
|
const formScope = select.closest("form");
|
||
|
|
if (!formScope) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const provider = select.value;
|
||
|
|
const isContabo = provider === "contabo";
|
||
|
|
formScope.querySelectorAll("[data-provider-fields]").forEach((group) => {
|
||
|
|
const providers = (group.getAttribute("data-provider-fields") || "").split(/\s+/);
|
||
|
|
const active = providers.includes(provider);
|
||
|
|
group.hidden = !active;
|
||
|
|
group.querySelectorAll("input, select, textarea").forEach((input) => {
|
||
|
|
input.disabled = !active;
|
||
|
|
});
|
||
|
|
});
|
||
|
|
const tls = formScope.querySelector('input[name="use_ssl"]');
|
||
|
|
const pathStyle = formScope.querySelector('input[name="path_style"]');
|
||
|
|
if (tls) {
|
||
|
|
tls.checked = isContabo || tls.checked;
|
||
|
|
tls.disabled = isContabo;
|
||
|
|
}
|
||
|
|
if (pathStyle) {
|
||
|
|
pathStyle.checked = isContabo || pathStyle.checked;
|
||
|
|
pathStyle.disabled = isContabo;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
storageProviderSelects.forEach((select) => {
|
||
|
|
select.addEventListener("change", () => syncStorageProvider(select));
|
||
|
|
syncStorageProvider(select);
|
||
|
|
});
|
||
|
|
|
||
|
|
document.querySelectorAll(".storage-edit-trigger").forEach((button) => {
|
||
|
|
button.addEventListener("click", () => {
|
||
|
|
const card = button.closest(".storage-card");
|
||
|
|
if (!card) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
card.classList.add("is-editing");
|
||
|
|
const providerSelect = card.querySelector("[data-storage-provider]");
|
||
|
|
if (providerSelect) {
|
||
|
|
syncStorageProvider(providerSelect);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
document.querySelectorAll(".storage-cancel-trigger").forEach((button) => {
|
||
|
|
button.addEventListener("click", () => {
|
||
|
|
const card = button.closest(".storage-card");
|
||
|
|
if (!card) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const form = card.querySelector("form");
|
||
|
|
if (form) {
|
||
|
|
form.reset();
|
||
|
|
}
|
||
|
|
card.classList.remove("is-editing");
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
const storageAddTrigger = document.querySelector(".storage-add-trigger");
|
||
|
|
const storageTypePicker = document.querySelector(".storage-type-picker");
|
||
|
|
const storageNewCard = document.querySelector(".storage-new-card");
|
||
|
|
|
||
|
|
const providerLabels = {
|
||
|
|
s3: "S3 bucket",
|
||
|
|
contabo: "Contabo Object Storage",
|
||
|
|
sftp: "SFTP",
|
||
|
|
smb: "Samba",
|
||
|
|
webdav: "WebDAV",
|
||
|
|
};
|
||
|
|
|
||
|
|
if (storageAddTrigger && storageTypePicker) {
|
||
|
|
storageAddTrigger.addEventListener("click", () => {
|
||
|
|
storageTypePicker.hidden = !storageTypePicker.hidden;
|
||
|
|
if (storageNewCard && !storageTypePicker.hidden) {
|
||
|
|
storageNewCard.hidden = true;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
storageTypePicker.querySelectorAll(".storage-type-option").forEach((option) => {
|
||
|
|
option.addEventListener("click", () => {
|
||
|
|
const provider = option.dataset.provider;
|
||
|
|
if (!storageNewCard) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const providerSelect = storageNewCard.querySelector("[data-storage-provider]");
|
||
|
|
if (providerSelect) {
|
||
|
|
providerSelect.value = provider;
|
||
|
|
syncStorageProvider(providerSelect);
|
||
|
|
}
|
||
|
|
|
||
|
|
const typeBadge = storageNewCard.querySelector(".storage-new-type-badge");
|
||
|
|
if (typeBadge) {
|
||
|
|
typeBadge.textContent = providerLabels[provider] || provider;
|
||
|
|
}
|
||
|
|
|
||
|
|
const iconEl = storageNewCard.querySelector(".storage-new-icon");
|
||
|
|
const optIcon = option.querySelector("svg");
|
||
|
|
if (iconEl && optIcon) {
|
||
|
|
iconEl.innerHTML = optIcon.outerHTML;
|
||
|
|
}
|
||
|
|
|
||
|
|
storageTypePicker.hidden = true;
|
||
|
|
storageNewCard.hidden = false;
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
if (storageNewCard) {
|
||
|
|
const cancelBtn = storageNewCard.querySelector(".storage-new-cancel");
|
||
|
|
if (cancelBtn) {
|
||
|
|
cancelBtn.addEventListener("click", () => {
|
||
|
|
storageNewCard.hidden = true;
|
||
|
|
if (storageTypePicker) {
|
||
|
|
storageTypePicker.hidden = true;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})();
|