VOOZH about

URL: https://minecraft.wiki/w/MediaWiki:Gadget-spriteDoc.js

⇱ MediaWiki:Gadget-spriteDoc.js – Minecraft Wiki


MediaWiki:Gadget-spriteDoc.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.

mw.hook('wikipage.content').add(function($content){
'use strict';
vari18n={
deprecatedCats:['Deprecated sprite names'],
sectionDeprecated:'Deprecated',
sectionOther:'Other',
toc:'Contents',
sharedRepo:{
// en: 'https://minecraft.wiki'
}
};
varspritedocs=$content.find('.js-spritedoc');
if(!spritedocs.length)return;
mw.loader.using([
'jquery.spinner',
(spritedocs.is('[data-sprite-repo]')?'mediawiki.ForeignApi':'mediawiki.api'),
'mediawiki.util'
]).done(function(){
spritedocs.prepend($.createSpinner());
varapiOptions={parameters:{
action:'query',
generator:'allpages',
gapnamespace:6,
gapfilterredir:'all',
gaplimit:'max',
prop:['imageinfo','categories'],
iiprop:['canonicaltitle','url'],
iilimit:1,
cllimit:'max',
formatversion:2
}};
vardeprecatedNames=newSet();
spritedocs.each(function(){
varspritedoc=$(this);
varprefix=this.dataset.spriteName;
varwidth=this.dataset.spriteWidth||this.dataset.spriteSize||16;
varheight=this.dataset.spriteHeight||this.dataset.spriteSize||16;
varkeepcase='spriteKeepcase'inthis.dataset;
varlinkprefix=(this.dataset.spriteRepo&&i18n.sharedRepo.hasOwnProperty(this.dataset.spriteRepo)?i18n.sharedRepo[this.dataset.spriteRepo]:'');
varapi=(linkprefix?newmw.ForeignApi(linkprefix+mw.util.wikiScript('api'),apiOptions):newmw.Api(apiOptions));
varspriteCategories=newMap(this.dataset.spriteCategories?this.dataset.spriteCategories.split(';').map(function(spriteCategory){
varcategory=spriteCategory.split('=');
return[
category[0].trim(),
{section:category.slice(1).join('=').trim(),boxes:[]}
];
}):[]);
varaliasJson=this.dataset.spriteAliasJson;
if(!prefix)return;
prefix+=' ';
getPages(api,prefix,keepcase,spriteCategories,newMap(),{},newMap(),true).then(function(data){
if(aliasJson)returngetAliases(aliasJson,data,prefix,spriteCategories);
returndata;
}).then(function(data){
varsections={other:[],deprecated:[]};
Array.from(data.values()).map(function(page){
page.redirects.sort();
page.aliases.sort();
returnpage;
}).sort(function(a,b){
if(a.aliases.length&&!b.aliases.length)return-1;
if(!a.aliases.length&&b.aliases.length)return1;
vartitleA=a.aliases[0]||a.redirects[0];
vartitleB=b.aliases[0]||b.redirects[0];
if(titleA<titleB)return-1;
if(titleA>titleB)return1;
return0;
}).forEach(function(page){
varisDeprecated=false;
varbox=$('<li>').addClass('js-spritedoc-box').append(
$('<a>').addClass('js-spritedoc-image')
.attr('href',linkprefix+mw.util.getUrl(page.title))
.attr('title',page.title).append(
$('<img>').addClass('pixel-image')
.attr('decoding','async')
.attr('loading','lazy')
.attr('width',width)
.attr('height',height)
.attr('src',page.url)
),
$('<ul>').addClass('js-spritedoc-names').append(
page.aliases.map(function(alias){
varlinkclasses=['alias'];
if(deprecatedNames.has(alias)){
isDeprecated=true;
linkclasses.push('deprecated');
}
return$('<li>').addClass('js-spritedoc-name').append(
$('<span>').addClass(linkclasses).append(
$('<code>').text(alias)
)
);
}),
page.redirects.map(function(redirect){
varname=redirect.split(':').slice(1).join(':').replace(prefix,'').replace(/\.png$/,'');
varquery='';
varlinkclasses=[];
if(redirect!==page.title){
query+='?redirect=no';
linkclasses.push('mw-redirect');
}
if(deprecatedNames.has(redirect)){
isDeprecated=true;
linkclasses.push('deprecated');
}
return$('<li>').addClass('js-spritedoc-name').append(
$('<a>').attr('href',linkprefix+mw.util.getUrl(redirect)+query)
.attr('title',redirect).addClass(linkclasses).append(
$('<code>').text(name)
)
);
})
)
);
if(!page.redirects.length)box.addClass('alias-only');
if(isDeprecated)sections.deprecated.push(box.clone());
if(!page.categories.length)sections.other.push(box.clone());
elsepage.categories.forEach(function(category){
spriteCategories.get(category).boxes.push(box.clone());
});
});
varspriteToc=[];
spritedoc.empty();
spriteCategories.forEach(function(spriteCategory){
if(!spriteCategory.boxes.length)return;
spriteToc.push(spriteCategory.section);
spritedoc.append(
$('<h3>').text(spriteCategory.section).attr('id',spriteCategory.section.replace(/ /g,'_')),
$('<ul>').addClass('js-spritedoc-boxes').append(spriteCategory.boxes)
);
});
if(sections.other.length){
spriteToc.push(i18n.sectionOther);
spritedoc.append(
$('<h3>').text(i18n.sectionOther).attr('id',i18n.sectionOther.replace(/ /g,'_')),
$('<ul>').addClass('js-spritedoc-boxes').append(sections.other)
);
}
if(sections.deprecated.length){
spriteToc.push(i18n.sectionDeprecated);
spritedoc.append(
$('<h3>').text(i18n.sectionDeprecated).attr('id',i18n.sectionDeprecated.replace(/ /g,'_')),
$('<ul>').addClass('js-spritedoc-boxes').append(sections.deprecated)
);
}
if(spriteToc.length>1)spritedoc.prepend(
$('<div class="toc">').append(
$('<div class="toctitle">').append($('<h2>').text(i18n.toc)),
$('<ul>').append(spriteToc.map(function(section,i){
return$('<li class="toclevel-1">').append(
$('<a>').attr('href','#'+section.replace(/ /g,'_')).append(
$('<span class="tocnumber">').text(i+1),
$('<span class="toctext">').text(section)
)
);
}))
)
);
mw.hook('wikipage.content').fire(spritedoc);
});
});
functiongetPages(api,prefix,keepcase,spriteCategories,pages,gpcontinue,pageCache,batchcomplete){
returnapi.get(Object.assign({
gapprefix:prefix
},gpcontinue)).then(function(data){
if(data.query&&data.query.pages)data.query.pages.forEach(function(page){
if(!page.title.endsWith('.png'))return;
if(!keepcase){
varname=page.title.split(':').slice(1).join(':').replace(prefix,'');
if(name!==name.toLowerCase().replace(/[\s\+]/g,'-'))return;
}
varcategories=[];
if(page.categories&&page.categories.length){
page.categories.forEach(function(category){
varcategoryName=category.title.split(':').slice(1).join(':');
if(i18n.deprecatedCats.includes(categoryName)){
deprecatedNames.add(page.title);
}
if(spriteCategories.has(categoryName)){
categories.push(categoryName);
}
});
}
if(!page.imageinfo||!page.imageinfo[0]||!page.imageinfo[0].url){
varcanonicaltitle=pageCache.get(page.pageid);
if(canonicaltitle)pages.get(canonicaltitle).categories.push(...categories);
return;
}
if(batchcomplete&&!data.batchcomplete){
pageCache.set(page.pageid,page.imageinfo[0].canonicaltitle);
}
if(!pages.has(page.imageinfo[0].canonicaltitle)){
pages.set(page.imageinfo[0].canonicaltitle,{
title:page.imageinfo[0].canonicaltitle,
url:page.imageinfo[0].url,
redirects:[page.title],
aliases:[],
categories
});
return;
}
pages.get(page.imageinfo[0].canonicaltitle).redirects.push(page.title);
pages.get(page.imageinfo[0].canonicaltitle).categories.push(...categories);
});
if(data.batchcomplete)pageCache.clear();
if(data.continue){
returngetPages(api,prefix,keepcase,spriteCategories,pages,data.continue,pageCache,data.batchcomplete);
}
returnpages;
});
}
functiongetAliases(aliasJson,pages,prefix,spriteCategories){
returnfetch(mw.util.getUrl(aliasJson,{
action:'raw',
ctype:'application/json'
})).then(function(response){
returnresponse.json();
}).then(function(data){
for(varaliasindata.aliases){
varsource=data.aliases[alias];
if(!source)continue;
varpagename=(typeofsource==='string'?source:source.name);
varpage=[...pages.values()].find(function(page){
returnpage.redirects.some(function(redirect){
returnredirect.split(':').slice(1).join(':')===prefix+pagename+'.png';
})||page.aliases.includes(pagename);
});
if(!page){
page={
title:'File:'+prefix+pagename+'.png',
url:mw.util.getUrl('Special:Filepath/'+prefix+pagename+'.png'),
redirects:[],
aliases:[pagename],
categories:[]
};
pages.set(page.title,page);
}
page.aliases.push(alias);
if(typeofsource==='string')continue;
if(source.deprecated)deprecatedNames.add(alias);
if(source.categories&&source.categories.length){
source.categories.forEach(function(category){
if(i18n.deprecatedCats.includes(category)){
deprecatedNames.add(alias);
}
if(spriteCategories.has(category)){
page.categories.push(category);
}
});
}
}
returnpages;
}).catch(function(error){
console.log('Error while getting the sprite alias JSON:',error);
returnpages;
});
}
});
});
Retrieved from "https://minecraft.wiki/w/MediaWiki:Gadget-spriteDoc.js?oldid=2660460"

Navigation menu