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 http://i.imgur.com/wnWRfSt.png/tout_MZ.png
// @version 1.4
// @grant none
// ==/UserScript==
// Script MZ pour rajouter les boutons "Message suivant" et "Message precedent" dans la fenetre de lecture des messages
var urlMessageCourant;
var listeMessages;
// Ajout des KeyHandlers
function keyHandler(e) {
// DOM_VK_ESCAPE = 27 correspond a la touche Esc
if ((e.keyCode == 27) && (window.opener != null)) {
window.close();
}
}
// Recuperer la liste des URLs de messages depuis la page precedente 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;
}
// Creer un bouton ou un espace (direction : g = Precedent et d = Suivant)
function addButton(parent, direction, unread, title, cible) {
var bouton;
if (cible == null) {
bouton = document.createTextNode('');
} else {
bouton = document.createElement('IMG');
var sourceImg = '';
if (unread) {
sourceImg = 'http://games.mountyhall.com/mountyhall/Images/New.gif';
} else {
sourceImg = 'http://games.mountyhall.com/MH_Packs/packMH_parchemin/fleches/fleche' + direction + '.jpg';
}
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', '25%');
td.appendChild(bouton);
parent.appendChild(td);
}
// Trouver le message suivant et le message precedent 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 precedent non-lus dans la liste
function getSurroundingUnreadMessages(urlMessage, listeMessages) {
var retourArray = new Array();
var tmpArray = new Array();
// On recupere 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 fenetre mere
function getOtherMessage(e) {
window = window.opener.open(e.target.name, 'MsgView');
window.focus();
}
if (window.self.location.toString().indexOf('Messagerie/ViewMessage.php') !== -1 || window.self.location.toString().indexOf('Messagerie/ViewMessageBot.php') !== -1 || window.self.location.toString().indexOf('Messagerie/ViewMessageAlliance.php') !== -1) {
// Ecoute des touches pressees
document.addEventListener('keypress', keyHandler, true);
urlMessageCourant = window.self.location.toString();
listeMessages = getMessagesList();
// Rajout des fleches en haut de page
var arrowTable = document.createElement('DIV');
arrowTable.setAttribute('id', 'arrows');
var form = document.getElementsByName('msgForm')[0];
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, 'Precedent non-lu', surroundingsUnread[1]);
addButton(tr, 'g', false, 'Precedent', surroundings[1]);
addButton(tr, 'd', false, 'Suivant', surroundings[0]);
addButton(tr, 'd', true, 'Suivant non-lu', surroundingsUnread[0]);
}
/**************************************************************
* Liste des KeyCodes correspondant a chaque touche si besoin *
* pour ajout ulterieur de fonctionnalites *
**************************************************************/
/*
DOM_VK_CANCEL: 3,
DOM_VK_HELP: 6,
DOM_VK_BACK_SPACE: 8,
DOM_VK_TAB: 9,
DOM_VK_CLEAR: 12,
DOM_VK_RETURN: 13,
DOM_VK_ENTER: 14,
DOM_VK_SHIFT: 16,
DOM_VK_CONTROL: 17,
DOM_VK_ALT: 18,
DOM_VK_PAUSE: 19,
DOM_VK_CAPS_LOCK: 20,
DOM_VK_ESCAPE: 27,
DOM_VK_SPACE: 32,
DOM_VK_PAGE_UP: 33,
DOM_VK_PAGE_DOWN: 34,
DOM_VK_END: 35,
DOM_VK_HOME: 36,
DOM_VK_LEFT: 37,
DOM_VK_UP: 38,
DOM_VK_RIGHT: 39,
DOM_VK_DOWN: 40,
DOM_VK_PRINTSCREEN: 44,
DOM_VK_INSERT: 45,
DOM_VK_DELETE: 46,
DOM_VK_0: 48,
DOM_VK_1: 49,
DOM_VK_2: 50,
DOM_VK_3: 51,
DOM_VK_4: 52,
DOM_VK_5: 53,
DOM_VK_6: 54,
DOM_VK_7: 55,
DOM_VK_8: 56,
DOM_VK_9: 57,
DOM_VK_SEMICOLON: 59,
DOM_VK_EQUALS: 61,
DOM_VK_A: 65,
DOM_VK_B: 66,
DOM_VK_C: 67,
DOM_VK_D: 68,
DOM_VK_E: 69,
DOM_VK_F: 70,
DOM_VK_G: 71,
DOM_VK_H: 72,
DOM_VK_I: 73,
DOM_VK_J: 74,
DOM_VK_K: 75,
DOM_VK_L: 76,
DOM_VK_M: 77,
DOM_VK_N: 78,
DOM_VK_O: 79,
DOM_VK_P: 80,
DOM_VK_Q: 81,
DOM_VK_R: 82,
DOM_VK_S: 83,
DOM_VK_T: 84,
DOM_VK_U: 85,
DOM_VK_V: 86,
DOM_VK_W: 87,
DOM_VK_X: 88,
DOM_VK_Y: 89,
DOM_VK_Z: 90,
DOM_VK_CONTEXT_MENU: 93,
DOM_VK_NUMPAD0: 96,
DOM_VK_NUMPAD1: 97,
DOM_VK_NUMPAD2: 98,
DOM_VK_NUMPAD3: 99,
DOM_VK_NUMPAD4: 100,
DOM_VK_NUMPAD5: 101,
DOM_VK_NUMPAD6: 102,
DOM_VK_NUMPAD7: 103,
DOM_VK_NUMPAD8: 104,
DOM_VK_NUMPAD9: 105,
DOM_VK_MULTIPLY: 106,
DOM_VK_ADD: 107,
DOM_VK_SEPARATOR: 108,
DOM_VK_SUBTRACT: 109,
DOM_VK_DECIMAL: 110,
DOM_VK_DIVIDE: 111,
DOM_VK_F1: 112,
DOM_VK_F2: 113,
DOM_VK_F3: 114,
DOM_VK_F4: 115,
DOM_VK_F5: 116,
DOM_VK_F6: 117,
DOM_VK_F7: 118,
DOM_VK_F8: 119,
DOM_VK_F9: 120,
DOM_VK_F10: 121,
DOM_VK_F11: 122,
DOM_VK_F12: 123,
DOM_VK_F13: 124,
DOM_VK_F14: 125,
DOM_VK_F15: 126,
DOM_VK_F16: 127,
DOM_VK_F17: 128,
DOM_VK_F18: 129,
DOM_VK_F19: 130,
DOM_VK_F20: 131,
DOM_VK_F21: 132,
DOM_VK_F22: 133,
DOM_VK_F23: 134,
DOM_VK_F24: 135,
DOM_VK_NUM_LOCK: 144,
DOM_VK_SCROLL_LOCK: 145,
DOM_VK_COMMA: 188,
DOM_VK_PERIOD: 190,
DOM_VK_SLASH: 191,
DOM_VK_BACK_QUOTE: 192,
DOM_VK_OPEN_BRACKET: 219,
DOM_VK_BACK_SLASH: 220,
DOM_VK_CLOSE_BRACKET: 221,
DOM_VK_QUOTE: 222,
DOM_VK_META: 224
*/