MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary Tag: Manual revert |
No edit summary |
||
| Line 217: | Line 217: | ||
} | } | ||
}); | }); | ||
/* ========================================================= | |||
VANIPEDIA FLIPBOOK POPUP | |||
========================================================= */ | |||
(function () { | |||
function createFlipbookOverlay() { | |||
if (document.getElementById('vani-flipbook-overlay')) { | |||
return; | |||
} | |||
var overlay = document.createElement('div'); | |||
overlay.id = 'vani-flipbook-overlay'; | |||
var modal = document.createElement('div'); | |||
modal.className = 'vani-flipbook-modal'; | |||
var closeButton = document.createElement('button'); | |||
closeButton.className = 'vani-flipbook-close'; | |||
closeButton.type = 'button'; | |||
closeButton.setAttribute('aria-label', 'Close flipbook'); | |||
closeButton.innerHTML = '×'; | |||
var frameHolder = document.createElement('div'); | |||
frameHolder.id = 'vani-flipbook-frame-holder'; | |||
modal.appendChild(closeButton); | |||
modal.appendChild(frameHolder); | |||
overlay.appendChild(modal); | |||
document.body.appendChild(overlay); | |||
closeButton.addEventListener('click', function () { | |||
closeFlipbook(); | |||
}); | |||
overlay.addEventListener('click', function (event) { | |||
if (event.target === overlay) { | |||
closeFlipbook(); | |||
} | |||
}); | |||
document.addEventListener('keydown', function (event) { | |||
if ( | |||
event.key === 'Escape' && | |||
overlay.classList.contains('is-open') | |||
) { | |||
closeFlipbook(); | |||
} | |||
}); | |||
} | |||
function openFlipbook(book) { | |||
createFlipbookOverlay(); | |||
var overlay = | |||
document.getElementById('vani-flipbook-overlay'); | |||
var holder = | |||
document.getElementById('vani-flipbook-frame-holder'); | |||
/* | |||
* FIRST make popup visible. | |||
*/ | |||
overlay.classList.add('is-open'); | |||
document.body.classList.add('vani-flipbook-open'); | |||
/* | |||
* Remove any previous iframe. | |||
*/ | |||
holder.innerHTML = ''; | |||
/* | |||
* Wait until browser has calculated | |||
* the real popup dimensions. | |||
*/ | |||
requestAnimationFrame(function () { | |||
requestAnimationFrame(function () { | |||
var frame = | |||
document.createElement('iframe'); | |||
frame.id = | |||
'vani-flipbook-frame'; | |||
frame.title = | |||
'Vanipedia Flipbook'; | |||
frame.setAttribute( | |||
'allowfullscreen', | |||
'true' | |||
); | |||
frame.src = | |||
'https://dev.vanipedia.org/flipbook/?book=' + | |||
encodeURIComponent(book); | |||
holder.appendChild(frame); | |||
}); | |||
}); | |||
} | |||
function closeFlipbook() { | |||
var overlay = | |||
document.getElementById('vani-flipbook-overlay'); | |||
var holder = | |||
document.getElementById('vani-flipbook-frame-holder'); | |||
if (!overlay) { | |||
return; | |||
} | |||
overlay.classList.remove('is-open'); | |||
document.body.classList.remove('vani-flipbook-open'); | |||
if (holder) { | |||
holder.innerHTML = ''; | |||
} | |||
} | |||
function initialiseFlipbooks() { | |||
var triggers = | |||
document.querySelectorAll( | |||
'.vani-flipbook-trigger' | |||
); | |||
triggers.forEach(function (trigger) { | |||
if ( | |||
trigger.getAttribute( | |||
'data-flipbook-ready' | |||
) === '1' | |||
) { | |||
return; | |||
} | |||
trigger.setAttribute( | |||
'data-flipbook-ready', | |||
'1' | |||
); | |||
trigger.addEventListener( | |||
'click', | |||
function (event) { | |||
event.preventDefault(); | |||
var book = | |||
trigger.getAttribute( | |||
'data-book' | |||
); | |||
if (book) { | |||
openFlipbook(book); | |||
} | |||
} | |||
); | |||
}); | |||
} | |||
createFlipbookOverlay(); | |||
initialiseFlipbooks(); | |||
if ( | |||
window.mw && | |||
mw.hook | |||
) { | |||
mw.hook( | |||
'wikipage.content' | |||
).add(function () { | |||
initialiseFlipbooks(); | |||
}); | |||
} | |||
})(); | |||
Revision as of 05:06, 13 September 2026
/* Any JavaScript here will be loaded for all users on every page load. */
if (mw.config.get('wgPageName' ) === 'Krishna_says_in_Bhagavad-gita') {
/* switch tooltip texts from content-div to label-div */
const v_labels = Array.from(document.getElementsByClassName("tabs-label"));
const v_content = Array.from(document.getElementsByClassName("tabs-content"));
for (var i = 0; i < v_labels.length; i++) {
v_labels[i].title = v_content[i].title;
v_content[i].title = "";
}
/* adjust wikitables */
var arr = Array.from(document.getElementsByClassName("wikitable"));
for (var t = 0; t < arr.length; t++) {
/* insert THEAD in wikitable */
var thead = document.createElement("thead");
thead.style.display = "block";
var wtbl = arr[t];
wtbl.insertBefore(thead, wtbl.firstChild);
/* move first row of TBODY to THEAD */
thead.appendChild(wtbl.rows[0]);
/* make TBODY scrollable */
var tbody = wtbl.tBodies[0];
tbody.style.display = "block";
tbody.style.overflowY = "auto";
tbody.style.maxHeight = "500px";
for (var r = 0; r < wtbl.rows.length; r++) {
var row = wtbl.rows[r];
/* adjust column widths and hide from-until columns */
row.cells[0].classList = "cw_0";
row.cells[1].classList = "cw_150";
row.cells[2].classList = "cw_500";
/* mark the text */
if (r == 0) continue;
var v_text = row.cells[2].textContent;
var v_html = ""; var v_from = 0;
var marks = JSON.parse(row.cells[0].textContent.replaceAll("O", "[").replaceAll("C", "]"));
for (var m = 0; m < marks.length; m++) {
v_html +=
v_text.substr(v_from,marks[m][0]-v_from) + "<mark>" +
v_text.substr(marks[m][0],marks[m][1]-marks[m][0]+1) + "</mark>";
v_from = marks[m][1]+1;
}
v_html += v_text.substr(v_from);
row.cells[2].innerHTML = v_html;
}
}
}
// install Google Search
// document.write('<script type="text/javascript" src="'
// + 'http://vanipedia.org/w/index.php?title=MediaWiki:GoogleSearch.js'
// + '&action=raw&ctype=text/javascript"></' + 'script>');
// install JQuery
//document.write('<script type="text/javascript" src="'
//+ 'http://vanipedia.org/w/index.php?title=MediaWiki:JQuery.js'
//+ '&action=raw&ctype=text/javascript"></' + 'script>');
// install WikEd toolbar and Vanify
//document.write('<script type="text/javascript" src="'
//+ 'http://vanipedia.org/w/index.php?title=MediaWiki:Vaniquotes.js'
//+ '&action=raw&ctype=text/javascript"></' + 'script>');
// install Replace
//document.write('<script type="text/javascript" src="'
//+ 'http://vanipedia.org/w/index.php?title=MediaWiki:TextboxReplace.js'
//+ '&action=raw&ctype=text/javascript"></' + 'script>');
// install Unify
//document.write('<script type="text/javascript" src="'
//+ 'http://vanipedia.org/w/index.php?title=MediaWiki:Unify.js'
//+ '&action=raw&ctype=text/javascript"></' + 'script>');
// install Vanify
//document.write('<script type="text/javascript" src="'
//+ 'http://vanipedia.org/w/index.php?title=MediaWiki:Vanify.js'
//+ '&action=raw&ctype=text/javascript"></' + 'script>');
// install Vani_suggest for diacritics auto-suggest pulldown on the search bar
//document.write('<script type="text/javascript" src="'
//+ 'http://vanipedia.org/w/index.php?title=MediaWiki:Vani_suggest.js'
//+ '&action=raw&ctype=text/javascript"></' + 'script>');
// install previous/next links for video categories in all languages
//document.write('<script type="text/javascript" src="/navcat/navcat.js"></' + 'script>');
// Buttons
//addOnloadHook(function() {
//if (document.editform) {
//addPortletLink("p-cactions", "javascript:Unify()", "unify", "ca-unify", "Convert Balarama fonts to Unicode", "");
// addPortletLink("p-cactions", "javascript:Vanify()", "vanify", "ca-vanify", "Corrects vani markup", "");
// addPortletLink('p-cactions', 'javascript:format()', 'format', 'ca-format', 'Format article', '');
//addPortletLink('p-cactions', 'javascript:wpTextboxReplace()', 'Replace', 'ca-replace', 'Replaces text in the edit window', 'R');
//}
//});
// end Buttons
// --- VANIPEDIA DARK MODE TOGGLE (Kasya) ---
$(document).ready(function() {
// Create the floating button
var toggleBtn = $('<button id="dark-mode-toggle" title="Toggle Dark Mode" style="position:fixed; bottom:25px; right:25px; z-index:9999; width:45px; height:45px; border-radius:50%; background:#2c3e50; color:#f1c40f; font-size:20px; border:none; box-shadow:0 4px 10px rgba(0,0,0,0.3); cursor:pointer; display:flex; align-items:center; justify-content:center; transition: transform 0.2s;">🌙</button>');
$('body').append(toggleBtn);
// Hover effect for the button
toggleBtn.hover(
function() { $(this).css('transform', 'scale(1.1)'); },
function() { $(this).css('transform', 'scale(1.0)'); }
);
// Check if the user previously selected dark mode
if (localStorage.getItem('vanipedia-theme') === 'dark') {
$('html').addClass('dark-theme');
toggleBtn.text('🔆').css('background', '#f1c40f').css('color', '#2c3e50');
}
// Click event handler
toggleBtn.click(function() {
$('html').toggleClass('dark-theme');
if ($('html').hasClass('dark-theme')) {
localStorage.setItem('vanipedia-theme', 'dark');
toggleBtn.text('🔆').css('background', '#f1c40f').css('color', '#2c3e50');
} else {
localStorage.setItem('vanipedia-theme', 'light');
toggleBtn.text('☽').css('background', '#2c3e50').css('color', '#f1c40f');
}
});
});
// --- YouTube Random Shorts (Kasya) ---
$(document).ready(function() {
var $widget = $('.vani-shorts-viewport');
if ($widget.length) {
var $viewport = $widget;
var $titleFrame = $widget.find('.vani-shorts-title');
new mw.Api().get({
action: 'query',
prop: 'revisions',
titles: 'VanimediaMayapur YouTube SHORTS List',
rvprop: 'content',
format: 'json'
}).done(function(data) {
try {
var pages = data.query.pages;
var pageId = Object.keys(pages)[0];
if (pageId == "-1" || !pages[pageId].revisions) {
$viewport.text("Database list page not found.");
return;
}
// FIXED: Corrected MediaWiki revision array syntax lookup
var rawWikiText = pages[pageId].revisions[0]['*'];
var lines = rawWikiText.split('\n');
var validShorts = [];
for (var i = 0; i < lines.length; i++) {
var line = $.trim(lines[i]);
if (line.indexOf('File:') === 0 && line.toLowerCase().indexOf('link=') !== -1) {
validShorts.push(line);
}
}
if (validShorts.length === 0) {
$viewport.text("No gallery entries recognized.");
return;
}
var randomLine = validShorts[Math.floor(Math.random() * validShorts.length)];
var parts = randomLine.split('|');
// Reset defaults before parsing line elements
var rawUrl = "";
for (var j = 0; j < parts.length; j++) {
var part = $.trim(parts[j]);
if (part.toLowerCase().indexOf('link=') === 0) {
rawUrl = part.substring(5).trim();
}
}
// Clean all template formatting brackets, space characters, and hidden control markers
var urlCleaned = rawUrl.replace(/[\u200e\u200f\s\}\}\]]/g, '');
// Direct YouTube Alphanumeric Pattern Matcher
var idRegex = /(?:shorts\/|v=|embed\/|\/)([a-zA-Z0-9_-]{11})/;
var matchResults = urlCleaned.match(idRegex);
var videoId = "";
if (matchResults && matchResults[1]) {
// FIXED: Grabbed index 1 to pull the standalone 11-digit ID without any slashes
videoId = matchResults[1].trim();
}
if (videoId && videoId.length === 11) {
// FIXED: Isolated to inject ONLY the video player iframe at the correct 280px width
var embedUrl = "https://www.youtube.com/embed/" + videoId;
$viewport.html('<iframe width="280" height="225" src="' + embedUrl + '" frameborder="0" allowfullscreen style="border-radius: 8px; border: none;"></iframe>');
} else {
$viewport.html("<div style='color:#c0392b; padding:10px; font-size:11px;'>Invalid video ID sequence extracted.</div>");
}
} catch (err) {
console.error("Shorts engine exception:", err);
$viewport.text("Error handling text structure values.");
}
}).fail(function() {
$viewport.text("API connection failed.");
});
}
});
/* =========================================================
VANIPEDIA FLIPBOOK POPUP
========================================================= */
(function () {
function createFlipbookOverlay() {
if (document.getElementById('vani-flipbook-overlay')) {
return;
}
var overlay = document.createElement('div');
overlay.id = 'vani-flipbook-overlay';
var modal = document.createElement('div');
modal.className = 'vani-flipbook-modal';
var closeButton = document.createElement('button');
closeButton.className = 'vani-flipbook-close';
closeButton.type = 'button';
closeButton.setAttribute('aria-label', 'Close flipbook');
closeButton.innerHTML = '×';
var frameHolder = document.createElement('div');
frameHolder.id = 'vani-flipbook-frame-holder';
modal.appendChild(closeButton);
modal.appendChild(frameHolder);
overlay.appendChild(modal);
document.body.appendChild(overlay);
closeButton.addEventListener('click', function () {
closeFlipbook();
});
overlay.addEventListener('click', function (event) {
if (event.target === overlay) {
closeFlipbook();
}
});
document.addEventListener('keydown', function (event) {
if (
event.key === 'Escape' &&
overlay.classList.contains('is-open')
) {
closeFlipbook();
}
});
}
function openFlipbook(book) {
createFlipbookOverlay();
var overlay =
document.getElementById('vani-flipbook-overlay');
var holder =
document.getElementById('vani-flipbook-frame-holder');
/*
* FIRST make popup visible.
*/
overlay.classList.add('is-open');
document.body.classList.add('vani-flipbook-open');
/*
* Remove any previous iframe.
*/
holder.innerHTML = '';
/*
* Wait until browser has calculated
* the real popup dimensions.
*/
requestAnimationFrame(function () {
requestAnimationFrame(function () {
var frame =
document.createElement('iframe');
frame.id =
'vani-flipbook-frame';
frame.title =
'Vanipedia Flipbook';
frame.setAttribute(
'allowfullscreen',
'true'
);
frame.src =
'https://dev.vanipedia.org/flipbook/?book=' +
encodeURIComponent(book);
holder.appendChild(frame);
});
});
}
function closeFlipbook() {
var overlay =
document.getElementById('vani-flipbook-overlay');
var holder =
document.getElementById('vani-flipbook-frame-holder');
if (!overlay) {
return;
}
overlay.classList.remove('is-open');
document.body.classList.remove('vani-flipbook-open');
if (holder) {
holder.innerHTML = '';
}
}
function initialiseFlipbooks() {
var triggers =
document.querySelectorAll(
'.vani-flipbook-trigger'
);
triggers.forEach(function (trigger) {
if (
trigger.getAttribute(
'data-flipbook-ready'
) === '1'
) {
return;
}
trigger.setAttribute(
'data-flipbook-ready',
'1'
);
trigger.addEventListener(
'click',
function (event) {
event.preventDefault();
var book =
trigger.getAttribute(
'data-book'
);
if (book) {
openFlipbook(book);
}
}
);
});
}
createFlipbookOverlay();
initialiseFlipbooks();
if (
window.mw &&
mw.hook
) {
mw.hook(
'wikipage.content'
).add(function () {
initialiseFlipbooks();
});
}
})();