557
edits
No edit summary |
No edit summary |
||
| (91 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
//Final working Common.js | |||
mw.loader.load('//wiki.ekatrafoundation.org/index.php?title=User:Gurwinder/Edittool.js&action=raw&ctype=text/javascript'); | |||
'MediaWiki:InterWikiTransclusion.js' | |||
// Turn <span class="mw-charinsert">foo</span> into a button that inserts "foo" | |||
// into the edit box: | |||
$( function () { | |||
$( 'span.mw-charinsert' ).wrap( function () { | |||
var text = this.title || this.textContent; | |||
var parts = text.split( '+' ); | |||
if ( text === '+' ) parts = [ text ]; | |||
var front = decodeURIComponent( parts[0] || '' ); | |||
var back = decodeURIComponent( parts[1] || '' ); | |||
return $( '<button>' ).click( function () { | |||
insertTags( front, back, '' ); | |||
return false; | |||
} ); | |||
} ); | |||
} ); | |||
$( function(){ | $( function(){ | ||
if (window.matchMedia("(max-width: 768px)").matches) { | |||
if( mw.config.get("skin") !== "minerva" ){ | |||
const currWikiUrl = new URL(window.location.href); | |||
currWikiUrl.searchParams.set('mobileaction', 'toggle_view_mobile'); | |||
window.location.replace(currWikiUrl); | |||
} | |||
} else { | |||
if( mw.config.get("skin") !== "vector" ){ | |||
const currWikiUrl = new URL(window.location.href); | |||
currWikiUrl.searchParams.set('mobileaction', 'toggle_view_desktop'); | |||
window.location.replace(currWikiUrl); | |||
} | |||
} | |||
if( mw.config.get('wgIsMainPage') ){ | if( mw.config.get('wgIsMainPage') ){ | ||
$('#firstHeading').remove(); | $('#firstHeading').remove(); | ||
var mainpageLeft = $(".mainpage-left"); | |||
var mainpageRight = $(".mainpage-right"); | |||
mainpageLeft.css("position", "relative"); | |||
mainpageRight.css("position", "relative"); | |||
function animateLeft(){ | |||
mainpageRight.animate({'left': '15px'}, 1000, function(){ | |||
mainpageRight.animate( {"left": "0px" }, 1000, animateLeft() ); | |||
}); | |||
} | |||
animateLeft(); | |||
function animateRight(){ | |||
mainpageLeft.animate({'left': '-15px'}, 1000, function(){ | |||
mainpageLeft.animate( {"left": "0px" }, 1000, animateRight() ); | |||
}); | |||
} | |||
animateRight(); | |||
} | |||
if( mw.config.get('wgPageName').split( '/' ).length > 1 ){ | |||
var tempPageName = mw.config.get('wgPageName').split( '/' )[0]; | |||
var tempLink ='< <a href="https://wiki.ekatrafoundation.org/wiki/' + tempPageName + '">' + tempPageName.replaceAll("_", " ") + '</a>'; | |||
$("#top").after( $( '<p>').css( 'font-size', '17px').html( tempLink ) ); | |||
} | } | ||
if( mw.config.get('wgUserName') === null ){ | if( mw.config.get('wgUserName') === null ){ | ||
$('body').bind('cut copy', function(e) { | $('body').bind('cut copy', function(e) { | ||
e.preventDefault(); | e.preventDefault(); | ||
}); | }); | ||
} else { | |||
$("#content").removeAttr("onmousedown"); | |||
$("#content").removeAttr("onselectstart"); | |||
mw.loader.load( '/index.php?title=MediaWiki:OCR.js&action=raw&ctype=text/javascript'); | |||
mw.loader.load( '/index.php?title=MediaWiki:PoemButtons.js&action=raw&ctype=text/javascript'); | |||
} | |||
if( $(".wikiaudioplayer").length ){ | |||
mw.loader.load( '/index.php?title=MediaWiki:Green-audio-player.min.css&action=raw&ctype=text/css', 'text/css'); | |||
$.when( | |||
mw.loader.getScript( 'https://wiki.ekatrafoundation.org/index.php?title=MediaWiki:Green-audio-player.min.js&action=raw&ctype=text/javascript' ) | |||
) | |||
.then( | |||
function () { | |||
GreenAudioPlayer.init({ | |||
selector: '.wikiaudioplayer', | |||
stopOthersOnPlay: true | |||
}); | |||
$( ".wikiaudioplayer > audio").css("display", "none"); | |||
}, | |||
function ( e ) { | |||
mw.log.error( e.message ); | |||
} | |||
); | |||
} | } | ||
}); | |||
$( function(){ | |||
var sidebarCategory = $("#p-Categories > .vector-menu-content"); | |||
var sidebarAuthor = $("#p-Authors > .vector-menu-content"); | |||
sidebarCategory.empty(); | |||
sidebarAuthor.empty(); | |||
mw.loader.using( [ 'mediawiki.api' ], function(){ | |||
var sel1 = $('<select>').css( 'width', '100%').appendTo( sidebarCategory ); | |||
var sel2 = $('<select>').css( 'width', '100%').appendTo( sidebarAuthor ); | |||
sel1.append( $("<option>").attr('disabled', true).attr('selected', true).text( "-- Select an option --" ) ); | |||
sel2.append( $("<option>").attr('disabled', true).attr('selected', true).text( "-- Select an option --" ) ); | |||
// For category Categories | |||
catMemberParam1 = { | |||
"action": "query", | |||
"format": "json", | |||
"list": "categorymembers", | |||
"cmtitle": "Category:Categories on EkatraWiki", | |||
"cmprop": "title", | |||
"cmtype": "subcat", | |||
"cmlimit": "500" | |||
}; | |||
(new mw.Api()).get( catMemberParam1, { async: false } ).done(function ( resData ){ | |||
var catOptions = []; | |||
var members = resData.query.categorymembers; | |||
// Creating MenuItems array from Category Members | |||
members.forEach( function(it){ | |||
var ct = it.title.replace("Category:", ""); | |||
sel1.append( $("<option>").attr('value', ct).text(ct) ); | |||
}); | |||
sel1.on('change', function (e) { | |||
var valueSelected = this.value; | |||
window.location = "https://wiki.ekatrafoundation.org/wiki/Category:" + valueSelected; | |||
}); | |||
}); | |||
// For category Author | |||
catMemberParam2 = { | |||
"action": "query", | |||
"format": "json", | |||
"list": "categorymembers", | |||
"cmtitle": "Category:Authors on EkatraWiki", | |||
"cmprop": "title", | |||
"cmtype": "subcat", | |||
"cmlimit": "500" | |||
}; | |||
(new mw.Api()).get( catMemberParam2, { async: false } ).done(function ( resData ){ | |||
var catOptions = []; | |||
var members = resData.query.categorymembers; | |||
// Creating MenuItems array from Category Members | |||
members.forEach( function(it){ | |||
var ct = it.title.replace("Category:", ""); | |||
sel2.append( $("<option>").attr('value', ct).text(ct) ); | |||
}); | |||
sel2.on('change', function (e) { | |||
var valueSelected = this.value; | |||
window.location = "https://wiki.ekatrafoundation.org/wiki/Category:" + valueSelected; | |||
}); | |||
}); | |||
} ); | |||
}); | |||
// Long list into col | |||
$( document ).ready( function(){ | |||
var longList = $("#longList").addClass("grid_row"), | |||
dlElements = longList.children().filter("dl"), | |||
dlElementsLength = dlElements.length; | |||
var list1 = [], | |||
list2 = []; | |||
var count = 0; | |||
dlElements.each( function(index, ele){ | |||
if( count < dlElementsLength/2 ){ | |||
list1.push(ele); | |||
list1.push( $(ele).next() ); | |||
} else { | |||
list2.push(ele); | |||
list2.push( $(ele).next() ); | |||
} | |||
count = count + 1; | |||
}); | |||
longList.empty(); | |||
var leftDiv = $("<div/>").addClass("grid_col"); | |||
list1.forEach( function(value, index){ | |||
leftDiv.append(value); | |||
}); | |||
var rightDiv = $("<div/>").addClass("grid_col"); | |||
list2.forEach( function(value, index){ | |||
rightDiv.append(value); | |||
}); | |||
longList.append(leftDiv, rightDiv ); | |||
}); | }); | ||
$( function(){ | $( function(){ | ||
if( poemElement.length ){ | var countPoem2 = $(".Poem2-Ekatra"); | ||
if( countPoem2.length > 0 ){ | |||
var Poem2lenghtArray = []; | |||
for (var k = 0; k <= countPoem2.length; k++) { | |||
Poem2lenghtArray.push(k); | |||
} | |||
Poem2lenghtArray.forEach(function(j) { | |||
var poemElement = $(".Poem2-Ekatra").eq(j); | |||
if( poemElement.length ){ | |||
var poemText = poemElement.html(); | |||
var poemArray = poemText.split("\n"); | |||
poemElement.text(""); | |||
// First measure | |||
poemArray.forEach( function(i) { | |||
poemElement.append( '<p style="text-indent: 2em;">' + i + '</p>' ); | |||
}); | |||
// Second measure | |||
poemElement.children('p').each(function () { | |||
$(this).css('text-indent', '2em'); | |||
}); | |||
} | |||
}); | |||
} | |||
}); | |||
$( function() { | |||
var divide2cols = $("#divide2cols"); | |||
if( divide2cols.length ){ | |||
var leftDiv = $("<div/>").addClass("grid_col"); | |||
var rightDiv = $("<div/>").addClass("grid_col"); | |||
var parentHieght = divide2cols.height()/2; | |||
divide2cols.children().filter("dl").each(function() { | |||
console.log( $(this).offset().top , parentHieght ); | |||
if ( $(this).offset().top > parentHieght ) { | |||
rightDiv.append( $(this), $(this).next() ); | |||
} else { | |||
leftDiv.append( $(this), $(this).next() ); | |||
} | |||
}); | |||
divide2cols.before( $("<div/>").addClass("grid_row").append(leftDiv, rightDiv) ); | |||
divide2cols.remove(); | |||
} | |||
}); | |||
$( function(){ | |||
// toggled by toggle button. also determines which toggle button image to use | |||
var useCustom = false; | |||
// toggleImgs[0] to switch to custom, toggleImgs[1] to revert to default | |||
var toggleImgs = [ | |||
'//storage.googleapis.com/material-icons/external-assets/v4/icons/svg/ic_search_black_24px.svg', | |||
'//storage.googleapis.com/material-icons/external-assets/v4/icons/svg/ic_youtube_searched_for_black_24px.svg' | |||
]; | |||
var zoomInImg = '//storage.googleapis.com/material-icons/external-assets/v4/icons/svg/ic_zoom_in_black_24px.svg'; | |||
var zoomOutImg = '//storage.googleapis.com/material-icons/external-assets/v4/icons/svg/ic_zoom_out_black_24px.svg'; | |||
// create DOM elements | |||
$('#content').prepend('<div id="zoomButtons" style="z-index: 9999;">\ | |||
<img id="zoomInIcon" src="' + zoomInImg + '" alt="zoom in"">\ | |||
<img id="zoomOutIcon" src="' + zoomOutImg + '" alt="zoom out"">\ | |||
<img id="toggleButton" src="' + toggleImgs[+ useCustom] + '" alt="toggle zoom"> </div>'); | |||
$('#zoomButtons').css({'float': 'right'}); | |||
// find DOM elements used later | |||
var $bodyContent = $('.mw-body-content'); | |||
var $toggleButton = $('#toggleButton'); | |||
// sizes[0] is default, sizes[1] is custom | |||
var sizes = [parseFloat($('.mw-body-content').css('font-size'))]; | |||
// default custom zoom of 2 | |||
sizes[1] = sizes[0] + 2; | |||
// the + converts bool to 0 or 1 to use as array index | |||
function updateSize() { | |||
$bodyContent.css({'font-size':(sizes[+ useCustom] + 'pt')}); | |||
} | |||
function toggle() { | |||
useCustom = !useCustom; | |||
$toggleButton.attr('src',toggleImgs[+ useCustom]); | |||
updateSize(); | |||
} | |||
function zoom(dif) { | |||
sizes[1] += dif; | |||
if (useCustom) { | |||
updateSize(); | |||
} else { | |||
toggle(); | |||
} | |||
} | |||
$( '#zoomInIcon' ).on( 'click', function(){ | |||
console.log("Zoom +"); | |||
zoom(1); | |||
}); | |||
$( '#zoomOutIcon' ).on( 'click', function(){ | |||
console.log("Zoom -"); | |||
zoom(-1); | |||
}); | |||
$( '#toggleButton' ).on( 'click', toggle ); | |||
}); | |||
}); | |||
/** | |||
* Convert numbers between numeral systems. | |||
* | |||
* Dependencies: jquery.cookie, mediawiki.util, mediawiki.user | |||
* Source: https://www.mediawiki.org/wiki/MediaWiki:Gadget-Numerakri.js | |||
* Revision: 2019-01-11 | |||
* | |||
* @copyright 2012 Daniel Friesen | |||
* @copyright 2012 Siddhartha Ghai | |||
* @copyright 2014 Bhawani Gautam | |||
* @copyright 2012-2018 Timo Tijhof | |||
* @license <https://opensource.org/licenses/MIT> | |||
*/ | |||
/*jshint browser:true, unused:true, forin:false */ | |||
/*global $, mw */ | |||
(function () { | |||
'use strict'; | |||
var msgs = { | |||
'option-default': { | |||
en: 'Default', | |||
bho: 'डिफ़ॉल्ट', | |||
gu: 'ડિફોલ્ટ', | |||
hi: 'डिफ़ॉल्ट', | |||
ne: 'डिफल्ट', | |||
pa: 'ਅਸਲ ਦਿੱਖ', | |||
sa: 'उत्सर्गः' | |||
}, | |||
'option-arabic': { | |||
en: '1 2 3' | |||
}, | |||
'option-devanagari': { | |||
en: 'Devanagari', | |||
bho: '१२३', | |||
hi: '१२३', | |||
ne: '१२३', | |||
sa: '१२३' | |||
}, | |||
'option-gujarati': { | |||
en: '૧ ૨ ૩', | |||
gu: '૧ ૨ ૩' | |||
}, | |||
'option-gurmukhi': { | |||
en: 'Gurmukhi', | |||
pa: '੧੨੩' | |||
}, | |||
'label-url': { | |||
en: '//www.mediawiki.org/wiki/MediaWiki_talk:Gadget-Numerakri.js', | |||
gu: '//gu.wikipedia.org/wiki/વિકિસૂક્તિઃઅંક_પરિવર્તક', | |||
hi: '//hi.wikipedia.org/wiki/विकिपीडिया:अंक_परिवर्तक', | |||
ne: '//ne.wikipedia.org/wiki/विकिपीडिया:अंक_परिवर्तक', | |||
pa: '//pa.wikipedia.org/wiki/ਵਿਕੀਪੀਡੀਆ:ਅੰਕ ਬਦਲੋ', | |||
sa: '//sa.wikipedia.org/wiki/विकिपीडिया:अङ्कपरिवर्तकम्' | |||
}, | |||
'label-text': { | |||
en: 'Convert numerals', | |||
bho: 'अंक बदलाव', | |||
gu: 'અંક પરિવર્તક', | |||
hi: 'अंक परिवर्तन', | |||
ne: 'अंक परिवर्तन', | |||
pa: 'ਅੰਕ ਬਦਲੋ', | |||
sa: 'अङ्कपरिवर्तकम्' | |||
}, | |||
'label-tooltip': { | |||
en: 'Convert between Arabic and Devanagari numerals', | |||
bho: 'नागरी आ अरबी अंकों में अदला-बदली करीं', | |||
gu: 'ગુજરાતી અને અંગ્રેજી અંકોમાં પરિવર્તન કરો', | |||
hi: 'नागरी और अरबी अंकों में परिवर्तन करें', | |||
ne: 'देवनागरी र अरबी अंकहरूमा परिवर्तन गर्नुहोस्', | |||
pa: 'ਅੰਕਾਂ ਨੂ ਗੁਰਮੁਖੀ ਤੇ ਅਰਬੀ ਵਿਚ ਬਦਲੇਂ', | |||
sa: 'देवनागरी-अरबी-अङ्कयोः चयनं करोतु' | |||
} | |||
}, | |||
maps = { | |||
arabic: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], | |||
devanagari: ['०', '१', '२', '३', '४', '५', '६', '७', '८', '९'], | |||
gujarati: ['૦', '૧', '૨', '૩', '૪', '૫', '૬', '૭', '૮', '૯'], | |||
gurmukhi: ['੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯'] | |||
}, | |||
availableMaps, | |||
currentType = 'default', | |||
matchers = {}, | |||
walker, | |||
styleTag; | |||
function isValidType(type) { | |||
return type === 'default' || availableMaps.indexOf(type) !== -1; | |||
} | |||
/** @return {Object.<RegExp>} */ | |||
function getMatchers(targetType) { | |||
var rChars; | |||
if (!matchers[targetType]) { | |||
rChars = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [] }; | |||
$.each(maps, function (type, map) { | |||
if (type !== targetType) { | |||
for (var i = 0; i <= 9; i++) { | |||
rChars[i].push(map[i]); | |||
} | |||
} | |||
}); | |||
$.each(rChars, function (num, chars) { | |||
rChars[num] = new RegExp('(' + chars.map(mw.RegExp.escape).join('|') + ')', 'g'); | |||
}); | |||
matchers[targetType] = rChars; | |||
} | |||
return matchers[targetType]; | |||
} | |||
function msg(key) { | |||
return msgs[key][mw.config.get('wgUserLanguage')] || msgs[key].en; | |||
} | |||
/** | |||
* @param {HTMLElement|TextNode} node | |||
* @return {number} NodeFilter.FILTER_* constant | |||
*/ | |||
function filterNode(node) { | |||
if (node.nodeType === Node.TEXT_NODE) { | |||
return NodeFilter.FILTER_ACCEPT; | |||
} | |||
var n = node.nodeName && node.nodeName.toLowerCase(); | |||
if (n === 'input' || n === 'textarea' || $(node).hasClass('mw-numerakri-skip')) { | |||
// Skip this element and skip its children | |||
return NodeFilter.FILTER_REJECT; | |||
} | |||
// Skip this element, but check its children | |||
return NodeFilter.FILTER_SKIP; | |||
} | |||
/** | |||
* @param {TextNode} node | |||
*/ | |||
function handleTextNode(node) { | |||
var original = node.nodeValue, | |||
changed = original, | |||
matchers = getMatchers(currentType), | |||
i = 0; | |||
for (; i <= 9; i++) { | |||
changed = changed.replace(matchers[i], maps[currentType][i]); | |||
} | |||
if (original !== changed) { | |||
node.nodeValue = changed; | |||
} | |||
} | |||
// https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw-method-requestIdleCallback | |||
function idleWalker(deadline) { | |||
var el; | |||
if (!walker) { | |||
return; | |||
} | |||
while (deadline.timeRemaining() > 0) { | |||
el = walker.nextNode(); | |||
if (!el) { | |||
// Reached the end | |||
walker = null; | |||
return; | |||
} | |||
handleTextNode(el); | |||
} | |||
// The user may interact with the page. We pause so the browser can process | |||
// interaction. The text handler will continue after that. | |||
if (walker) { | |||
mw.requestIdleCallback(idleWalker); | |||
} | |||
} | |||
/** | |||
* Save a browser cookie for 30 days, or remove it. | |||
* @param {string|null} value | |||
*/ | |||
function saveType(value) { | |||
mw.requestIdleCallback(function () { | |||
$.cookie('mw-numerakri-type', value, { expires: 30, path: '/' }); | |||
}); | |||
} | |||
/** | |||
* @return {string} | |||
*/ | |||
function getStoredType() { | |||
var value = $.cookie('mw-numerakri-type'); | |||
if (value !== null && !isValidType(value)) { | |||
// Remove bad cookie | |||
saveType(null); | |||
value = null; | |||
} | |||
return value || 'default'; | |||
} | |||
function startPageConversion() { | |||
if (styleTag) { | |||
// Undo style for a previously selected type | |||
$(styleTag).remove(); | |||
styleTag = null; | |||
} | |||
if (currentType === 'default') { | |||
// Don't change the page | |||
return; | |||
} | |||
if (currentType === 'arabic') { | |||
styleTag = mw.loader.addStyleTag('.mw-parser-output ol, ol.references, li.references { list-style-type: decimal; }'); | |||
} else if (currentType === 'devanagari') { | |||
styleTag = mw.loader.addStyleTag('.mw-parser-output ol, ol.references, li.references { list-style-type: devanagari; }'); | |||
} | |||
// If a walker is already active, replace it. | |||
// If no walker is active yet, start it. | |||
if (!walker) { | |||
mw.requestIdleCallback(idleWalker); | |||
} | |||
walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, filterNode, false); | |||
} | |||
/** @return {HTMLElement} */ | |||
function createSelector() { | |||
var $select = $('<select>').addClass('mw-numerakri-skip').append( | |||
$('<option>').val('default').text(msg('option-default')) | |||
); | |||
availableMaps.forEach(function (type) { | |||
$select.append($('<option>').val(type).text(msg('option-' + type))); | |||
}); | |||
$select.val(currentType); | |||
$select.on('change', function () { | |||
currentType = this.value; | |||
startPageConversion(); | |||
saveType(currentType); | |||
}); | |||
return $select[0]; | |||
} | |||
function init() { | |||
var potlet, menu; | |||
// Decide which types to show | |||
availableMaps = ['gujarati', 'arabic']; | |||
// Decide selected type | |||
currentType = getStoredType(); | |||
startPageConversion(); | |||
potlet = mw.util.addPortletLink( | |||
'p-personal', | |||
msg('label-url'), | |||
msg('label-text'), | |||
'pt-numconvert', | |||
msg('label-tooltip'), | |||
null, | |||
(mw.user.isAnon === true) ? '#pt-createaccount' : '#pt-userpage' | |||
); | |||
menu = $('<div>').addClass('mw-numerakri-menu').append(createSelector())[0]; | |||
if(potlet) { | |||
potlet.appendChild(menu); | |||
} | |||
} | |||
$(function () { | |||
mw.requestIdleCallback(init); | |||
}); | |||
}()); | |||
/* Any JavaScript here will be loaded for all users on every page load. */ | |||
self.ws_messages = { | |||
'iwtrans':'Its text comes from', | |||
'iwtrans2':'Its text comes from other sub-domains.', | |||
'optlist':'Display options', | |||
'hide_page_numbers':'Hide page links', | |||
'show_page_numbers':'Show page links', | |||
'layout':'Layout', | |||
'author':'Author', | |||
'translator':'Translator', | |||
'editor':'Editor', | |||
'publisher':'Publisher', | |||
'place':'Place', | |||
'volume':'Volume', | |||
'school':'School', | |||
'book':'Book', | |||
'collection':'Collection', | |||
'journal':'Journal or magazine', | |||
'phdthesis':'Thesis, report', | |||
'dictionary':'Dictionary', | |||
'progress':'Progress', | |||
'progress_T':'Done', | |||
'progress_V':'To be validated', | |||
'progress_C':'To be proofread', | |||
'progress_MS':'Ready for Match & Split', | |||
'progress_OCR':'Needs an OCR text layer', | |||
'progress_L':'Source file is incorrect (missing pages, unordered pages, etc)', | |||
'page_namespace_name': 'Page', | |||
'page_trascluded_in': 'Page trascluded in:', | |||
'text_number': 'Text', | |||
'compare_with': 'Comparison with:', | |||
'compare_texts': 'Compare texts' | |||
}; | |||
//$.getScript( '//wiki.ekatrafoundation.org/index.php?title=MediaWiki:Base.js&action=raw&ctype=text/javascript' ) | |||
//.done( function() { | |||
// importScript('MediaWiki:InterWikiTransclusion.js'); | |||
// importScript('MediaWiki:TranscludedIn.js'); | |||
// importScript('MediaWiki:Compare.js'); | |||
//} ); | |||
$.getScript('//wiki.ekatrafoundation.org/index.php?title=MediaWiki:Base.js&action=raw&ctype=text/javascript') | |||
.done(function () { | |||
mw.loader.load('//wiki.ekatrafoundation.org/index.php?title=MediaWiki:InterWikiTransclusion.js&action=raw&ctype=text/javascript'); | |||
mw.loader.load('//wiki.ekatrafoundation.org/index.php?title=MediaWiki:TranscludedIn.js&action=raw&ctype=text/javascript'); | |||
mw.loader.load('//wiki.ekatrafoundation.org/index.php?title=MediaWiki:Compare.js&action=raw&ctype=text/javascript'); | |||
}); | |||
/* Footnotes as tooltip - from it.wikipedia.org - request by Candalua */ | |||
$( function () | |||
{ | |||
sups = document.getElementsByTagName("sup"); | |||
for (i=0; i<sups.length; i++) | |||
{ | |||
note_id = sups[i].childNodes[0].href; | |||
if (note_id && (note_id.indexOf("#") != -1)) | |||
{ | |||
note_id = document.getElementById(note_id.substr(note_id.indexOf("#")+1)); | |||
if (note_id) | |||
if (document.all) | |||
{ | |||
sups[i].title = note_id.innerText; | |||
sups[i].childNodes[0].title = note_id.innerText; | |||
} | |||
else | |||
{ | |||
sups[i].title = note_id.textContent; | |||
} | |||
} | |||
} | |||
}); | |||
// Add links to Wikidata in the toolbar where [[Module:Interwiki]] is used | |||
$("#t-wikibase").insertBefore($("#p-tb li").last()).removeAttr("style"); | |||
// Code to switch sizes for {{Tscore resizable}} | |||
$( function () | |||
{ | |||
el = document.getElementsByClassName("prp-page-content"); | |||
if (el.length) { | |||
maxwidth = el[0].clientWidth; | |||
} else { | |||
maxwidth = document.getElementById("mw-content-text").clientWidth; | |||
} | |||
screslistslist = document.getElementsByClassName("score-resizable-container"); | |||
scressizelist = []; | |||
for (i = 0; i < screslistslist.length; i++) { | |||
//maxwidth = screslistslist[i].parentNode.clientWidth; | |||
screslist = screslistslist[i].getElementsByClassName("score-resizable"); | |||
fitwidth = 0; | |||
fitelement = -1; | |||
for (j = 0; j < screslist.length; j++) { | |||
s = screslist[j].className.match(/score-resizable-size-\d+/); | |||
scressizelist[j] = parseInt(s[0].match(/\d+/), 10); | |||
//find largest score that has width < parent width | |||
if (scressizelist[j] > fitwidth && scressizelist[j] <= maxwidth) { | |||
fitwidth = scressizelist[j]; | |||
fitelement = j; | |||
} | |||
} | |||
if (fitelement < 0) { | |||
fitelement = 0; | |||
} | |||
for (j = 0; j < screslist.length; j++) { | |||
if (j != fitelement) { | |||
screslist[j].style.display = "none"; | |||
} | |||
} | |||
screslist[fitelement].style.display = "block"; | |||
} | } | ||
}); | |||
if (mw.user.isAnon) { // Check if the user is anonymous | |||
$(function () { | |||
$('.ext-wikisource-download-button').hide(); // Hide the button for anonymous users | |||
}); | |||
} | |||
$(document).ready(function() { | |||
// Get the page title | |||
var pageTitle = mw.config.get('wgTitle'); | |||
// Encode the title and replace spaces with '%20' | |||
var encodedTitle = encodeURIComponent(pageTitle).replace(/%20/g, '%20'); // Correctly handle spaces | |||
// Create the download button | |||
var downloadButton = $('<a>') | |||
.attr('href', 'https://wiki.ekatrafoundation.org/images/epub/' + encodedTitle + '.epub') | |||
.attr('download', '') // Suggests to download the file rather than opening it | |||
.text('Download EPUB') | |||
.css({ | |||
'display': 'inline-block', | |||
'padding': '8px 16px', | |||
'background-color': '#4CAF50', | |||
'color': '#ffffff', | |||
'text-align': 'center', | |||
'border-radius': '4px', | |||
'text-decoration': 'none', | |||
'margin-top': '10px' | |||
}); | |||
// Add the button to the page content | |||
$('#bodyContent').append(downloadButton); | |||
}); | |||
$(document).ready(function() { | |||
// Get the page title from the MediaWiki configuration | |||
var pageTitle = mw.config.get('wgTitle'); | |||
// Check if the page title contains a forward slash | |||
if (pageTitle.indexOf('/') === -1) { | |||
// Show the download button if it's a top-level page | |||
$('a[href*="/find_epub.php"]').show(); | |||
} else { | |||
// Hide the download button if it's a subpage | |||
$('a[href*="/find_epub.php"]').hide(); | |||
} | |||
}); | |||
$(document).ready(function() { | |||
var $element = $('#editpage-specialchars'); | |||
var isDragging = false; | |||
var startX, startY, initialX, initialY; | |||
$element.on('mousedown', function(e) { | |||
isDragging = true; | |||
startX = e.clientX; | |||
startY = e.clientY; | |||
initialX = $element.offset().left; | |||
initialY = $element.offset().top; | |||
$element.addClass('dragging'); | |||
}); | |||
$(document).on('mousemove', function(e) { | |||
if (isDragging) { | |||
var dx = e.clientX - startX; | |||
var dy = e.clientY - startY; | |||
$element.css({ | |||
top: initialY + dy + 'px', | |||
left: initialX + dx + 'px' | |||
}); | |||
} | |||
}); | |||
$(document).on('mouseup', function() { | |||
if (isDragging) { | |||
isDragging = false; | |||
$element.removeClass('dragging'); | |||
} | |||
}); | |||
}); | |||
// Table sorting functions for all devices | |||
function initMobileSorting() { | |||
console.log('Initializing table sorting for all devices...'); | |||
var tables = document.querySelectorAll('.wikitable, table.sortable'); | |||
console.log('Found tables:', tables.length); | |||
$(tables).each(function(index, table) { | |||
setupTableSorting($(table), index); | |||
}); | |||
} | |||
function setupTableSorting($table, tableIndex) { | |||
var $headers = $table.find('th'); | |||
if ($headers.length === 0) return; | |||
console.log('Setting up table', tableIndex, 'with', $headers.length, 'headers'); | |||
$table.off('click.tablesort'); | |||
$headers.each(function() { | |||
var $header = $(this); | |||
$header.css({ | |||
'cursor': 'pointer', | |||
'user-select': 'none', | |||
'background-color': '#f8f9fa', | |||
'border-bottom': '2px solid #a2a9b1', | |||
'position': 'relative' | |||
}); | |||
$header.find('.sort-arrow').remove(); | |||
$header.append('<span class="sort-arrow" style="margin-left: 5px; color: #666; font-size: 12px;">⇅</span>'); | |||
}); | |||
$table.on('click.tablesort', 'th', function(e) { | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
var $clickedHeader = $(this); | |||
var columnIndex = $clickedHeader.index(); | |||
var $allHeaders = $table.find('th'); | |||
var $dataRows = $table.find('tbody tr'); | |||
if ($dataRows.length === 0) { | |||
$dataRows = $table.find('tr').not($table.find('tr').first()); | |||
} | |||
if ($dataRows.length === 0) return; | |||
var currentSortClass = $clickedHeader.hasClass('sort-asc') ? 'asc' : | |||
$clickedHeader.hasClass('sort-desc') ? 'desc' : 'none'; | |||
var newSortDirection = currentSortClass === 'asc' ? 'desc' : 'asc'; | |||
$allHeaders.removeClass('sort-asc sort-desc'); | |||
$allHeaders.find('.sort-arrow').text('⇅').css('color', '#666'); | |||
$clickedHeader.addClass('sort-' + newSortDirection); | |||
var arrow = newSortDirection === 'asc' ? '⇑' : '⇓'; | |||
$clickedHeader.find('.sort-arrow').text(arrow).css('color', '#000'); | |||
var rowsArray = $dataRows.toArray(); | |||
rowsArray.sort(function(rowA, rowB) { | |||
var $cellA = $(rowA).find('td').eq(columnIndex); | |||
var $cellB = $(rowB).find('td').eq(columnIndex); | |||
if ($cellA.length === 0 || $cellB.length === 0) return 0; | |||
var textA = $cellA.text().trim(); | |||
var textB = $cellB.text().trim(); | |||
var numA = parseFloat(textA.replace(/[,$%\s]/g, '')); | |||
var numB = parseFloat(textB.replace(/[,$%\s]/g, '')); | |||
var result; | |||
if (!isNaN(numA) && !isNaN(numB)) { | |||
result = numA - numB; | |||
} else { | |||
result = textA.localeCompare(textB); | |||
} | |||
return newSortDirection === 'desc' ? -result : result; | |||
}); | |||
var $tbody = $table.find('tbody'); | |||
if ($tbody.length > 0) { | |||
$tbody.empty().append(rowsArray); | |||
} else { | |||
$table.find('tr').not($table.find('tr').first()).remove(); | |||
$table.append(rowsArray); | |||
} | |||
setTimeout(function() { | |||
setupTableSorting($table, tableIndex); | |||
}, 10); | |||
}); | |||
} | |||
// Initialize table sorting on page load | |||
$(document).ready(function() { | |||
initMobileSorting(); | |||
mw.hook('wikipage.content').add(function() { | |||
initMobileSorting(); | |||
}); | |||
}); | }); | ||