77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
"use strict";
|
|
|
|
const DEFAULT_SETTINGS = {
|
|
baseFolder: "RedGifs",
|
|
groupByProfile: true,
|
|
saveAs: false
|
|
};
|
|
|
|
const baseFolderInput = document.getElementById("baseFolder");
|
|
const groupByProfileInput = document.getElementById("groupByProfile");
|
|
const saveAsInput = document.getElementById("saveAs");
|
|
const pathPreview = document.getElementById("pathPreview");
|
|
const saveButton = document.getElementById("saveButton");
|
|
const resetButton = document.getElementById("resetButton");
|
|
const statusBox = document.getElementById("status");
|
|
|
|
function cleanPath(value) {
|
|
return String(value || "")
|
|
.replace(/\\/g, "/")
|
|
.split("/")
|
|
.map((part) => part.replace(/[<>:"|?*\u0000-\u001f]/g, "_").replace(/[. ]+$/g, "").trim())
|
|
.filter((part) => part && part !== "." && part !== "..")
|
|
.slice(0, 8)
|
|
.join("/");
|
|
}
|
|
|
|
function readForm() {
|
|
return {
|
|
baseFolder: cleanPath(baseFolderInput.value),
|
|
groupByProfile: groupByProfileInput.checked,
|
|
saveAs: saveAsInput.checked
|
|
};
|
|
}
|
|
|
|
function writeForm(settings) {
|
|
baseFolderInput.value = settings.baseFolder || "";
|
|
groupByProfileInput.checked = settings.groupByProfile !== false;
|
|
saveAsInput.checked = Boolean(settings.saveAs);
|
|
updatePreview();
|
|
}
|
|
|
|
function updatePreview() {
|
|
const settings = readForm();
|
|
const parts = ["Загрузки"];
|
|
if (settings.baseFolder) parts.push(settings.baseFolder);
|
|
if (settings.groupByProfile) parts.push("profile");
|
|
parts.push("video.mp4");
|
|
pathPreview.textContent = parts.join("/");
|
|
}
|
|
|
|
async function loadSettings() {
|
|
const stored = await chrome.storage.local.get("downloadSettings");
|
|
writeForm(Object.assign({}, DEFAULT_SETTINGS, stored.downloadSettings || {}));
|
|
}
|
|
|
|
async function saveSettings() {
|
|
const settings = readForm();
|
|
baseFolderInput.value = settings.baseFolder;
|
|
await chrome.storage.local.set({ downloadSettings: settings });
|
|
statusBox.textContent = "Настройки сохранены.";
|
|
updatePreview();
|
|
setTimeout(() => {
|
|
statusBox.textContent = "";
|
|
}, 2200);
|
|
}
|
|
|
|
baseFolderInput.addEventListener("input", updatePreview);
|
|
groupByProfileInput.addEventListener("change", updatePreview);
|
|
saveAsInput.addEventListener("change", updatePreview);
|
|
saveButton.addEventListener("click", saveSettings);
|
|
resetButton.addEventListener("click", () => {
|
|
writeForm(DEFAULT_SETTINGS);
|
|
statusBox.textContent = "Восстановлены значения по умолчанию — нажмите «Сохранить».";
|
|
});
|
|
|
|
loadSettings();
|