Description du script

Ce script est destiné aux pages moremember.pl et circulation.pl de Koha. Il permet de copier facilement l’identifiant, le numéro de carte lecteur et, le cas échéant, le mot de passe en utilisant le presse-papiers. Des messages de confirmation apparaissent après chaque copie pour indiquer le succès de l’opération.

Explication détaillée de l’algorithme

  1. Identification de l’élément d’identifiant :
  2. Extraction via le conteneur de numéro de carte :
  3. Gestion de la copie pour le numéro de carte dans circulation.pl :
  4. Messages de confirmation :

Inclusion du code

//Copie identifiants, numéro carte lecteur et mot de passe page adhérent
if (window.location.pathname.includes("moremember.pl") || window.location.pathname.includes("circulation.pl")) {

    // Fonctionnalité pour l'élément <li> avec l'ID "patron-username"
    const usernameElement = document.getElementById("patron-username");

    if (usernameElement) {
        usernameElement.addEventListener("click", function() {
            // Récupérer le texte de l'identifiant (après le span)
            const identifier = usernameElement.textContent.replace(/.*Identifiant\s*:\s*/, "").trim();

            // Copier l'identifiant dans le presse-papiers
            navigator.clipboard.writeText(identifier).then(() => {
                // Créer le message de confirmation
                const message = document.createElement("div");
                message.textContent = `\"${identifier}\" a été copié dans le presse-papiers.`;
                message.style.position = "fixed";
                message.style.top = "50%";
                message.style.left = "50%";
                message.style.transform = "translate(-50%, -50%)";
                message.style.backgroundColor = "rgba(0, 0, 0, 0.8)";
                message.style.color = "white";
                message.style.padding = "10px 20px";
                message.style.borderRadius = "5px";
                message.style.fontSize = "16px";
                message.style.textAlign = "center";
                message.style.zIndex = "1000";

                // Ajouter le message au DOM
                document.body.appendChild(message);

                // Supprimer le message après 2 secondes
                setTimeout(() => {
                    message.remove();
                }, 2000);
            }).catch(err => {
                console.error("Erreur lors de la copie dans le presse-papiers :", err);
            });
        });
    }

    // Fonctionnalité pour les éléments dans la div contenant les numéros
    const container = document.querySelector(".col-sm-12 h1");

    if (container) {
        container.addEventListener("click", function(event) {
            let identifier = "";

            // Vérifier si on clique sur le span
            if (event.target.tagName === "SPAN" && event.target.style.textDecoration.includes("underline")) {
                identifier = event.target.textContent.trim();
            } else {
                // Récupérer tout le contenu texte de <h1>
                identifier = container.textContent.replace(/[^0-9]/g, "").trim();
            }

            // Copier l'identifiant dans le presse-papiers
            navigator.clipboard.writeText(identifier).then(() => {
                // Créer le message de confirmation
                const message = document.createElement("div");
                message.textContent = `\"${identifier}\" a été copié dans le presse-papiers.`;
                message.style.position = "fixed";
                message.style.top = "50%";
                message.style.left = "50%";
                message.style.transform = "translate(-50%, -50%)";
                message.style.backgroundColor = "rgba(0, 0, 0, 0.8)";
                message.style.color = "white";
                message.style.padding = "10px 20px";
                message.style.borderRadius = "5px";
                message.style.fontSize = "16px";
                message.style.textAlign = "center";
                message.style.zIndex = "1000";

                // Ajouter le message au DOM
                document.body.appendChild(message);

                // Supprimer le message après 2 secondes
                setTimeout(() => {
                    message.remove();
                }, 2000);
            }).catch(err => {
                console.error("Erreur lors de la copie dans le presse-papiers :", err);
            });
        });
    }

    // Fonctionnalité pour l'élément <span> contenant les numéros dans circulation.pl
    const barcodeLabel = document.querySelector("label.circ_barcode");

    if (barcodeLabel) {
        // Repérer les deux parties du numéro de carte : le premier numéro et les 4 derniers chiffres
        const fullNumber = barcodeLabel.textContent.match(/(\d{10})(\d{4})/);

        // Si les deux parties sont trouvées
        if (fullNumber) {
            const firstPart = fullNumber[1];  // "9040500105"
            const secondPart = fullNumber[2]; // "7043"
            const fullBarcode = firstPart + secondPart;  // "90405001057043"

            // Ajout des événements de clic sur les deux parties du numéro
            // Cliquer sur le premier numéro (ex: "9040500105")
            const firstPartElement = barcodeLabel.querySelector("span");
            if (firstPartElement) {
                firstPartElement.addEventListener("click", function() {
                    navigator.clipboard.writeText(fullBarcode).then(() => {
                        const message = document.createElement("div");
                        message.textContent = `\"${fullBarcode}\" a été copié dans le presse-papiers.`;
                        message.style.position = "fixed";
                        message.style.top = "50%";
                        message.style.left = "50%";
                        message.style.transform = "translate(-50%, -50%)";
                        message.style.backgroundColor = "rgba(0, 0, 0, 0.8)";
                        message.style.color = "white";
                        message.style.padding = "10px 20px";
                        message.style.borderRadius = "5px";
                        message.style.fontSize = "16px";
                        message.style.textAlign = "center";
                        message.style.zIndex = "1000";

                        document.body.appendChild(message);
                        setTimeout(() => {
                            message.remove();
                        }, 2000);
                    }).catch(err => {
                        console.error("Erreur lors de la copie dans le presse-papiers :", err);
                    });
                });
            }

            // Cliquer sur la partie des 4 derniers chiffres (ex: "7043")
            const secondPartElement = barcodeLabel.querySelector("span[style*='text-decoration: underline dotted; color: green;']");
            if (secondPartElement) {
                secondPartElement.addEventListener("click", function() {
                    navigator.clipboard.writeText(secondPart).then(() => {
                        const message = document.createElement("div");
                        message.textContent = `\"${secondPart}\" a été copié dans le presse-papiers.`;
                        message.style.position = "fixed";
                        message.style.top = "50%";
                        message.style.left = "50%";
                        message.style.transform = "translate(-50%, -50%)";
                        message.style.backgroundColor = "rgba(0, 0, 0, 0.8)";
                        message.style.color = "white";
                        message.style.padding = "10px 20px";
                        message.style.borderRadius = "5px";
                        message.style.fontSize = "16px";
                        message.style.textAlign = "center";
                        message.style.zIndex = "1000";

                        document.body.appendChild(message);
                        setTimeout(() => {
                            message.remove();
                        }, 2000);
                    }).catch(err => {
                        console.error("Erreur lors de la copie dans le presse-papiers :", err);
                    });
                });
            }
        }
    }

}

Éléments à modifier

Points clés pour les mises à jour de Koha

Dépendances