返回首頁 

Greasy Fork is available in English.

Téléchargment des photos : "Mes enfants"

Ajoute un bouton pour télécharger l'ensemble des photos de la section "Mes enfants". Le bouton télécharge les photos de la page courante dans un ZIP. Il faut effectuer l'action pour chaque page.


Installer ce script?
  1. // ==UserScript==// @name Téléchargment des photos : "Mes enfants"// @namespace http://tampermonkey.net/// @version 2024-10-09// @description Ajoute un bouton pour télécharger l'ensemble des photos de la section "Mes enfants". Le bouton télécharge les photos de la page courante dans un ZIP. Il faut effectuer l'action pour chaque page.// @author You// @match https://www.toutemonannee.com/journal/*// @icon https://www.google.com/s2/favicons?sz=64&domain=toutemonannee.com// @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js// @license MIT// @grant none// ==/UserScript==(function() {'use strict';// Fonction pour activer le loader sur le boutonfunction showLoader(button) {button.disabled = true; // Désactiver le bouton pendant le téléchargementbutton.innerHTML = '<span class="loader"></span> Preparing...'; // Changer le texte avec l'animation de chargement}// Fonction pour désactiver le loader sur le boutonfunction hideLoader(button) {button.disabled = false; // Réactiver le boutonbutton.innerHTML = 'Download as ZIP'; // Restaurer le texte initial}// Fonction qui récupère et télécharge toutes les images dans un fichier .zipfunction downloadAllImagesAsZip(button) {// Réinitialiser l'objet JSZip pour chaque nouvelle demande de téléchargementconst zip = new JSZip();// Activer le loadershowLoader(button);// Sélecteur des imagesconst images = document.querySelectorAll('img.border-radius-xs.cursor-zoomin');// Créer une liste de promesses pour gérer chaque téléchargement d'imageconst promises = Array.from(images).map((img) => {// Remplacer '/thumbs/' par '/hd/' dans l'URL de l'imageconst hdUrl = img.src.replace('/thumbs/', '/hd/');// Extraire le nom de fichier original de l'URL et ignorer les paramètres après le ".jpg"const filename = hdUrl.split('/').pop().split('?')[0];// Utiliser fetch pour récupérer l'image en tant que Blobreturn fetch(hdUrl).then(response => response.blob()).then(blob => {// Ajouter l'image au fichier zip avec son nom original (sans les paramètres)zip.file(filename, blob);}).catch(err => console.error('Erreur lors du téléchargement : ', err));});// Attendre que toutes les promesses soient résolues avant de générer le fichier .zipPromise.all(promises).then(() => {// Récupérer le numéro de la page à partir de la balise 'li.reactor-pagination__item.reactor-pagination__item--active'const pageElement = document.querySelector('li.reactor-pagination__item.reactor-pagination__item--active');const pageNumber = pageElement ? pageElement.textContent.trim() : 'unknown';// Nommer le fichier zip avec le numéro de pageconst zipFilename = `image_page_${pageNumber}.zip`;zip.generateAsync({ type: 'blob' }).then(content => {const link = document.createElement('a');link.href = URL.createObjectURL(content);link.download = zipFilename;document.body.appendChild(link);link.click();document.body.removeChild(link);// Désactiver le loader une fois que le téléchargement est prêthideLoader(button);});});}let gbutton = undefined;function destroyDownloadButton() {if (gbutton) {document.body.removeChild(gbutton);gbutton = undefined;}}// Fonction pour créer un bouton flottant avec animation de chargementfunction createDownloadButton() {destroyDownloadButton();const button = document.createElement('button');// Récupérer le numéro de la page à partir de la balise 'li.reactor-pagination__item.reactor-pagination__item--active'const pageElement = document.querySelector('li.reactor-pagination__item.reactor-pagination__item--active');const pageNumber = pageElement ? pageElement.textContent.trim() : null;if (pageNumber === null) {return;}gbutton = button;lastPageNumber = parseInt(pageNumber);// Mettre à jour le texte du bouton avec le numéro de pagebutton.innerText = `Download page ${pageNumber} as ZIP`;// Appliquer des styles pour que le bouton soit flottant à droitebutton.style.position = 'fixed';button.style.right = '20px';button.style.bottom = '20px';button.style.padding = '10px 20px';button.style.backgroundColor = '#28a745';button.style.color = 'white';button.style.border = 'none';button.style.borderRadius = '5px';button.style.boxShadow = '0 2px 5px rgba(0, 0, 0, 0.3)';button.style.cursor = 'pointer';button.style.zIndex = '2147483641';// Ajouter un événement 'click' pour déclencher le téléchargement des images en fichier .zipbutton.addEventListener('click', function() {downloadAllImagesAsZip(button);});// Ajouter le bouton au bodydocument.body.appendChild(button);}let lastUrl = null;let lastPageNumber = null;// Fonction à exécuter quand l'URL correspond au pattern désiréfunction handleUrlChange() {const currentUrl = window.location.href;console.log('handleUrlChange = ',currentUrl);if (/https:\/\/www\.toutemonannee\.com\/journal\/.*\/my-children/.test(currentUrl)) {const pageElement = document.querySelector('li.reactor-pagination__item.reactor-pagination__item--active');const currentPageNumber = pageElement ? parseInt(pageElement.textContent.trim()) : null;if (currentUrl !== lastUrl || lastPageNumber !== currentPageNumber) {lastUrl = currentUrl;console.log('handleUrlChange = ',currentUrl);console.log('URL correspond, exécution du script...');createDownloadButton();}}else {if (currentUrl !== lastUrl) {lastUrl = currentUrl;}destroyDownloadButton();}}// Surveiller les changements dans l'historiquefunction observeUrlChanges() {// Ajouter une vérification périodique au cas où l'URL change d'une autre manièresetInterval(() => {handleUrlChange();}, 200); // Vérifie toutes les secondes si l'URL a changé}// Appeler l'observateur après que la page soit chargéeobserveUrlChanges();// Créer le bouton lorsque la page est chargée//createDownloadButton();})();