MediaWiki:Common.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (β-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (β-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* 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);
});
});
})();