ScriptAlleNachrichtenGelesen

Aus Horizon
Wechseln zu: Navigation, Suche

Alle Berichte als gelesen markieren[Bearbeiten]

Dieses GreaseMonkey Script erweitert das Spiel um die Möglichkeit alle Berichte mit einem Knopfdruck als gelesen zu markieren.

Es wird ein neuer Knopf in der Berichteübersicht hinzugefügt der alle ungelesenen Berichte im Hintergrund herunterlädt (und sie komplett ignoriert, versprochen! ;) ) - der Horiversum-Server denkt dann die Nachrichten wären gelesen worden.

Anmerkungen[Bearbeiten]

Bisher fand kein ausführliches Testen statt - es wurde nur im Chromium Browser mit Tampermonkey getestet.

Code[Bearbeiten]

// ==UserScript==
// @name         Horiversum - mark all messages as read
// @namespace    http://tampermonkey.net/
// @version      2016.02.19
// @description  adds button to mark all messages as read
// @author       Dr.Ecksack
// @match        *horiversum.org/game/main/main.php?cmd=message*
// @match        *horiversum.org/game/main/main.php?cmd=message*
// @grant        none
// ==/UserScript==
/* jshint -W097 */
'use strict';

var markAllMessagesAsRead = function(){
    //check if all pages/messages has been loaded in the background
    var messagesReadSoFar = 0;
    var checkIfAllMessagesWereRead = function() {
        messagesReadSoFar += 1;
        if(messagesReadSoFar >= urls.length) {
            document.location.reload(true);
        }
    }
    
    //get links to all (unread) messages
    var classes = ['MessageReportDefault',
                   'MessageReportFleetArrive',
                   'MessageReportExplore',
                   'MessageReportResearch',
                   'MessageReportColonize',
                   'MessageReportSpy',
                   'MessageReportBattle',
                   'MessageReportAlliance',
                   'MessageReportBuddy',
                   'MessageReportTrade',
                   'MessageReportEvent',
                   'MessageReportResponse',
                   'MessageReportLink'];

    var urls = [];
    for (var i = 0; i < classes.length; i++){
        var links = document.getElementsByClassName(classes[i]);
        for (var j=0; j<links.length; j++){
            urls.push(links[j].href);
        }
    }
    
    //tell the user something is happening
    var readAllMessagesButton = document.getElementById('readAllMessagesButton');
    if (urls.length == 0){
        readAllMessagesButton.innerHTML = "Bereits alle gelesen";
    }else{
        readAllMessagesButton.innerHTML = "wird bearbeitet ...";
    }
    
    //get all the links via xmlhttprequest (hope the server marks them as read)
    for (var i=0; i< urls.length; i++){
        var oReq = new XMLHttpRequest();
        oReq.addEventListener("load", function(){
            checkIfAllMessagesWereRead();
        });
        oReq.open("GET", urls[i]);
        oReq.send();
    }
}


var addReadAllMessagesButton = function(){

    //only show it if there is a button "Alle berichte löschen" (not in message-read window etc.)
    if (document.querySelectorAll("[title='Alle Berichte löschen']").length == 0)
        return;
    
    var e = document.getElementsByClassName('MessageTableBottomCellLeft');
    
    var readAllMessagesButton = document.createElement('a');
    readAllMessagesButton.setAttribute('id', 'readAllMessagesButton');
	readAllMessagesButton.setAttribute('title', 'Alle Berichte als gelesenn');
    readAllMessagesButton.appendChild(document.createTextNode('Alle Berichte als gelesen'));
    readAllMessagesButton.setAttribute('class', 'SystemGfxButton light150 White');
    readAllMessagesButton.onclick = markAllMessagesAsRead;
    
    e[0].innerHTML = "";
    e[0].appendChild(readAllMessagesButton);
}

addReadAllMessagesButton();