MediaWiki
Gadget-breadcrumbs.js
From Dogcraft Wiki
m (space >> underscore) |
mNo edit summary |
||
(20 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
$(document).ready(function() { | $(document).ready(function() { | ||
var config = mw.config.get([ | |||
"wgIsArticle", | |||
"wgNamespaceNumber", | |||
"wgCategories", | |||
"wgTitle" | |||
]); | |||
function worldCat( pageCats ) { | function worldCat( pageCats ) { | ||
for (var i = 0; i < pageCats.length; i++) { | for (var i = 0; i < pageCats.length; i++) { | ||
if ( pageCats[i].indexOf('Survival ') > -1) { | if ( pageCats[i].indexOf('Survival ') > -1) { | ||
return pageCats[i].toString(); | |||
} | } | ||
} | } | ||
return | return ''; | ||
} | |||
function simpleAddCat( categories, breadcrumb, links ) { | |||
if (categories.includes( breadcrumb )) { | |||
links.push( breadcrumb ); | |||
} | |||
} | } | ||
var config = | function htmlElementBuilder( type, config ) { | ||
" | var elem = document.createElement( type.toString() ); | ||
" | |||
" | if (typeof config.id !== 'undefined') { elem.id = config.id; } | ||
" | if (typeof config.classList !== 'undefined') { elem.classList = config.classList; } | ||
if (typeof config.textContent !== 'undefined') { elem.textContent = config.textContent; } | |||
if (type === 'a' && typeof config.href !== 'undefined') { elem.href = config.href; } | |||
return elem; | |||
} | |||
/* creates a single breadcrumb link */ | |||
function crumbBuilder( target, name ) { | |||
var crumb = htmlElementBuilder('a', { href: '/wiki/' + target }); | |||
crumb.appendChild( htmlElementBuilder('span', { textContent: name.toString() }) ); | |||
return crumb; | |||
} | |||
function breadcrumbsBuilder( crumbs, fullcrumbs ) { | |||
var container = htmlElementBuilder('div', {id: 'breadcrumbs'}); | |||
container.appendChild( crumbBuilder('Main_Page', 'Dogcraft Wiki') ); | |||
if ( fullcrumbs ) { | |||
crumbs.forEach( function( elem ) { container.appendChild( elem ); }); | |||
} | |||
else { | |||
// creates <a> elements from the links list | |||
crumbs.forEach( function( elem ) { | |||
var crumb = crumbBuilder( 'Category:' + elem, elem.toString() ); | |||
container.appendChild( crumb ); | |||
}); | |||
} | |||
container.appendChild( htmlElementBuilder('span', {textContent: config.wgTitle}) ); | |||
return container; | |||
} | |||
/* special pages */ | |||
if ( config.wgNamespaceNumber == -1) { | |||
$('.top .indicators').prepend( breadcrumbsBuilder( [crumbBuilder( 'Special:SpecialPages', 'Special pages')], true ) ); | |||
} | |||
/* news pages */ | |||
if ( config.wgNamespaceNumber == 3004) { | |||
var typeCategories = [ | |||
"Newsletter" | |||
], | |||
pageCategories = config.wgCategories, | |||
links = []; | |||
var typesOnPage = pageCategories.filter(function(x){ return typeCategories.includes(x) }); | |||
if ( typesOnPage.length == 1) { | |||
links.push( typesOnPage[0] + "" ); | |||
} | |||
else if (typesOnPage.length > 1) { | |||
console.log('Breadcrumbs: Page has more than one type category'); | |||
links.push( typesOnPage[0] + "" ); | |||
} | |||
/* creates the breadcrumbs and adds them to the page */ | |||
if ( links !== "undefined") { | |||
var breadcrumbs = htmlElementBuilder('div', {id: 'breadcrumbs'}); | |||
links.forEach( function( elem ) { | |||
var crumb = crumbBuilder( 'Category:' + elem, elem.toString() ); | |||
breadcrumbs.appendChild( crumb ); | |||
}); | |||
$('.top .indicators .namespace').after( breadcrumbs ); | |||
} | |||
else { console.log(' Breadcrumbs: links is undefined '); } | |||
} | |||
/* articles */ | |||
if ( config.wgIsArticle && ( config.wgNamespaceNumber == 0 && config.wgTitle !== "Main Page")) { | if ( config.wgIsArticle && ( config.wgNamespaceNumber == 0 && config.wgTitle !== "Main Page")) { | ||
/ | /* creates and fills links[] based on page categories */ | ||
var serverInfo = "", | var serverInfo = "", | ||
siteContent = "", | siteContent = "", | ||
type = "", | type = "", | ||
typeCategories = [ | typeCategories = [ | ||
"Events", | "Events", | ||
Line 34: | Line 115: | ||
], | ], | ||
pageCategories = config.wgCategories, | pageCategories = config.wgCategories, | ||
links = [] | links = []; | ||
simpleAddCat( pageCategories, "Site Content", links); | |||
simpleAddCat( pageCategories, "Server Features", links); | |||
simpleAddCat( pageCategories, "Patreon", links); | |||
if ( !pageCategories.includes('Worlds') && worldCat( pageCategories ) !== "") { | |||
//^ doesnt make much sense to include the specific world on the world's page, | |||
//eg. Main Page > Survival 4 > Worlds > Survival 4 is weird | |||
links.push( worldCat( pageCategories ) ); | links.push( worldCat( pageCategories ) ); | ||
} | } | ||
Line 67: | Line 144: | ||
} | } | ||
} | } | ||
} | } | ||
else | else | ||
Line 81: | Line 157: | ||
} | } | ||
/* creates the breadcrumbs and adds them to the page */ | |||
if ( links !== "undefined") { | |||
var breadcrumbs = breadcrumbsBuilder( links, false ); | |||
$('.top .indicators').prepend( breadcrumbs ); | |||
if( links !== "undefined") { | |||
$('.top .indicators').prepend( | |||
} | } | ||
else { console.log(' Breadcrumbs: links is undefined '); } | else { console.log(' Breadcrumbs: links is undefined '); } | ||
Line 99: | Line 167: | ||
} | } | ||
/* this probably should be in Common.js or the Helppage gadget (if thats still a thing) */ | |||
if (mw.config.get('wgPageName') === "Rules" || mw.config.get('wgPageName') === "Help_Resources") | if (mw.config.get('wgPageName') === "Rules" || mw.config.get('wgPageName') === "Help_Resources") | ||
{ | { | ||
Line 106: | Line 175: | ||
$('#breadcrumbs a:first-child').text('Dogcraft.net'); | $('#breadcrumbs a:first-child').text('Dogcraft.net'); | ||
} | } | ||
if (mw.config.get('wgNamespaceNumber') === 3004) { | |||
$("#pagecount").append($(".mw-indicators.mw-body-content")); | |||
} | |||
mw.hook( 'userjs.breadcrumbs.done' ).fire(); | |||
}); | |||
mw.hook( 'userjs.pagecount.done' ).add( function() { | |||
if (mw.config.get('wgNamespaceNumber') === 3004) { | |||
$("#pagecount").append($(".mw-indicators.mw-body-content")); | |||
} | |||
}); | }); |
Latest revision as of 18:11, 2 August 2024
$(document).ready(function() {
var config = mw.config.get([
"wgIsArticle",
"wgNamespaceNumber",
"wgCategories",
"wgTitle"
]);
function worldCat( pageCats ) {
for (var i = 0; i < pageCats.length; i++) {
if ( pageCats[i].indexOf('Survival ') > -1) {
return pageCats[i].toString();
}
}
return '';
}
function simpleAddCat( categories, breadcrumb, links ) {
if (categories.includes( breadcrumb )) {
links.push( breadcrumb );
}
}
function htmlElementBuilder( type, config ) {
var elem = document.createElement( type.toString() );
if (typeof config.id !== 'undefined') { elem.id = config.id; }
if (typeof config.classList !== 'undefined') { elem.classList = config.classList; }
if (typeof config.textContent !== 'undefined') { elem.textContent = config.textContent; }
if (type === 'a' && typeof config.href !== 'undefined') { elem.href = config.href; }
return elem;
}
/* creates a single breadcrumb link */
function crumbBuilder( target, name ) {
var crumb = htmlElementBuilder('a', { href: '/wiki/' + target });
crumb.appendChild( htmlElementBuilder('span', { textContent: name.toString() }) );
return crumb;
}
function breadcrumbsBuilder( crumbs, fullcrumbs ) {
var container = htmlElementBuilder('div', {id: 'breadcrumbs'});
container.appendChild( crumbBuilder('Main_Page', 'Dogcraft Wiki') );
if ( fullcrumbs ) {
crumbs.forEach( function( elem ) { container.appendChild( elem ); });
}
else {
// creates <a> elements from the links list
crumbs.forEach( function( elem ) {
var crumb = crumbBuilder( 'Category:' + elem, elem.toString() );
container.appendChild( crumb );
});
}
container.appendChild( htmlElementBuilder('span', {textContent: config.wgTitle}) );
return container;
}
/* special pages */
if ( config.wgNamespaceNumber == -1) {
$('.top .indicators').prepend( breadcrumbsBuilder( [crumbBuilder( 'Special:SpecialPages', 'Special pages')], true ) );
}
/* news pages */
if ( config.wgNamespaceNumber == 3004) {
var typeCategories = [
"Newsletter"
],
pageCategories = config.wgCategories,
links = [];
var typesOnPage = pageCategories.filter(function(x){ return typeCategories.includes(x) });
if ( typesOnPage.length == 1) {
links.push( typesOnPage[0] + "" );
}
else if (typesOnPage.length > 1) {
console.log('Breadcrumbs: Page has more than one type category');
links.push( typesOnPage[0] + "" );
}
/* creates the breadcrumbs and adds them to the page */
if ( links !== "undefined") {
var breadcrumbs = htmlElementBuilder('div', {id: 'breadcrumbs'});
links.forEach( function( elem ) {
var crumb = crumbBuilder( 'Category:' + elem, elem.toString() );
breadcrumbs.appendChild( crumb );
});
$('.top .indicators .namespace').after( breadcrumbs );
}
else { console.log(' Breadcrumbs: links is undefined '); }
}
/* articles */
if ( config.wgIsArticle && ( config.wgNamespaceNumber == 0 && config.wgTitle !== "Main Page")) {
/* creates and fills links[] based on page categories */
var serverInfo = "",
siteContent = "",
type = "",
typeCategories = [
"Events",
"Settlements",
"Groups",
"Phenomenon",
"Projects",
"Worlds"
],
pageCategories = config.wgCategories,
links = [];
simpleAddCat( pageCategories, "Site Content", links);
simpleAddCat( pageCategories, "Server Features", links);
simpleAddCat( pageCategories, "Patreon", links);
if ( !pageCategories.includes('Worlds') && worldCat( pageCategories ) !== "") {
//^ doesnt make much sense to include the specific world on the world's page,
//eg. Main Page > Survival 4 > Worlds > Survival 4 is weird
links.push( worldCat( pageCategories ) );
}
if (pageCategories.includes('Builds')) {
links.push( "Builds" );
for (var i = 0; i < pageCategories.length; i++) {
switch (pageCategories[i]) {
case 'Bases':
links.push( "Bases" );
break;
case 'Stations':
links.push( "Stations" );
break;
case 'Shelters':
links.push( "Shelters" );
break;
default:
break;
}
}
}
else
{
var typesOnPage = pageCategories.filter(function(x){ return typeCategories.includes(x) });
if ( typesOnPage.length == 1) {
links.push( typesOnPage[0] + "" );
}
else if (typesOnPage.length > 1) {
console.log('Breadcrumbs: Page has more than one type category');
links.push( typesOnPage[0] + "" );
}
}
/* creates the breadcrumbs and adds them to the page */
if ( links !== "undefined") {
var breadcrumbs = breadcrumbsBuilder( links, false );
$('.top .indicators').prepend( breadcrumbs );
}
else { console.log(' Breadcrumbs: links is undefined '); }
}
/* this probably should be in Common.js or the Helppage gadget (if thats still a thing) */
if (mw.config.get('wgPageName') === "Rules" || mw.config.get('wgPageName') === "Help_Resources")
{
$('#tagline').hide();
$('#breadcrumbs > a').slice(1).hide();
$('#breadcrumbs a:first-child').attr('href', '//dogcraft.net');
$('#breadcrumbs a:first-child').text('Dogcraft.net');
}
if (mw.config.get('wgNamespaceNumber') === 3004) {
$("#pagecount").append($(".mw-indicators.mw-body-content"));
}
mw.hook( 'userjs.breadcrumbs.done' ).fire();
});
mw.hook( 'userjs.pagecount.done' ).add( function() {
if (mw.config.get('wgNamespaceNumber') === 3004) {
$("#pagecount").append($(".mw-indicators.mw-body-content"));
}
});