VOOZH about

URL: https://minecraft.wiki/w/MediaWiki:Common.js

⇱ MediaWiki:Common.js – Minecraft Wiki


MediaWiki:Common.js

From Minecraft Wiki
Jump to navigation Jump to search
In other languages

Note: After saving, you have to bypass your browser's cache to see the changes.

Google Chrome, Firefox, Microsoft Edge, and Safari: Hold down the key and click the Reload toolbar button.
For details and instructions about other browsers, see Wikipedia:Bypass your cache.

/**
 * Scripts placed here are loaded for all skins on the desktop view
 * 
 * Global scripts which should be loaded on both desktop and mobile should go in
 * [[MediaWiki:Gadget-site.js]]
 * Mobile-only scripts should go in [[MediaWiki:Minerva.js]]
 */
(function(){
'use strict';
/* Variables for interface text used throughout the script, for ease of translating */
vari18n={
// File upload
defaultLicense:'License',
more_results:'And $1 other open issues.',
no_results:'No open issues found.',
projects:{
bds:'Bedrock Dedicated Server',
mc:'Java Edition',
mcd:'Minecraft Dungeons',
mcl:'Launcher',
mclg:'Minecraft Legends',
mcpe:'Bedrock Edition',
realms:'Realms',
web:'Mojang Web Services'
}
};
/* Fires when DOM is ready */
$(function(){
/**
 * Pause animations on mouseover of a designated container (.animated-container and .mcui)
 *
 * This is so people have a chance to look at the image and click on pages they want to view.
 */
$('#mw-content-text').on('mouseenter mouseleave','.animated-container, .mcui',function(e){
$(this).find('.animated').toggleClass('animated-paused',e.type==='mouseenter');
});
/** 
 * Fix edit summary prompt for undo
 *
 * Fixes the fact that the undo function combined with the "no edit summary prompter"
 * causes problems if leaving the edit summary unchanged.
 * Added by [[wikipedia:User:Deskana]], code by [[wikipedia:User:Tra]].
 * See https://bugzilla.wikimedia.org/show_bug.cgi?id=8912
 */
if(document.location.search.indexOf("undo=")!==-1&&document.getElementsByName('wpAutoSummary')[0]){
document.getElementsByName('wpAutoSummary')[0].value='1';
}
/**
 * Make simple search suggestions box separately styled
 */
/*mw.loader.using( 'mediawiki.searchSuggest', function() {
	setTimeout( function() {
		$( '.suggestions:first' ).addClass( 'searchbar' );
	} );
} );*/
/**
 * Set unlicensed as the default license on file pages
 *
 * That way the file will be categorised so someone can find a license for the file
 */
if(mw.config.get('wgCanonicalSpecialPageName')==='Upload'){
var$license=$('#wpLicense');
if($license.length){
if(!$license.val()){
$license.val(i18n.defaultLicense);
}
mw.loader.using('mediawiki.special.upload',function(){
setTimeout(function(){
$license.change();
});
});
}
}
/**
 * Creates minecraft style tooltips
 *
 * Replaces normal tooltips. Supports minecraft [[formatting codes]] (except k), and a description with line breaks (/).
 */
(function(){
varescapeChars={'\\&':'&#38;','<':'&#60;','>':'&#62;'};
varescape=function(text){
// "\" must be escaped first
returntext.replace(/\\\\/g,'&#92;')
.replace(/\\&|[<>]/g,function(char){returnescapeChars[char];});
};
var$tooltip=$();
var$win=$(window),winWidth,winHeight,width,height;
$('#mw-content-text').on({
'mouseenter.minetip':function(e){
$tooltip.remove();
var$elem=$(this),title=$elem.attr('data-minetip-title');
if(title===undefined){
title=$elem.attr('title');
if(title!==undefined){
title=$.trim(title.replace(/&/g,'\\&'));
$elem.attr('data-minetip-title',title);
}
}
// No title or title only contains formatting codes
if(title===undefined||title!==''&&title.replace(/&([0-9a-jl-qs-vyzr]|#[0-9a-fA-F]{6}|\$[0-9a-fA-F]{3})/g,'')===''){
// Find deepest child title
varchildElem=$elem[0],childTitle;
do{
if(childElem.hasAttribute('title')){
childTitle=childElem.title;
}
childElem=childElem.firstChild;
}while(childElem&&childElem.nodeType===1);
if(childTitle===undefined){
return;
}
// Append child title as title may contain formatting codes
if(!title){
title='';
}
title+=$.trim(childTitle.replace(/&/g,'\\&'));
// Set the retrieved title as data for future use
$elem.attr('data-minetip-title',title);
}
if(!$elem.data('minetip-ready')){
// Remove title attributes so the native tooltip doesn't get in the way
$elem.find('[title]').addBack().removeAttr('title');
$elem.data('minetip-ready',true);
}
if(title===''){
return;
}
varcontent='<span class="minetip-title">'+escape(title)+'&r</span>';
vardescription=$.trim($elem.attr('data-minetip-text'));
if(description){
// Apply normal escaping plus "/"
description=escape(description).replace(/\\\//g,'&#47;');
content+='<span class="minetip-description">'+description.replace(/\//g,'<br>')+'&r</span>';
}
// Add classes for minecraft formatting codes
while(content.search(/&(?:[0-9a-jl-qs-vyz]|#[0-9a-fA-F]{6}|\$[0-9a-fA-F]{3})/)>-1){
content=content.replace(/&([0-9a-jl-qs-vyz])(.*?)(&r|$)/g,'<span class="format-$1">$2</span>&r');
content=content.replace(/&(?:#([0-9a-fA-F]{6})|\$([0-9a-fA-F]{3}))(.*?)(&r|$)/g,'<span class="format-custom" style="color: #$1$2;">$3</span>&r');
}
// Remove reset formatting
content=content.replace(/&r/g,'');
$tooltip=$('<div id="minetip-tooltip">');
$tooltip.html(content).appendTo('body');
// Cache current window and tooltip size
winWidth=$win.width();
winHeight=$win.height();
width=$tooltip.outerWidth(true);
height=$tooltip.outerHeight(true);
// Trigger a mouse movement to position the tooltip
$elem.trigger('mousemove',e);
},
'mousemove.minetip':function(e,trigger){
if(!$tooltip.length){
$(this).trigger('mouseenter');
return;
}
// Get event data from remote trigger
e=trigger||e;
// Get mouse position and add default offsets
vartop=e.clientY-34;
varleft=e.clientX+14;
// If going off the right of the screen, go to the left of the cursor
if(left+width>winWidth){
left-=width+36;
}
// If now going off to the left of the screen, resort to going above the cursor
if(left<0){
left=0;
top-=height-22;
// Go below the cursor if too high
if(top<0){
top+=height+47;
}
// Don't go off the top of the screen
}elseif(top<0){
top=0;
// Don't go off the bottom of the screen
}elseif(top+height>winHeight){
top=winHeight-height;
}
// Apply the positions
$tooltip.css({top:top,left:left});
},
'mouseleave.minetip':function(){
if(!$tooltip.length){
return;
}
$tooltip.remove();
$tooltip=$();
}
},'.minetip, .invslot-item');
}());
/* [[Template:Issue list]] commented out until we find out a way to query Mojira API more reliably - dian */
// mw.hook( 'wikipage.content' ).add( function( $content ) {
// 	$content.find('.issue-list').each( function() {
// 		let issueList = $(this);
// 		let apiRequests = [];
// 		for (let project in this.dataset) {
// 			let url = new URL('https://tools.minecraft.wiki/jigsaw/mojira');
// 			url.searchParams.set('project', project.toUpperCase());
// 			url.searchParams.set('jql', this.dataset[project]);
// 			delete this.dataset[project];
// 			let apiRequest = $.ajax( url.href );
// 			apiRequests.push( apiRequest.then( function( search ) {
// 				if ( search.errors ) return Promise.reject(search.errorMessages);
// 				let issueList = $('<ul>');
// 				if ( search.issues.length ) {
// 					issueList.append( search.issues.map( function( issue ) {
// 						let issueLink = $('<a class="extiw">').attr('href', 'https://bugs.mojang.com/browse/' + issue.key).attr('title', 'mojira:' + issue.key).text(issue.key);
// 						return $('<li>').text(' – ' + ( issue.fields.resolution ? '[' + issue.fields.resolution.name + '] ' : '' ) + issue.fields.summary).prepend(issueLink);
// 					} ) );	
// 					if ( search.total > search.issues.length ) $('<li>').text( mw.format(i18n.more_results, search.total - search.issues.length) ).appendTo( issueList );
// 				}
// 				else $('<li>').text( i18n.no_results ).appendTo( issueList );
// 				return { project, list: issueList };
// 			} ) );
// 		}
// 		if ( apiRequests.length ) Promise.allSettled( apiRequests ).then( function( results ) {
// 			results.filter( result => result.status === 'rejected' ).forEach( result => console.warn('Mojira:', result.reason) );
// 			if ( results.length === 1 ) {
// 				if ( results[0].status === 'fulfilled' ) issueList.append( results[0].value.list );
// 				return;
// 			}
// 			issueList.append(
// 				results.filter( result => result.status === 'fulfilled' ).map( result => result.value ).flatMap( function( result ) {
// 					return [
// 						$('<p>').append( $('<b>').text( i18n.projects[result.project] || result.project.toUpperCase() ) ),
// 						result.list
// 					];
// 				} )
// 			);
// 		} );
// 	} );
// } );
// Dismissible alert
mw.hook('wikipage.content').add(($content)=>{
$content.find('.dismissible-alert').each((_,/** @type {HTMLTimeElement} */element)=>{
if(!element.dataset.alertid)return;
if(!localStorage.getItem(`dismissed-alert-${element.dataset.alertid}`)){
element.style.display='';
}
// dismiss button
element.querySelector('.dismissible-alert-dismiss').addEventListener('click',()=>{
localStorage.setItem(`dismissed-alert-${element.dataset.alertid}`,true);
element.style.display='none';
});
});
});
// Avoid redirecting for links in categories
$('.ns-14 .redirect-in-category .mw-redirect').each(function(){
this.href+=(this.href.includes('?')?'&':'?')+'redirect=no';
});
// Main page random fact
constbutton=document.querySelector('#mp-dyk-button');
constdykTransitionDurationMs=200;
if(button){
button.addEventListener('click',()=>{
$('#mp-dyk-fact').css('height',$('#mp-dyk-fact > *').height()+'px').addClass('loading');
newmw.Api().parse(`{{DidYouKnow|count=3|random=1|type=${button.dataset.dykType}}}`,{
prop:'text',
disablelimitreport:1,
requestid:'mp-dyk'
}).then((content)=>{
setTimeout(()=>{
$('#mp-dyk-fact').html(content);
$('#mp-dyk-fact').css('height',$('#mp-dyk-fact > *').height()+'px');
setTimeout(()=>$('#mp-dyk-fact').removeClass('loading'),dykTransitionDurationMs);
},dykTransitionDurationMs);
});
});
}
constportal=document.querySelector('.mp-portal-wrapper');
if(portal){
constthisPage=portal.querySelector('.mp-portal-active');
portal.addEventListener('click',(event)=>{
if(!event.target.closest('a'))return;
constisNewTab=event.ctrlKey||event.metaKey;
if(isNewTab)return;
if(thisPage)thisPage.classList.remove('mp-portal-active');
event.target.closest('.mp-portal').classList.add('mp-portal-active');
});
document.addEventListener('visibilitychange',()=>{
if(document.visibilityState==='visible'){
portal.querySelector('.mp-portal-active').classList.remove('mp-portal-active');
thisPage.classList.add('mp-portal-active');
}
});
}
constlogoLinks=[
document.querySelector("a.mw-wiki-logo, header .branding-box a"),
document.querySelector('a.toggle-list-item__anchor[href="/"]')
].filter(l=>l);
if(logoLinks.length!==0){
constnamespace=mw.config.get("wgNamespaceNumber")-mw.config.get("wgNamespaceNumber")%2;
letlink={
10000:'/w/Dungeons:Wiki',
10002:'/w/Earth:Wiki',
10004:'/w/Story_Mode:Wiki',
10006:'/w/Legends:Wiki',
10012:'/w/Movie:Wiki',
10014:'/w/Dungeons:Wiki',
}[namespace];
if(link){
for(constlogoLinkoflogoLinks){
logoLink.href=link;
}
}
}
});
/* End DOM ready */
}());
Retrieved from "https://minecraft.wiki/w/MediaWiki:Common.js?oldid=3609499"

Navigation menu