Script for Pass-Education to download without subscription

This script modifies download links on the Pass-Éducation website to allow file downloads without a subscription. It also removes Google Tag Manager (GTM) iframes that appear on the page.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name      Script for Pass-Education to download without subscription
// @name:fr         Script pour Pass-Education pour télécharger sans abonnement
// @name:en      Script for Pass-Education to download without subscription
// @description This script modifies download links on the Pass-Éducation website to allow file downloads without a subscription. It also removes Google Tag Manager (GTM) iframes that appear on the page.
// @description:fr  Ce script permet de modifier les liens de téléchargement sur le site Pass-Éducation afin de télécharger des fichiers sans avoir à payer un abonnement. Il supprime également les iframes de Google Tag Manager (GTM) qui apparaissent sur la page.
// @description:en This script modifies download links on the Pass-Éducation website to allow file downloads without a subscription. It also removes Google Tag Manager (GTM) iframes that appear on the page.
// @namespace    http://tampermonkey.net/
// @version      1.2
// @match        https://*.pass-education.fr/*
// @grant        none
// @license      MIT
// @author       TrouveMe
// @contributionURL https://www.paypal.com/donate/?cmd=_donations&[email protected]&item_name=Greasy+Fork+donation
// ==/UserScript==

(function() {
    'use strict';

    // Ferme les pop-ups de consentement si présents
    const consentButton = document.querySelector('.cc-btn.cc-dismiss.cc-btn-no-href');
    if (consentButton) {
        consentButton.click();
    }

    // Supprime le pop-up de connexion si présent
    const loginPopUp = document.querySelector('.callout.warning.link-attachment');
    if (loginPopUp) {
        loginPopUp.remove();
    }

    // Liste pour garder trace des liens déjà mis à jour
    let lastUpdatedLinks = [];

    // Fonction pour mettre à jour les liens
    function updateLinks() {
        const links = document.querySelectorAll('.auth-href');

        links.forEach(link => {
            // Assurez-vous que le lien n'a pas déjà été modifié pour éviter la récursion infinie
            if (lastUpdatedLinks.includes(link.href)) return;

            const url = new URL(link.href);
            const attachmentId = url.searchParams.get('attachment_id');
            const archiveId = url.searchParams.get('archive_id');

            if (attachmentId) {
                link.href = 'https://cdn.pass-education.fr/download.php?attachment_id=' + attachmentId;
                console.log('Nouveau lien attachment:', link.href);
            }

            if (archiveId) {
                link.href = 'https://cdn.pass-education.fr/download.php?archive_id=' + archiveId;
                console.log('Nouveau lien archive:', link.href);
            }

            // Ajout à la liste des liens modifiés pour éviter la récursion infinie
            lastUpdatedLinks.push(link.href);
        });
    }

    // Observer de mutations pour surveiller les changements dans le DOM
    const observer = new MutationObserver((mutationsList) => {
        // Ne traiter que les mutations concernant l'ajout de nouveaux liens pertinents
        for (const mutation of mutationsList) {
            for (const node of mutation.addedNodes) {
                // Vérifiez si un élément contenant des liens à mettre à jour est ajouté
                if (node.querySelectorAll && node.querySelectorAll('.auth-href').length) {
                    updateLinks(); // Mettre à jour les liens dès qu'ils sont ajoutés
                }

                // Si une iframe GTM est ajoutée, on la supprime
                if (node.tagName === 'IFRAME' && node.src.includes('googletagmanager.com/ns.html')) {
                    console.log('Suppression iframe GTM:', node.src);
                    node.remove();
                }
            }
        }
    });

    // Configurer l'observateur pour surveiller l'ajout de nouveaux éléments
    observer.observe(document.body, {
        childList: true,  // Surveiller l'ajout/suppression d'éléments
        subtree: true,    // Inclure tous les sous-éléments de la page
    });

    // Appeler une première fois pour modifier les liens déjà présents dans la galerie
    updateLinks();
})();