PV Forum

Anpassungen für das PV Forum

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         PV Forum
// @namespace    https://greasyfork.org/users/156194
// @version      1.0
// @description  Anpassungen für das PV Forum
// @author       rabe85
// @match        https://www.photovoltaikforum.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=photovoltaikforum.com
// @license      MIT
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

// Todo:
// - Doppelter Klick nach Herabscrollen mit offenem Usermenü nötig, um es wieder zu öffnen

(function() {
    'use strict';

    function pv_forum() {

        // Funktion - Header nur beim Hochscrollen oben am Rand anzeigen
        var sticky_header_scroll_position_old = 0;
        function sticky_header_scroll() {
            var sticky_header_scroll_position = document.documentElement.scrollTop;
            if(sticky_header_scroll_position < sticky_header_scroll_position_old) {
                document.getElementsByClassName('pageHeaderPanel')[0].setAttribute('style','position: fixed;top: 0px;width: 100%;z-index: 23585;');
            } else {
                document.getElementsByClassName('pageHeaderPanel')[0].setAttribute('style','position: absolute;');
                var usermenu_close0 = document.getElementsByClassName('userMenu');
                for(var umc = 0, usermenu_close; !!(usermenu_close=usermenu_close0[umc]); umc++) {
                    usermenu_close.setAttribute('hidden','');
                }
            }
            sticky_header_scroll_position_old = sticky_header_scroll_position;
        }

        //Funktion - Usermenü bei normalem Header beim Herunterscrollen schließen
        function header_scroll_normal() {
            var header_scroll_position_normal = document.documentElement.scrollTop;
            if(header_scroll_position_normal > sticky_header_scroll_position_old) {
                var usermenu_close_normal0 = document.getElementsByClassName('userMenu');
                for(var umcn = 0, usermenu_close_normal; !!(usermenu_close_normal=usermenu_close_normal0[umcn]); umcn++) {
                    usermenu_close_normal.setAttribute('hidden','');
                }
            }
        }

        // Headerfunktion auswählen
        var header_auswahl = GM_getValue('header_auswahl', 'normal');
        var header_auswahl_text = 'Kopfzeile: Normal';
        var header_auswahl_status = 'fixed';

        switch(header_auswahl) {
            case 'fixed': // Header immer fest oben am Rand anzeigen
                document.getElementsByClassName('pageHeaderPanel')[0].setAttribute('style','position: fixed;top: 0px;width: 100%;z-index: 23585;');
                header_auswahl_text = 'Kopfzeile: Fixiert';
                header_auswahl_status = 'scroll';
                break;
            case 'scroll': // Header nur beim Hochscrollen oben am Rand anzeigen
                document.addEventListener("scroll", sticky_header_scroll, false);
                header_auswahl_text = 'Kopfzeile: Hochscrollen';
                header_auswahl_status = 'normal';
                break;
            default: // Header normal anzeigen
                document.getElementsByClassName('pageHeaderPanel')[0].setAttribute('style','position: absolute;');
                document.addEventListener("scroll", header_scroll_normal, false);
        }
        var usermenu = document.getElementsByClassName('userMenu userMenuControlPanel')[0];
        if (usermenu) {
            usermenu.getElementsByClassName('userMenuContent')[1].insertAdjacentHTML('afterend', '<div class="userMenuItem userMenuItemNarrow userMenuItemSingleLine"><div class="userMenuItemImage"><fa-icon size="16" name="minus" solid="" aria-hidden="true" translate="no"></fa-icon></div><div class="userMenuItemContent"><a id="header_auswahl_menu" data-status="' + header_auswahl_status + '" title="Klicken zum Wechseln zwischen Normal, Fixiert und Hochscrollen" style="cursor: pointer;color: inherit;">' + header_auswahl_text + '</a></div></div>');
        }
        function header_auswahl_speichern() {
            if(header_auswahl != document.getElementById('header_auswahl_menu').dataset.status) { GM_setValue('header_auswahl', document.getElementById('header_auswahl_menu').dataset.status); }
            //window.scrollTo(0, 0);
            location.reload();
        }
        document.getElementById('header_auswahl_menu').addEventListener("click", header_auswahl_speichern, false);

        // Werbung ausblenden
        var ad_thread0 = document.querySelectorAll('.wcfAdLocation, .wcfAdLocationHeaderContent, .wbbAdLocationIn1stPost, #ad_position_box, div[id^="google_ads_iframe"], iframe[name^="goog_topics_frame"], img[src^="https://ad-delivery.net/"], img[src^="https://ad.doubleclick.net/"], img[id^="adg-"], iframe[id^="adg-"], div[id^="adunit"], .symplr-ad-holder');
        for(var adt = 0, ad_thread; !!(ad_thread=ad_thread0[adt]); adt++) {
            ad_thread.remove();
        }

        var url_path = window.location.pathname;
        var url_array = url_path.split("/");

        // Rechte Seitenleiste auf den Übersichten ausblenden, Schlagworte unten anzeigen
        if(url_array[1] == 'board' || url_array[1] == 'active-topic-list' || url_array[1] == 'own-posts-as-threads' || url_array[1] == 'unread-thread-list' || url_array[1] == 'watched-thread-list' || url_array[1] == 'unanswered-thread-list') {
            var main = document.getElementsByClassName('main')[0];
            if(main) {
                var layoutboundary = main.getElementsByClassName('layoutBoundary')[0];
                if(layoutboundary) {
                    var schlagworte = layoutboundary.getElementsByClassName('sidebar boxesSidebarRight')[0].querySelector('section[data-box-identifier="com.woltlab.wbb.BoardTagCloud"]');
                    layoutboundary.getElementsByClassName('sidebar boxesSidebarRight')[0].remove();
                    layoutboundary.getElementsByClassName('content content--sidebar-right')[0].setAttribute('class','content');
                }
                if(schlagworte) {
                    main.insertAdjacentHTML('afterend', '<div style="border: 1px solid var(--wcfContentContainerBorder);background-color: var(--wcfContentContainerBackground);border-radius: 10px;padding: 20px;margin: 20px;margin-top: 0px;">' + schlagworte.innerHTML + '</div>');
                }
            }
        }

    }

    // DOM vollständig aufgebaut?
    if (/complete|interactive|loaded/.test(document.readyState)) {
        pv_forum();
    } else {
        document.addEventListener("DOMContentLoaded", pv_forum, false);
    }

})();