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.
patron-username..col-sm-12 h1 pour récupérer le numéro de carte.span avec du texte souligné, ce contenu est privilégié ; sinon, le script extrait tous les chiffres présents dans le conteneur.circ_barcode pour traiter le numéro complet de la carte.//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);
});
});
}
}
}
}
patron-username, .col-sm-12 h1 et label.circ_barcode) si la structure HTML change.moremember.pl et circulation.pl.navigator.clipboard (disponible sur les navigateurs modernes).