您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Boutons "Message suivant" et "Message precedent" dans la fenetre de lecture des messages
当前为
// ==UserScript== // @name MH - Raistlin - Previous/Next Msg // @namespace MH // @description Boutons "Message suivant" et "Message precedent" dans la fenetre de lecture des messages // @include */Messagerie/ViewMessage.php* // @include */Messagerie/ViewMessageBot.php* // @include */Messagerie/ViewMessageAlliance.php* // @icon https://xballiet.github.io/ImagesMH/MZ.png // @version 1.37 // @grant none // @require https://update.gf.qytechs.cn/scripts/23602/Tout_MZ.user.js // ==/UserScript== // Script MZ pour rajouter les boutons "Message suivant" et "Message précédent" dans la fenêtre de lecture des messages var urlMessageCourant; var listeMessages; function isPage(url) { return window.location.pathname.indexOf("/mountyhall/" + url) == 0; } // Ajout des KeyHandlers function keyHandler(e) { // DOM_VK_ESCAPE = 27 correspond à la touche Esc if ((e.keyCode == 27) && (window.opener != null)) { window.close(); } } // Récupérer la liste des URLs de messages depuis la page précédente sous forme de tableau function getMessagesList() { var maListe = new Array(); var fenetreSource = window.opener; if (fenetreSource == null || fenetreSource.document == null) { return false; } else { documentSource = fenetreSource.document; } var listeElems = documentSource.evaluate("//table//tr[descendant::a[starts-with(@href, 'ViewMessage')]]", documentSource, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var isNew = false; var elemCourant = listeElems.iterateNext(); while (elemCourant) { var newMsg = documentSource.evaluate(".//td//img[contains(@src, 'New.gif')]", elemCourant, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (newMsg.singleNodeValue != null) { isNew = true; } else { isNew = false; } var viewMsg = documentSource.evaluate(".//td//a[starts-with(@href, 'ViewMessage')]", elemCourant, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (viewMsg != null) { maListe.push(new Array(viewMsg.singleNodeValue.href, isNew)); } elemCourant = listeElems.iterateNext(); } return maListe; } // Créer un bouton ou un espace (direction : g = Précédent et d = Suivant) function addButton(parent, direction, unread, title, cible) { var bouton; var largeurImg = '12%'; if (cible == null) { bouton = document.createTextNode(''); } else { bouton = document.createElement('IMG'); var sourceImg = '/MH_Packs/packMH_parchemin/fleches/fleche' + direction + '.jpg'; if (unread) { sourceImg = '/mountyhall/Images/New.gif'; largeurImg = '16%'; } bouton.setAttribute('src', sourceImg); bouton.setAttribute('name', cible[0]); bouton.setAttribute('title', title); bouton.addEventListener('click', getOtherMessage, false); } var td = document.createElement('TD'); td.setAttribute('align', 'center'); td.setAttribute('width', largeurImg); td.appendChild(bouton); parent.appendChild(td); } // Créer un bouton pour check/uncheck function addButtonJustToggle(parent) { var bouton = document.createElement('IMG'); bouton.setAttribute('src', 'https://xballiet.github.io/ImagesMH/check.png'); bouton.setAttribute('name', 'toggleBtn'); bouton.setAttribute('title', 'Cocher / Décocher'); bouton.addEventListener('click', toggleMessage, false); var td = document.createElement('TD'); td.setAttribute('align', 'center'); td.setAttribute('width', '12%'); td.appendChild(bouton); parent.appendChild(td); } // Créer un bouton ou un espace pour check/uncheck et aller au message précédent/suivant (direction : g = Précédent et d = Suivant) function addButtonToggle(parent, direction, title, cible) { var bouton; if (cible == null) { bouton = document.createTextNode(''); } else { bouton = document.createElement('IMG'); bouton.setAttribute('src', 'https://xballiet.github.io/ImagesMH/check' + direction + '.png'); bouton.setAttribute('name', cible[0]); bouton.setAttribute('title', title); bouton.addEventListener('click', toggleMessage, false); bouton.addEventListener('click', getOtherMessage, false); } var td = document.createElement('TD'); td.setAttribute('align', 'center'); td.setAttribute('width', '16%'); td.appendChild(bouton); parent.appendChild(td); } // Trouver le message suivant et le message précédent dans la liste function getSurroundingMessages(urlMessage, listeMessages) { var retourArray = new Array(); for (i = 0 ; i < listeMessages.length ; i++) { if (listeMessages[i][0] == urlMessage) { if (i > 0) { retourArray[0] = listeMessages[i - 1]; } if (i < listeMessages.length - 1) { retourArray[1] = listeMessages[i + 1]; } } } return retourArray; } // Trouver le message suivant et le message précédent non-lus dans la liste function getSurroundingUnreadMessages(urlMessage, listeMessages) { var retourArray = new Array(); var tmpArray = new Array(); // On récupère uniquement les nouveaux messages for (var i = 0 ; i < listeMessages.length ; i++) { if (listeMessages[i][1] || (listeMessages[i][0] == urlMessage)) { tmpArray.push(listeMessages[i]); } } // Et on fait comme avant for (var i = 0 ; i < tmpArray.length ; i++) { if (tmpArray[i][0] == urlMessage) { if (i > 0) { retourArray[0] = tmpArray[i - 1]; } if (i < tmpArray.length-1) { retourArray[1] = tmpArray[i + 1]; } } } return retourArray; } // Fermer le message en cours, ouvrir le message depuis la fenêtre mère function getOtherMessage(e) { window = window.opener.open(e.target.name, 'MsgView'); window.focus(); } // Fonction utilisée quand on clique sur le bouton pour cocher / décocher le message dans la fenêtre principale function toggleMessage() { var fenetreSource = window.opener; if (fenetreSource == null || fenetreSource.document == null) { return false; } else { documentSource = fenetreSource.document; } var msgId = window.self.location.toString().split("msgId=")[1]; var messageCourant = documentSource.evaluate("//table//tr//td//input[contains(@value, " + msgId + ")]", documentSource, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (messageCourant.checked == undefined || messageCourant.checked == false) { messageCourant.checked = true; } else { messageCourant.checked = false; } } if (isPage("Messagerie/ViewMessage")) { // Écoute des touches pressées document.addEventListener('keypress', keyHandler, true); urlMessageCourant = window.self.location.toString(); listeMessages = getMessagesList(); // Rajout des flèches en haut de page var arrowTable = document.createElement('DIV'); arrowTable.setAttribute('id', 'arrows'); //var form = document.getElementsByName('msgForm')[0]; var form = document.getElementById('p_re'); form.insertBefore(arrowTable, form.firstChild); var maTable = document.createElement('table'); maTable.setAttribute('width', '98%'); maTable.setAttribute('border', '0'); maTable.setAttribute('bgcolor', '#000000'); maTable.setAttribute('align', 'center'); maTable.setAttribute('cellpadding', '2'); maTable.setAttribute('cellspacing', '1'); maTable.setAttribute('id', 'arrowTable'); var mytbody = document.createElement('tbody'); maTable.appendChild(mytbody); arrowTable.appendChild(maTable); var tr = document.createElement('TR'); tr.setAttribute('bgcolor', '#CED2F7'); tr.setAttribute('class', 'mh_tdpage'); tr.setAttribute('align', 'center'); mytbody.appendChild(tr); // On affiche les boutons ou des espaces vides var surroundings = getSurroundingMessages(urlMessageCourant, listeMessages); var surroundingsUnread = getSurroundingUnreadMessages(urlMessageCourant, listeMessages); addButton(tr, 'g', true, 'Précédent non-lu', surroundingsUnread[1]); addButton(tr, 'g', false, 'Précédent', surroundings[1]); addButtonToggle(tr, 'g', 'Cocher / Décocher + Précédent', surroundings[1]); addButtonJustToggle(tr); addButtonToggle(tr, 'd', 'Cocher / Décocher + Suivant', surroundings[0]); addButton(tr, 'd', false, 'Suivant', surroundings[0]); addButton(tr, 'd', true, 'Suivant non-lu', surroundingsUnread[0]); if (surroundings == '' && surroundingsUnread == '') { form.removeChild(arrowTable); } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址