• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Ignorieren grenzwertiger Events einfach gemacht

capoaira

Geomaster
Nach einem Gespräch auf einem Event über genau solche Events, habe ich ein kleines JavaScript geschrieben, welches den Eventkalender im Dashboard "säubert". Da wir scheinbar nicht die einzigen sind, die sich an diesen Events stören, teile ich es hier einfach mal.
Das Skript muss in Tampermonkey installiert werden (dem Add-on, indem auch der GClh läuft ;)).* Im Code müsst ihr einfach in dem Array** names die Namen eintragen und schon werden euch die Events im Dashboard Kalender nicht mehr begegnen.
Es reichen Teile des Namens, also statt »Mittagspause #815« nur »Mittagspause«. Dann werden alle Events, die »Mittagspause« im Namen haben, rausgefiltert.

Javascript:
// ==UserScript==
// @name         Ignore Events
// @version      0.1
// @description  Ignore Events by name
// @author       capoaira
// @match        ^https://www.geocaching.com/account/dashboard
// @require      http://code.jquery.com/jquery-3.6.1.min.js
// @icon         https://www.google.com/s2/favicons?sz=64&domain=geocaching.com
// @grant        none
// ==/UserScript==

/* global $ */

(function() {
    'use strict';
    /**
    * In folgender Liste die Namen der Events eintragen
    * Teilnamen reichen, sollten jedoch eideutig sein, damit nicht zuviele Events entfernt werden
    * Regex ist möglich
    */
    const names = [
        "Mittagspause",
        "Jünglingshöhe"
    ]

    var url = document.location.pathname

    if (url.match(/^\/account\/dashboard/)) {
        const waitForCal = (waitCount) => {
            if ($('#EventsCalendar')[0]) {
                // Removes Events on Blacklist from List, if a day is clicked
                const listObserver = new MutationObserver(() => {
                    listObserver.disconnect()
                    // Remove Events on Black List
                    $('.events-list-container ul .activity-item').each((i, e) => {
                        if ($(e).find('a h3').html().match(new RegExp(names.join('|')))) {
                            console.info("REMOVED: ", $(e).find('a h3').html())
                            $(e).remove()
                        }
                    })
                    // Hide List when empty
                    $('#EventsList')[0].style.display = $('.events-list-container ul li')[0] ? 'unset' : 'none'

                    listObserver.observe($('#EventsList')[0], {childList: true,attributes: true,subtree: true})
                })
                listObserver.observe($('#EventsList')[0], {childList: true,attributes: true,subtree: true})

                // Removes Event Days if there are only events from blacklist, when month get changed
                const daysObserver = new MutationObserver(()=>{
                    daysObserver.disconnect()
                    search()
                    daysObserver.observe($('#EventsCalendar')[0], {childList: true,subtree: true})
                })
                daysObserver.observe($('#EventsCalendar')[0], {childList: true,subtree: true})

                // Removes Event Days if there are only events from blacklist
                const search = () => {
                    $('.day.event:not(.isAttended)').each((j, e) => {
                        e.click()
                        let list = Array.from($('.events-list-container ul .activity-item'))
                        if (list.filter(elem => !$(elem).find('a h3').html().match(new RegExp(names.join('|')))) == 0) {
                            $(e).removeClass('event');
                        }
                    })
                    if ($(`.calendar-day-${new Date().toISOString().split('T')[0]}`)[0]) {
                        $(`.calendar-day-${new Date().toISOString().split('T')[0]}`).click()
                    }
                }

                search()
            } else {waitCount++; if (waitCount <= 100) setTimeout(function(){waitForCal(waitCount);}, 100);}
        }
        waitForCal(0)
    }
})();

* Zum Installieren müsst ihr die Übersicht der installierten Skripte in Tampermonkey öffnen, dann auf das kleine Plus "+" klicken und den Code von hier dort einfügen (mit angepassten Namen). Das Array könnt ihr jederzeit anpassen.

** Für die nicht-Informatiker: Array = Liste, im Code findet ihr ab Zeile 17 eine Liste, die kann auch nur ein Element haben. Wichtig ist, dass alle Einträge mit Komma getrennt werden und die Eventnamen selber in "" eingeschlossen werden (So wie in dem Beispiel)
 
Oben