您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Ajoute une zone de filtres de recherche pour Zone-Telechargement
// ==UserScript== // @name ZT Better Filters // @namespace ZTBF // @version 0.2.1 // @description Ajoute une zone de filtres de recherche pour Zone-Telechargement // @author Drigtime // @include /http(|s):\/\/(|(|w|0|1|2|3|4|5|6|7|8|9)*w(|w|0|1|2|3|4|5|6|7|8|9)*\.)zone\-telechargement[.*]/ // @icon https://www.google.com/s2/favicons?sz=64&domain=zone-telechargement.yachts // @grant none // ==/UserScript== (async function () { 'use strict'; // get the current url parameters const urlParams = new URLSearchParams(window.location.search); if (urlParams.get("id")) { // if we are on a movie/serie page, do nothing return; } const mainContainer = document.querySelector("#dle-content"); const categories = []; const years = []; const genres = []; // loop on each new-cat to get the categorie filter and its sub-categories filters const ztCategoriesContainer = document.querySelectorAll("#new-cat"); for (const categorieContainer of ztCategoriesContainer) { const categorieTitle = categorieContainer.querySelector("#new-title-cat > div:nth-child(2) > a"); const categorie = { title: categorieTitle.innerText, value: categorieTitle.href.split("p=")[1], subCategories: [] }; const ztSubCategoriesContainer = categorieContainer.querySelectorAll("#new-subcat > ul > li > a"); for (const subCategorieContainer of ztSubCategoriesContainer) { categorie.subCategories.push({ title: subCategorieContainer.innerText, value: subCategorieContainer.href.split("s=")[1] }); } categories.push(categorie); } // loop on each annee de sortie to get the year filter const ztYearsContainer = document.querySelectorAll("#am > div:nth-child(1) > div.s_left > div > div > div.container > div.leftside > div:nth-child(2) > div > div.dcont > div > table:nth-child(2) > tbody > tr > td > form > select > option"); for (const yearContainer of ztYearsContainer) { years.push({ title: yearContainer.innerText, value: yearContainer.value.split("year=")[1] }); } // loop on each movie/serie genres to get the genre filter const ztGenresContainer = document.querySelectorAll("#am > div:nth-child(1) > div.s_left > div > div > div.container > div.leftside > div:nth-child(2) > div > div.dcont > div > table:nth-child(4) > tbody > tr > td > a"); for (const genreContainer of ztGenresContainer) { genres.push({ title: genreContainer.innerText, value: genreContainer.href.split("genre=")[1] }); } // append mainContainer with a new area for filters (before the first div) const newContainer = document.createElement("form"); newContainer.id = "ztbf-container"; newContainer.style = "margin-bottom:8px; margin-bottom: 8px; border: solid; padding: 0.5rem; border-radius: 0.5rem;"; mainContainer.insertBefore(newContainer, mainContainer.firstChild); // create the filters const filtersContainer = document.createElement("div"); filtersContainer.id = "ztbf-filters"; filtersContainer.style = "display: grid;grid-template-columns: repeat(4, 1fr);grid-column-gap: 1rem;grid-row-gap: .5rem;"; newContainer.appendChild(filtersContainer); // create the categories filter with select element const categoriesContainer = document.createElement("div"); categoriesContainer.id = "ztbf-categories"; filtersContainer.appendChild(categoriesContainer); const categoriesTitle = document.createElement("div"); categoriesTitle.id = "ztbf-categories-title"; categoriesTitle.style = "font-weight:bold;font-family: arial; font-size: 14px;"; categoriesTitle.innerText = "Catégories"; categoriesContainer.appendChild(categoriesTitle); const categoriesSelect = document.createElement("select"); categoriesSelect.id = "ztbf-categories-select"; categoriesSelect.name = "p"; categoriesSelect.style = "width:100%;"; categoriesContainer.appendChild(categoriesSelect); const categoriesSelectOption = document.createElement("option"); categoriesSelectOption.value = ""; categoriesSelectOption.innerText = "Toutes les catégories"; categoriesSelect.appendChild(categoriesSelectOption); for (const categorie of categories) { const categorieSelectOption = document.createElement("option"); categorieSelectOption.value = categorie.value; categorieSelectOption.innerText = categorie.title; categoriesSelect.appendChild(categorieSelectOption); } // create the sub categorie filter with select element, change the options based on the selected categorie const subCategoriesContainer = document.createElement("div"); subCategoriesContainer.id = "ztbf-sub-categories"; filtersContainer.appendChild(subCategoriesContainer); const subCategoriesTitle = document.createElement("div"); subCategoriesTitle.id = "ztbf-sub-categories-title"; subCategoriesTitle.style = "font-weight:bold;font-family: arial; font-size: 14px;"; subCategoriesTitle.innerText = "Sous-Catégories"; subCategoriesContainer.appendChild(subCategoriesTitle); const subCategoriesSelect = document.createElement("select"); subCategoriesSelect.id = "ztbf-sub-categories-select"; subCategoriesSelect.name = "s"; subCategoriesSelect.style = "width:100%;"; subCategoriesContainer.appendChild(subCategoriesSelect); const subCategoriesSelectOption = document.createElement("option"); subCategoriesSelectOption.value = ""; subCategoriesSelectOption.innerText = "Toutes les sous-catégories"; subCategoriesSelect.appendChild(subCategoriesSelectOption); // on categoriesSelect change, change the subCategoriesSelect options categoriesSelect.addEventListener("change", () => { const selectedCategorie = categories.find(categorie => categorie.value === categoriesSelect.value); subCategoriesSelect.innerHTML = ""; subCategoriesSelect.appendChild(subCategoriesSelectOption); if (selectedCategorie) { if (selectedCategorie.subCategories.length > 0) { subCategoriesContainer.style.display = "block"; for (const subCategorie of selectedCategorie.subCategories) { const subCategorieSelectOption = document.createElement("option"); subCategorieSelectOption.value = subCategorie.value; subCategorieSelectOption.innerText = subCategorie.title; subCategoriesSelect.appendChild(subCategorieSelectOption); } } else { subCategoriesContainer.style.display = "none"; } } }); // create the year filter with select element const yearContainer = document.createElement("div"); yearContainer.id = "ztbf-year"; filtersContainer.appendChild(yearContainer); const yearTitle = document.createElement("div"); yearTitle.id = "ztbf-year-title"; yearTitle.style = "font-weight:bold;font-family: arial; font-size: 14px;"; yearTitle.innerText = "Année de sortie"; yearContainer.appendChild(yearTitle); const yearSelect = document.createElement("select"); yearSelect.id = "ztbf-year-select"; yearSelect.name = "year"; yearSelect.style = "width:100%;"; yearContainer.appendChild(yearSelect); const yearSelectOption = document.createElement("option"); yearSelectOption.value = ""; yearSelectOption.innerText = "Toutes les années"; yearSelect.appendChild(yearSelectOption); for (const year of years) { const yearSelectOption = document.createElement("option"); yearSelectOption.value = year.value; yearSelectOption.innerText = year.title; yearSelect.appendChild(yearSelectOption); } // create the genre filter with select element, change the options based on the selected categorie, only appear if movie/serie categorie is selected const genreContainer = document.createElement("div"); genreContainer.id = "ztbf-genre"; filtersContainer.appendChild(genreContainer); const genreTitle = document.createElement("div"); genreTitle.id = "ztbf-genre-title"; genreTitle.style = "font-weight:bold;font-family: arial; font-size: 14px;"; genreTitle.innerText = "Genre"; genreContainer.appendChild(genreTitle); const genreSelect = document.createElement("select"); genreSelect.id = "ztbf-genre-select"; genreSelect.name = "genre"; genreSelect.style = "width:100%;"; genreContainer.appendChild(genreSelect); const genreSelectOption = document.createElement("option"); genreSelectOption.value = ""; genreSelectOption.innerText = "Tous les genres"; genreSelect.appendChild(genreSelectOption); for (const genre of genres) { const genreSelectOption = document.createElement("option"); genreSelectOption.value = genre.value; genreSelectOption.innerText = genre.title; genreSelect.appendChild(genreSelectOption); } // on categoriesSelect change, change the genreSelect options categoriesSelect.addEventListener("change", () => { const selectedCategorie = categories.find(categorie => categorie.value === categoriesSelect.value); if (selectedCategorie && (selectedCategorie.value === "films" || selectedCategorie.value === "series")) { genreContainer.style.display = "block"; yearContainer.style.display = "block"; } else { genreContainer.style.display = "none"; yearContainer.style.display = "none"; } }); // create the search filter const searchContainer = document.createElement("div"); searchContainer.id = "ztbf-search"; searchContainer.style = "grid-column: 1 / span 4;"; filtersContainer.appendChild(searchContainer); const searchTitle = document.createElement("div"); searchTitle.id = "ztbf-search-title"; searchTitle.style = "font-weight:bold;font-family: arial; font-size: 14px;"; searchTitle.innerText = "Recherche"; searchContainer.appendChild(searchTitle); const searchInput = document.createElement("input"); searchInput.id = "ztbf-search-input"; searchInput.name = "search"; searchInput.style = "width:100%;"; searchInput.placeholder = "Recherche"; searchContainer.appendChild(searchInput); const formButtonContainer = document.createElement("div"); formButtonContainer.id = "ztbf-form-button-container"; formButtonContainer.style = "display: flex; justify-content: center; gap: .5rem; margin-top: .5rem;"; newContainer.appendChild(formButtonContainer); const searchButton = document.createElement("button"); searchButton.id = "ztbf-search-button"; searchButton.innerText = "Rechercher"; formButtonContainer.appendChild(searchButton); // create the reset filter const resetContainer = document.createElement("div"); resetContainer.id = "ztbf-reset"; formButtonContainer.appendChild(resetContainer); const resetButton = document.createElement("button"); resetButton.id = "ztbf-reset-button"; resetButton.innerText = "Réinitialiser"; resetContainer.appendChild(resetButton); // on searchButton click, submit the form searchButton.addEventListener("click", () => { filtersContainer.submit(); }); // on resetButton click, reset the filters resetButton.addEventListener("click", () => { categoriesSelect.value = ""; categoriesSelect.dispatchEvent(new Event("change")); yearSelect.value = ""; genreSelect.value = ""; searchInput.value = ""; filtersContainer.submit(); }); // set the current url parameters to the filters categoriesSelect.value = urlParams.get("p"); categoriesSelect.dispatchEvent(new Event("change")); subCategoriesSelect.value = urlParams.get("s"); yearSelect.value = urlParams.get("year"); genreSelect.value = urlParams.get("genre"); searchInput.value = urlParams.get("search"); })();