Jump to content

MediaWiki:Common.js: Difference between revisions

From International Treaty Law Wiki
No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 847: Line 847:


/* =========================================================
/* =========================================================
/* SIDEBAR: convert sidebar links to actionable markers + attach handler */
/* SIDEBAR ACTIONS: intercept internal placeholder links and call wrappers */
(function () {
(function () {
   'use strict';
   'use strict';
Line 854: Line 854:
     $(function () {
     $(function () {


      // Prevent double attachment
       if (window.__mw_sidebar_actions_installed) {
       if (window.__mw_sidebar_action_installed) {
         console.log('SIDEBAR: actions already installed');
         console.log('SIDEBAR: action installer already present');
         return;
         return;
       }
       }
       window.__mw_sidebar_action_installed = true;
       window.__mw_sidebar_actions_installed = true;


       console.log('SIDEBAR: action installer starting');
       console.log('SIDEBAR: installing action interceptors');


       // Helper: find sidebar region (Vector)
       // Patterns for internal placeholder links (adjust if you used different names)
       var sidebarSelectorCandidates = [
       var placeholders = {
         '#p-navigation', // older skins
         share: /\/?ShareAction$/i,
        '#mw-panel',     // fallback
         pdf: /\/?PDFAction$/i
         '#p-views',      // sometimes
       };
        '#mw-sidebar'    // generic
       ];


       var sidebar = null;
       // Ensure wrapper fallbacks exist
       for (var i = 0; i < sidebarSelectorCandidates.length; i++) {
       if (typeof window.mwCustomShare !== 'function') {
         var el = document.querySelector(sidebarSelectorCandidates[i]);
         window.mwCustomShare = function () {
         if (el) { sidebar = el; break; }
          if (navigator.share) {
            navigator.share({ title: document.title, url: location.href });
          } else {
            prompt('Copy link:', location.href);
          }
         };
        console.log('SIDEBAR: installed mwCustomShare fallback');
       }
       }


       // If we can't find a sidebar container, still try to search for links globally
       if (typeof window.mwCustomPDF !== 'function') {
      var searchRoot = sidebar || document;
         window.mwCustomPDF = function () { window.print(); };
 
        console.log('SIDEBAR: installed mwCustomPDF fallback');
      // Normalize text helper
      function normText(s) {
         return (s || '').replace(/[\u{1F300}-\u{1F6FF}]/gu, '').trim().toLowerCase();
       }
       }


       // Find sidebar links by visible text and convert them to markers
       // Capture-phase listener to catch clicks before navigation
      var links = Array.prototype.slice.call(searchRoot.querySelectorAll('a'));
      links.forEach(function (a) {
        var t = normText(a.textContent || a.innerText || '');
        // Match exact or near-exact labels; adjust if your sidebar uses different labels
        if (t === 'share' || t === '🔗 share' || t.indexOf('share') !== -1 && t.length < 20) {
          // convert to marker only if it's not an external URL
          var href = (a.getAttribute('href') || '').trim();
          if (!/^https?:\/\//i.test(href) && href !== '#' && href !== 'javascript:void(0)') {
            // set marker href and attribute
            a.setAttribute('href', '#');
            a.setAttribute('data-action', 'share');
            a.setAttribute('role', 'button');
            a.setAttribute('aria-label', 'Share this page');
            console.log('SIDEBAR: converted link to share marker ->', a);
          }
        } else if (t === 'pdf' || t === '📄 pdf' || t.indexOf('pdf') !== -1 && t.length < 20) {
          var href2 = (a.getAttribute('href') || '').trim();
          if (!/^https?:\/\//i.test(href2) && href2 !== '#' && href2 !== 'javascript:void(0)') {
            a.setAttribute('href', '#');
            a.setAttribute('data-action', 'pdf');
            a.setAttribute('role', 'button');
            a.setAttribute('aria-label', 'Download PDF / Print');
            console.log('SIDEBAR: converted link to pdf marker ->', a);
          }
        }
        // Do not touch external links like Special Search or GitHub
      });
 
      // Attach a capture-phase click handler to catch clicks early
       document.addEventListener('click', function (ev) {
       document.addEventListener('click', function (ev) {
         try {
         try {
Line 920: Line 891:
           if (!a) return;
           if (!a) return;


           var action = a.getAttribute('data-action');
           var href = (a.getAttribute('href') || '').trim();
          if (!action) return;
           var hrefPath = href.split('?')[0].split('#')[0]; // normalize
 
          // Prevent default navigation for our markers
          ev.preventDefault();
           ev.stopPropagation();
 
          console.log('SIDEBAR: marker clicked action=', action);


           if (action === 'share') {
          // If link matches our placeholders, intercept
             if (typeof window.mwCustomShare === 'function') {
           if (placeholders.share.test(hrefPath)) {
              try { window.mwCustomShare(); }
             ev.preventDefault();
              catch (err) { console.error('SIDEBAR: mwCustomShare error', err); }
            ev.stopPropagation();
             } else {
            console.log('SIDEBAR: intercepted ShareAction -> calling mwCustomShare');
              // fallback
             try { window.mwCustomShare(); } catch (err) { console.error('mwCustomShare error', err); }
              if (navigator.share) {
                navigator.share({ title: document.title, url: location.href });
              } else {
                prompt('Copy link:', location.href);
              }
            }
             return;
             return;
           }
           }


           if (action === 'pdf') {
           if (placeholders.pdf.test(hrefPath)) {
             if (typeof window.mwCustomPDF === 'function') {
             ev.preventDefault();
              try { window.mwCustomPDF(); }
            ev.stopPropagation();
              catch (err) { console.error('SIDEBAR: mwCustomPDF error', err); }
            console.log('SIDEBAR: intercepted PDFAction -> calling mwCustomPDF');
            } else {
            try { window.mwCustomPDF(); } catch (err) { console.error('mwCustomPDF error', err); }
              window.print();
            }
             return;
             return;
           }
           }


          // Do not touch external links (Special Search, GitHub etc.)
         } catch (e) {
         } catch (e) {
           console.error('SIDEBAR: click handler exception', e);
           console.error('SIDEBAR: click handler exception', e);
         }
         }
       }, true); // capture
       }, true);


       console.log('SIDEBAR: action installer finished');
       console.log('SIDEBAR: action interceptors installed');
     });
     });
   });
   });
})();
})();

