Jump to content

MediaWiki:Common.js: Difference between revisions

From International Treaty Law Wiki
No edit summary
No edit summary
Tag: Manual revert
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/* Any JavaScript here will be loaded for all users on every page load. */
/* Clean Print mode + PDF & Share buttons for Vector-2022 */
/* Optimized Vector-2022 Utilities + Search Extensions + InfinityFree Failover */


$(function () {
(function () {


     // --- 1. Inject Clean Print CSS (full-width A4, desktop + mobile) ---
     'use strict';
    var printCss = ''
        + '@media print {'
        + '    /* Hide all non-content elements */'
        + '    #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;'
        + '    }'
        + '}';


     var styleEl = document.createElement('style');
     mw.loader.using(['mediawiki.util', 'jquery']).then(function () {
    styleEl.type = 'text/css';
    styleEl.appendChild(document.createTextNode(printCss));
    document.head.appendChild(styleEl);


    // --- 2. Add PDF + Share buttons to Vector-2022 action bar ---
         $(function () {
    if (mw.config.get('wgNamespaceNumber') === 0) {
        var $actions = $('.vector-page-toolbar .vector-page-tools .vector-menu-content-list');
         if ($actions.length) {
            $actions.find('li').filter(function () {
                var t = $(this).text() || '';
                return t.toLowerCase().indexOf('pdf') !== -1;
            }).remove();


             $actions.prepend(
             /* =========================================================
                '<li class="vector-menu-content-list-item"><a href="javascript:window.print()" title="Download clean PDF">PDF</a></li>'
              GLOBAL MEDIAWIKI VARIABLES
            );
            ========================================================= */


             $actions.prepend(
             var ns      = mw.config.get('wgCanonicalNamespace');
                 '<li class="vector-menu-content-list-item"><a href="javascript:(function(){if(navigator.share){navigator.share({title:document.title,url:location.href});}else{prompt(\'Copy link:\',location.href);}})()" title="Share this page">Share</a></li>'
            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) {


    // --- 3. Google Search Results under MediaWiki Search ---
                /* PDF */
    mw.loader.using('mediawiki.util', function () {


        if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
                var printTrigger =
                    e.target.closest('.mw-print-trigger');


        var query = mw.util.getParamValue('search');
                if (printTrigger) {
        if (!query) return;


        // CSS für collapsable Menüs
                    e.preventDefault();
        var collapseCss = ''
            + '#extra-search-results { margin-top: 2em; border-top: 1px solid #ddd; padding-top: 1em; }'
            + '.search-collapse-section { margin-bottom: 1.5em; border: 1px solid #e0e0e0; border-radius: 4px; }'
            + '.search-collapse-header { background: #f8f9fa; padding: 12px 15px; cursor: pointer; font-weight: bold; border-radius: 4px 4px 0 0; }'
            + '.search-collapse-header:hover { background: #e8e9ea; }'
            + '.search-collapse-header::before { content: "▼ "; display: inline-block; transition: transform 0.2s; }'
            + '.search-collapse-header.collapsed::before { transform: rotate(-90deg); }'
            + '.search-collapse-content { padding: 15px; display: block; }'
            + '.search-collapse-content.collapsed { display: none; }'
            + '.gcse-searchresults-only { min-height: 200px; }'
            + '.search-engine-link { display: block; padding: 8px 0; font-size: 16px; 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: #f0f7ff; border-radius: 4px; }'
            + '.pse-direct-link a { font-size: 15px; color: #0066cc; text-decoration: none; }'
            + '.pse-direct-link a:hover { text-decoration: underline; }';


        var collapseStyle = document.createElement('style');
                    window.print();
        collapseStyle.appendChild(document.createTextNode(collapseCss));
        document.head.appendChild(collapseStyle);


        // Finde die Paginierung (Ergebnisse 1-20, 20-40, etc.)
                    return;
        var pagination = $('.mw-search-pager-bottom, .results-info').last();
                }
        var insertPoint = pagination.length ? pagination : $('#mw-search-results');


        if (insertPoint.length) {
                /* SHARE */
            var container = document.createElement('div');
            container.id = 'extra-search-results';


            // Programmable Search Engine (PSE) - mit Direktlink
                var shareTrigger =
            var pseSection = document.createElement('div');
                    e.target.closest('.mw-share-trigger');
            pseSection.className = 'search-collapse-section';
           
            var pseDirectUrl = 'https://cse.google.com/cse?cx=86021a982e3a14848&q=' + encodeURIComponent(query);
           
            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>';


            // Alternative Suchmaschinen
                 if (shareTrigger) {
            var searchEngines = [
 
                 {
                     e.preventDefault();
                    name: 'Google',
 
                     url: 'https://www.google.com/search?q=' + encodeURIComponent(query),
                     if (navigator.share) {
                     icon: '🔍'
 
                },
                        navigator.share({
                {
                            title: document.title,
                    name: 'Bing',
                            url: location.href
                    url: 'https://www.bing.com/search?q=' + encodeURIComponent(query),
                        });
                    icon: '🔎'
 
                },
                     } else {
                {
 
                    name: 'DuckDuckGo',
                        prompt('Copy link:', location.href);
                    url: 'https://duckduckgo.com/?q=' + encodeURIComponent(query),
                     }
                     icon: '🦆'
 
                },
                     return;
                {
                    name: 'Yandex',
                    url: 'https://yandex.com/search/?text=' + encodeURIComponent(query),
                    icon: '🔍'
                },
                {
                    name: 'Brave Search',
                    url: 'https://search.brave.com/search?q=' + encodeURIComponent(query),
                     icon: '🦁'
                },
                {
                     name: 'Ecosia',
                    url: 'https://www.ecosia.org/search?q=' + encodeURIComponent(query),
                    icon: '🌳'
                 }
                 }
            ];


            var searchSection = document.createElement('div');
                /* COLLAPSE TOGGLE */
            searchSection.className = 'search-collapse-section';
 
           
                var header =
            var searchLinksHtml = '';
                    e.target.closest('.search-collapse-header');
            searchEngines.forEach(function(engine) {
 
                searchLinksHtml +=
                if (header) {
                     '<div class="search-engine-link">' +
 
                     '<a href="' + engine.url + '" target="_blank" rel="noopener noreferrer">' +
                    var targetId =
                     engine.icon + ' Search on ' + engine.name + '</a>' +
                        header.getAttribute('data-target');
                     '</div>';
 
                    var content =
                        document.getElementById(targetId);
 
                     header.classList.toggle('collapsed');
 
                     if (content) {
 
                        content.classList.toggle('collapsed');
                     }
 
                     return;
                }
             });
             });
           
            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(pseSection);
             /* =========================================================
            container.appendChild(searchSection);
              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) {


            // Einfügen nach Paginierung
                        var container =
            if (pagination.length) {
                            document.createElement('div');
                pagination.after(container);
 
            } else {
                        container.id =
                insertPoint.after(container);
                            '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
                        ============================================= */


            // Toggle-Funktionalität für collapsable Menüs
                        function loadGoogleCSE() {
            $('.search-collapse-header').on('click', function () {
                var targetId = $(this).data('target');
                var content = $('#' + targetId);
               
                $(this).toggleClass('collapsed');
                content.toggleClass('collapsed');
            });


            // Google CSE Script laden und Suche ausführen
                            if (window.googleCSELoaded) {
            if (!window.googleCSELoaded) {
                                 return;
                window.googleCSELoaded = true;
               
                // Callback für wenn CSE geladen ist
                window.__gcse = {
                    parsetags: 'explicit',
                    callback: function() {
                        // Suche programmatisch ausführen
                        var element = document.querySelector('.gcse-searchresults-only');
                        if (element) {
                            google.search.cse.element.render({
                                div: element,
                                tag: 'searchresults-only',
                                gname: 'pse_search'
                            });
                           
                            // Suche mit Query ausführen
                            var searchControl = google.search.cse.element.getElement('pse_search');
                            if (searchControl) {
                                 searchControl.execute(query);
                             }
                             }
                            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);
                         }
                         }
                     }
                     }
                 };
                 }
               
                var s = document.createElement('script');
                s.async = true;
                s.src = 'https://cse.google.com/cse.js?cx=86021a982e3a14848';
                document.head.appendChild(s);
             }
             }
        }
    });


}); // Ende $(function(){})
            /* =========================================================
$(function () {
              INFINITYFREE FAILOVER
    // Google PSE unter der MediaWiki-Suche einfügen
            ========================================================= */
    var pseBox = '<div id="google-pse-container" style="margin-top:10px;"></div>';
 
            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'
                    ) ||


    // Nach der Standard-Suche einfügen
                    (
    $('#p-search').after(pseBox);
                        html.includes('InfinityFree') &&
                        html.includes('suspended')
                    );


    // Google PSE Script laden
                if (injectedHTML && isAnon) {
    var cx = 'DEINE-CX-ID-HIER'; // <-- Deine PSE-ID eintragen
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
    document.getElementById('google-pse-container').appendChild(gcse);


mw.loader.using('mediawiki.util').then(function () {
                    window.location.href =
                        'https://singularity-news.github.io/wiki/';
                }


    function addMeta(property, content) {
            }, 1000);
        var m = document.createElement('meta');
        m.setAttribute(property.startsWith('og:') ? 'property' : 'name', property);
        m.setAttribute('content', content);
        document.head.appendChild(m);
    }


    // Open Graph
        });
    addMeta('og:title', 'International Treaty Law Wiki – Scholarly Encyclopedia of Treaty Law');
    addMeta('og:description', 'The International Treaty Law Wiki is a scholarly platform offering authoritative, systematically curated research on treaty law, state succession, institutional practice, and international legal frameworks for experts and practitioners.');
    addMeta('og:type', 'website');
    addMeta('og:url', 'https://wiki.free.nf/');
    addMeta('og:image', 'https://wiki.free.nf/images/International_Treaty_Law_Wiki_Logo_.png');
    addMeta('og:image:width', '1200');
    addMeta('og:image:height', '630');
    addMeta('og:locale', 'en_US');


     // Twitter / X
     });
    addMeta('twitter:card', 'summary_large_image');
    addMeta('twitter:title', 'International Treaty Law Wiki – Scholarly Encyclopedia of Treaty Law');
    addMeta('twitter:description', 'The International Treaty Law Wiki is a scholarly platform offering authoritative, systematically curated research on treaty law, state succession, institutional practice, and international legal frameworks for experts and practitioners.');
    addMeta('twitter:image', 'https://wiki.free.nf/images/International_Treaty_Law_Wiki_Logo_.png');


    // SEO
})();
    addMeta('description', 'The International Treaty Law Wiki is a scholarly platform offering authoritative, systematically curated research on treaty law, state succession, institutional practice, and international legal frameworks for experts and practitioners.');
    addMeta('keywords', 'International Law, international treaty law, law of treaties, public international law, treaty interpretation, treaty formation, treaty modification, state succession, treaty chain, customary international law, Vienna Convention on the Law of Treaties, treaty obligations, international legal frameworks, treaty registration, UN treaty practice, depositary practice, Custodian, Notary, administration, treaty regimes, international courts jurisprudence, treaty conflict resolution, systemic integration, provisional application of treaties, declarations, status of forces agreements, NATO SOFA, NATO Truppenstatut, international institutional law, comparative treaty practice, international infrastructure law, submarine cable law, international telecommunications law');
});
});

Latest revision as of 01:30, 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);

        });

    });

})();