![]() |
VOOZH | about |
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; }); } }); });