Revision as of 01:19, 21 May 2026

/* Any JavaScript here will be loaded for all users on every page load. */
/* Optimized Vector-2022 Utilities + Search Extensions + InfinityFree Failover */

(function () {

    'use strict';

    mw.loader.using(['mediawiki.util', 'jquery']).then(function () {

        $(function () {

            /* =========================================================
               GLOBAL MEDIAWIKI VARIABLES
            ========================================================= */

            var ns       = mw.config.get('wgCanonicalNamespace');
            var special  = mw.config.get('wgCanonicalSpecialPageName');
            var page     = mw.config.get('wgPageName');
            var groups   = mw.config.get('wgUserGroups') || [];
            var userName = mw.config.get('wgUserName');
            var wikiTitle = mw.config.get('wgTitle') || document.title;

            var isAdmin =
                groups.includes('sysop') ||
                groups.includes('bureaucrat');

            var isAnon = (userName === null);

            /* =========================================================
               GLOBAL CSS
            ========================================================= */

            if (!document.getElementById('mw-global-custom-css')) {

                var globalCss = `
                @media print {

                    #mw-page-base,
                    #mw-head-base,
                    #mw-navigation,
                    #mw-panel,
                    #footer,
                    .vector-header,
                    .vector-page-toolbar,
                    .vector-toc,
                    .vector-sticky-header,
                    .vector-page-tools,
                    .vector-menu,
                    .mw-indicators,
                    .vector-user-links,
                    .vector-search-box,
                    .vector-pinned-container {
                        display: none !important;
                    }

                    #content,
                    .mw-body,
                    .mw-content-container,
                    .mw-body-content {
                        margin: 0 !important;
                        padding: 0 !important;
                        width: 100% !important;
                        max-width: none !important;
                    }

                    body,
                    #content {
                        background: white !important;
                    }

                    .mw-body-content {
                        font-size: 14pt !important;
                        line-height: 1.5 !important;
                    }
                }

                #extra-search-results {
                    margin-top: 2em;
                    border-top: 1px solid #ddd;
                    padding-top: 1em;
                }

                .search-collapse-section {
                    margin-bottom: 1.5em;
                    border: 1px solid #d8dee8;
                    border-radius: 6px;
                    overflow: hidden;
                    background: #ffffff;
                }

                .search-collapse-header {
                    background: #f3f6fb;
                    padding: 12px 15px;
                    cursor: pointer;
                    font-weight: 600;
                    transition: background .15s ease;
                    user-select: none;
                }

                .search-collapse-header:hover {
                    background: #e9eef7;
                }

                .search-collapse-header::before {
                    content: "▼ ";
                    display: inline-block;
                    transition: transform .2s ease;
                }

                .search-collapse-header.collapsed::before {
                    transform: rotate(-90deg);
                }

                .search-collapse-content {
                    padding: 15px;
                    display: block;
                    background: #fff;
                }

                .search-collapse-content.collapsed {
                    display: none;
                }

                .gcse-searchresults-only {
                    min-height: 200px;
                }

                .search-engine-link {
                    display: block;
                    padding: 8px 0;
                    font-size: 15px;
                    border-bottom: 1px solid #f0f0f0;
                }

                .search-engine-link:last-child {
                    border-bottom: none;
                }

                .search-engine-link a {
                    text-decoration: none;
                    color: #0645ad;
                }

                .search-engine-link a:hover {
                    text-decoration: underline;
                }

                .pse-direct-link {
                    margin-bottom: 15px;
                    padding: 10px;
                    background: #eef5ff;
                    border-radius: 5px;
                }

                .pse-direct-link a {
                    color: #005fcc;
                    text-decoration: none;
                    font-weight: 500;
                }

                .pse-direct-link a:hover {
                    text-decoration: underline;
                }

                .mw-recommended-footer {
                    margin-top: 30px;
                    padding: 15px;
                    border: 2px solid #3a6ea5;
                    background: #eef4fb;
                    border-radius: 6px;
                    color: #1a1a1a;
                    font-size: 14px;
                    line-height: 1.5;
                }

                .mw-recommended-footer-title {
                    font-size: 18px;
                    font-weight: bold;
                    color: #2a4d7a;
                    margin-bottom: 10px;
                }

                .mw-recommended-footer-subtitle {
                    font-size: 18px;
                    font-weight: bold;
                    color: #2a4d7a;
                    margin: 20px 0 10px;
                }

                .mw-recommended-footer ul {
                    margin-left: 15px;
                }

                .mw-recommended-footer a {
                    word-break: break-word;
                }
                `;

                var styleEl = document.createElement('style');

                styleEl.id = 'mw-global-custom-css';
                styleEl.type = 'text/css';

                styleEl.appendChild(
                    document.createTextNode(globalCss)
                );

                document.head.appendChild(styleEl);
            }

            /* =========================================================
               VECTOR-2022 ACTION TOOLBAR (TOOLS-MENÜ)
            ========================================================= */

            if (mw.config.get('wgNamespaceNumber') === 0) {

                var toolbar =
                    document.querySelector(
                        '#vector-page-tools .vector-menu-content-list'
                    );

                if (toolbar && !document.getElementById('mw-custom-toolbar-buttons')) {

                    var currentTitle = encodeURIComponent(wikiTitle);

                    var toolbarHtml = `
                    <div id="mw-custom-toolbar-buttons">

                        <li class="vector-menu-content-list-item">
                            <a href="#" class="mw-share-trigger" title="Share this page">Share</a>
                        </li>

                        <li class="vector-menu-content-list-item">
                            <a href="#" class="mw-print-trigger" title="Download clean PDF">PDF</a>
                        </li>

                        <li class="vector-menu-content-list-item">
                            <a href="https://cse.google.com/cse?cx=86021a982e3a14848&q=${currentTitle}"
                               target="_blank" rel="noopener noreferrer">Special Search</a>
                        </li>

                        <li class="vector-menu-content-list-item">
                            <a href="https://github.com/MrAnonymousNWO/One_World/wiki/search?q=${currentTitle}"
                               target="_blank" rel="noopener noreferrer">One World Wiki</a>
                        </li>

                        <li class="vector-menu-content-list-item">
                            <a href="https://github.com/ET-Pioneer/Electric-Technocracy-Pioneers-Community/wiki/search?q=${currentTitle}"
                               target="_blank" rel="noopener noreferrer">E.Tech. Wiki</a>
                        </li>

                    </div>
                    `;

                    toolbar.insertAdjacentHTML('beforeend', toolbarHtml);
                }
            }
/* =========================================================
   GLOBAL EVENT DELEGATION
========================================================= */

            document.addEventListener('click', function (e) {

                /* PDF */

                var printTrigger =
                    e.target.closest('.mw-print-trigger');

                if (printTrigger) {

                    e.preventDefault();

                    window.print();

                    return;
                }

                /* SHARE */

                var shareTrigger =
                    e.target.closest('.mw-share-trigger');

                if (shareTrigger) {

                    e.preventDefault();

                    if (navigator.share) {

                        navigator.share({
                            title: document.title,
                            url: location.href
                        });

                    } else {

                        prompt('Copy link:', location.href);
                    }

                    return;
                }

                /* COLLAPSE TOGGLE */

                var header =
                    e.target.closest('.search-collapse-header');

                if (header) {

                    var targetId =
                        header.getAttribute('data-target');

                    var content =
                        document.getElementById(targetId);

                    header.classList.toggle('collapsed');

                    if (content) {

                        content.classList.toggle('collapsed');
                    }

                    return;
                }
            });

            /* =========================================================
               SEARCH PAGE EXTENSIONS
            ========================================================= */

            if (special === 'Search') {

                var query =
                    mw.util.getParamValue('search');

                if (query) {

                    var encodedQuery =
                        encodeURIComponent(query);

                    var pagination =
                        $('.mw-search-pager-bottom, .results-info').last();

                    var insertPoint =
                        pagination.length
                            ? pagination
                            : $('#mw-search-results');

                    if (insertPoint.length) {

                        var container =
                            document.createElement('div');

                        container.id =
                            'extra-search-results';

                        /* =============================================
                           PSE SECTION
                        ============================================= */

                        var pseSection =
                            document.createElement('div');

                        pseSection.className =
                            'search-collapse-section';

                        var pseDirectUrl =
                            'https://cse.google.com/cse?cx=86021a982e3a14848&q=' +
                            encodedQuery;

                        pseSection.innerHTML = `
                        <div class="search-collapse-header"
                             data-target="pse-content">
                             Programmable Search Engine
                        </div>

                        <div class="search-collapse-content"
                             id="pse-content">

                            <div class="pse-direct-link">
                                <a href="${pseDirectUrl}"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                    🔗 Open in Programmable Search Engine
                                </a>
                            </div>

                            <div class="gcse-searchresults-only"
                                 data-queryParameterName="gq">
                            </div>

                        </div>
                        `;

                        container.appendChild(pseSection);

                        /* =============================================
                           GITHUB WIKIS
                        ============================================= */

                        var githubSection =
                            document.createElement('div');

                        githubSection.className =
                            'search-collapse-section';

                        githubSection.innerHTML = `
                        <div class="search-collapse-header"
                             data-target="github-wikis-content">
                             GitHub Wikis
                        </div>

                        <div class="search-collapse-content"
                             id="github-wikis-content">

                            <div class="search-engine-link">
                                <a href="https://github.com/ET-Pioneer/Electric-Technocracy-Pioneers-Community/wiki/search?q=${encodedQuery}"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                    📘 Search in Electric Technocracy Pioneers GitHub Wiki
                                </a>
                            </div>

                            <div class="search-engine-link">
                                <a href="https://github.com/MrAnonymousNWO/One_World/wiki/search?q=${encodedQuery}"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                    📗 Search in One World GitHub Wiki
                                </a>
                            </div>

                        </div>
                        `;

                        container.appendChild(githubSection);

                        /* =============================================
                           SEARCH ENGINES
                        ============================================= */

                        var searchEngines = [
                            {
                                name: 'Google',
                                icon: '🔍',
                                url: 'https://www.google.com/search?q=' + encodedQuery
                            },
                            {
                                name: 'Bing',
                                icon: '🔎',
                                url: 'https://www.bing.com/search?q=' + encodedQuery
                            },
                            {
                                name: 'DuckDuckGo',
                                icon: '🦆',
                                url: 'https://duckduckgo.com/?q=' + encodedQuery
                            },
                            {
                                name: 'Yandex',
                                icon: '🔍',
                                url: 'https://yandex.com/search/?text=' + encodedQuery
                            },
                            {
                                name: 'Brave Search',
                                icon: '🦁',
                                url: 'https://search.brave.com/search?q=' + encodedQuery
                            },
                            {
                                name: 'Ecosia',
                                icon: '🌳',
                                url: 'https://www.ecosia.org/search?q=' + encodedQuery
                            }
                        ];

                        var searchLinksHtml = '';

                        searchEngines.forEach(function (engine) {

                            searchLinksHtml += `
                            <div class="search-engine-link">
                                <a href="${engine.url}"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                    ${engine.icon} Search on ${engine.name}
                                </a>
                            </div>
                            `;
                        });

                        var searchSection =
                            document.createElement('div');

                        searchSection.className =
                            'search-collapse-section';

                        searchSection.innerHTML = `
                        <div class="search-collapse-header"
                             data-target="search-engines-content">
                             Alternative Search Engines
                        </div>

                        <div class="search-collapse-content"
                             id="search-engines-content">
                             ${searchLinksHtml}
                        </div>
                        `;

                        container.appendChild(searchSection);

                        /* =============================================
                           FOOTER BLOCK
                        ============================================= */

                        var footerBlock =
                            document.createElement('div');

                        footerBlock.className =
                            'mw-recommended-footer';

                        footerBlock.innerHTML = `
                        <div class="mw-recommended-footer-title">
                            Recommended GPT Tools by ChatGPT
                        </div>

                        <ul>

                            <li>
                                <b>World Succession Deed GPT</b><br>
                                <a href="https://chatgpt.com/g/g-69d82340e27081918e08803ce62e46e1-new-international-law-world-succession-deed-1400"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://chatgpt.com/...world-succession-deed-1400
                                </a>
                            </li>

                            <li>
                                <b>Juridical Singularity GPT</b><br>
                                <a href="https://chatgpt.com/g/g-69d95a89896081918fcb207e1665bf26-juridical-singularity-domestic-international-law"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://chatgpt.com/...juridical-singularity
                                </a>
                            </li>

                            <li>
                                <b>Electric Technocracy GPT</b><br>
                                <a href="https://chatgpt.com/g/g-69d8635591d48191adc315b8f2b8be32-electric-technocracy-a-new-form-of-government"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://chatgpt.com/...electric-technocracy
                                </a>
                            </li>

                            <li>
                                <b>AGE OF TRANSITION & THE MENTAL SINGULARITY GPT</b><br>
                                <a href="https://chatgpt.com/g/g-69d99f78d6a081919cd29d8d33531852-age-of-transition-the-mental-singularity"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://chatgpt.com/...mental-singularity
                                </a>
                            </li>

                        </ul>

                        <div class="mw-recommended-footer-subtitle">
                            Recommended External Resources
                        </div>

                        <ul>

                            <li>
                                🌐 <b>WSD – World Succession Deed 1400/98</b><br>
                                <a href="https://worldsold.wixsite.com/world-sold/en"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://worldsold.wixsite.com/world-sold/en
                                </a>
                            </li>

                            <li>
                                🌐 <b>WSD – Global Legal Succession Archive</b><br>
                                <a href="https://worldsold.wixsite.com/global-archive"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://worldsold.wixsite.com/global-archive
                                </a>
                            </li>

                            <li>
                                🌐 <b>Electric Technocracy</b><br>
                                <a href="https://worldsold.wixsite.com/electric-technocracy"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://worldsold.wixsite.com/electric-technocracy
                                </a>
                            </li>

                            <li>
                                📘 <b>Read the eBooks & Download free PDF</b><br>
                                <a href="https://4u.free.nf"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://4u.free.nf
                                </a>
                            </li>

                            <li>
                                🎥 <b>YouTube Channel</b><br>
                                <a href="https://www.youtube.com/@Staatensukzessionsurkunde-1400"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://youtube.com/@Staatensukzessionsurkunde-1400
                                </a>
                            </li>

                            <li>
                                🎙️ <b>Podcast Show</b><br>
                                <a href="https://creators.spotify.com/pod/show/world-succession-deed"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://spotify.com/...world-succession-deed
                                </a>
                            </li>

                            <li>
                                🚀 <b>Start-Page WSD & Electric Paradise</b><br>
                                <a href="https://electric-paradise.start.page"
                                   target="_blank"
                                   rel="noopener noreferrer">
                                   https://electric-paradise.start.page
                                </a>
                            </li>

                        </ul>
                        `;

                        container.appendChild(footerBlock);

                        /* =============================================
                           INSERT SEARCH BLOCK
                        ============================================= */

                        if (pagination.length) {

                            pagination.after(container);

                        } else {

                            insertPoint.after(container);
                        }

                        /* =============================================
                           GOOGLE CSE LAZY LOAD
                        ============================================= */

                        function loadGoogleCSE() {

                            if (window.googleCSELoaded) {
                                return;
                            }

                            window.googleCSELoaded = true;

                            window.__gcse = {

                                parsetags: 'explicit',

                                callback: function () {

                                    if (
                                        !window.google ||
                                        !google.search ||
                                        !google.search.cse
                                    ) {
                                        return;
                                    }

                                    var element =
                                        document.querySelector(
                                            '.gcse-searchresults-only'
                                        );

                                    if (!element) {
                                        return;
                                    }

                                    google.search.cse.element.render({
                                        div: element,
                                        tag: 'searchresults-only',
                                        gname: 'pse_search'
                                    });

                                    var searchControl =
                                        google.search.cse.element.getElement(
                                            'pse_search'
                                        );

                                    if (searchControl) {

                                        searchControl.execute(query);
                                    }
                                }
                            };

                            var s =
                                document.createElement('script');

                            s.async = true;

                            s.src =
                                'https://cse.google.com/cse.js?cx=86021a982e3a14848';

                            document.head.appendChild(s);
                        }

                        if ('IntersectionObserver' in window) {

                            var observer =
                                new IntersectionObserver(
                                    function (entries) {

                                        if (
                                            entries[0].isIntersecting
                                        ) {

                                            loadGoogleCSE();

                                            observer.disconnect();
                                        }

                                    },
                                    {
                                        rootMargin: '300px'
                                    }
                                );

                            observer.observe(container);

                        } else {

                            setTimeout(loadGoogleCSE, 1000);
                        }
                    }
                }
            }

            /* =========================================================
               INFINITYFREE FAILOVER
            ========================================================= */

            if (isAdmin) return;

            if (page === 'MediaWiki:Common.js') return;

            var isArticle = (ns === '');
            var isSearch  = (special === 'Search');

            if (!isArticle && !isSearch) return;

            setTimeout(function () {

                if (!document.body) return;

                var html =
                    document.body.innerHTML || '';

                var text =
                    document.body.innerText || '';

                var injectedHTML =

                    html.includes('infinityfree.net/errors/') ||

                    html.includes('free hosting limits') ||

                    html.includes(
                        'This site is suspended due to exceeding'
                    ) ||

                    (
                        html.includes('InfinityFree') &&
                        html.includes('suspended')
                    );

                if (injectedHTML && isAnon) {

                    window.location.href =
                        'https://singularity-news.github.io/wiki/';
                }

            }, 1000);

        });

    });

/* =========================================================
   DUPLICATE TOOLBAR (auskommentiert, bleibt erhalten aber inaktiv)
   Die originale Insertions‑Logik ist hier auskommentiert, damit
   die Sidebar‑Buttons nicht doppelt angezeigt werden.
   Entferne die Kommentarzeichen (/* ... * /) um ihn wieder zu aktivieren.
========================================================= */

/*
if (mw.config.get('wgNamespaceNumber') === 0) {

    var toolbar =
        document.querySelector(
            '#vector-page-tools .vector-menu-content-list'
        );

    if (toolbar && !document.getElementById('mw-custom-toolbar-buttons')) {

        var currentTitle = encodeURIComponent(wikiTitle);

        var toolbarHtml = `
        <div id="mw-custom-toolbar-buttons">

            <li class="vector-menu-content-list-item">
                <a href="#" class="mw-share-trigger" title="Share this page">Share</a>
            </li>

            <li class="vector-menu-content-list-item">
                <a href="#" class="mw-print-trigger" title="Download clean PDF">PDF</a>
            </li>

            <li class="vector-menu-content-list-item">
                <a href="https://cse.google.com/cse?cx=86021a982e3a14848&q=${currentTitle}"
                   target="_blank" rel="noopener noreferrer">Special Search</a>
            </li>

            <li class="vector-menu-content-list-item">
                <a href="https://github.com/MrAnonymousNWO/One_World/wiki/search?q=${currentTitle}"
                   target="_blank" rel="noopener noreferrer">One World Wiki</a>
            </li>

            <li class="vector-menu-content-list-item">
                <a href="https://github.com/ET-Pioneer/Electric-Technocracy-Pioneers-Community/wiki/search?q=${currentTitle}"
                   target="_blank" rel="noopener noreferrer">E.Tech. Wiki</a>
            </li>

        </div>
        `;

        toolbar.insertAdjacentHTML('beforeend', toolbarHtml);
    }
}
*/

/* =========================================================
/* SIDEBAR ACTIONS: intercept internal placeholder links and call wrappers */
(function () {
  'use strict';

  mw.loader.using(['mediawiki.util','jquery']).then(function () {
    $(function () {

      if (window.__mw_sidebar_actions_installed) {
        console.log('SIDEBAR: actions already installed');
        return;
      }
      window.__mw_sidebar_actions_installed = true;

      console.log('SIDEBAR: installing action interceptors');

      // Patterns for internal placeholder links (adjust if you used different names)
      var placeholders = {
        share: /\/?ShareAction$/i,
        pdf: /\/?PDFAction$/i
      };

      // Ensure wrapper fallbacks exist
      if (typeof window.mwCustomShare !== 'function') {
        window.mwCustomShare = function () {
          if (navigator.share) {
            navigator.share({ title: document.title, url: location.href });
          } else {
            prompt('Copy link:', location.href);
          }
        };
        console.log('SIDEBAR: installed mwCustomShare fallback');
      }

      if (typeof window.mwCustomPDF !== 'function') {
        window.mwCustomPDF = function () { window.print(); };
        console.log('SIDEBAR: installed mwCustomPDF fallback');
      }

      // Capture-phase listener to catch clicks before navigation
      document.addEventListener('click', function (ev) {
        try {
          var a = ev.target.closest('a');
          if (!a) return;

          var href = (a.getAttribute('href') || '').trim();
          var hrefPath = href.split('?')[0].split('#')[0]; // normalize

          // If link matches our placeholders, intercept
          if (placeholders.share.test(hrefPath)) {
            ev.preventDefault();
            ev.stopPropagation();
            console.log('SIDEBAR: intercepted ShareAction -> calling mwCustomShare');
            try { window.mwCustomShare(); } catch (err) { console.error('mwCustomShare error', err); }
            return;
          }

          if (placeholders.pdf.test(hrefPath)) {
            ev.preventDefault();
            ev.stopPropagation();
            console.log('SIDEBAR: intercepted PDFAction -> calling mwCustomPDF');
            try { window.mwCustomPDF(); } catch (err) { console.error('mwCustomPDF error', err); }
            return;
          }

          // Do not touch external links (Special Search, GitHub etc.)
        } catch (e) {
          console.error('SIDEBAR: click handler exception', e);
        }
      }, true);

      console.log('SIDEBAR: action interceptors installed');
    });
  });
})();