/// Gadget-prettyPageHeading.js
// Format page header nice if namespace and/or subpage
/// 2018-08-25 [email protected]
// ResourceLoader: compatible;
// dependencies: NONE
/// Fingerprint: #0#0#
// Documentation: [[w:en:User:PerfektesChaos/js/prettyPageHeading]]
/// <nowiki>
/* global window: false */
/* jshint bitwise:true, curly:true, eqeqeq:true, latedef:true,
laxbreak:true,
nocomma:true, strict:true, undef:true, unused:true */
( function ( mw, $ ) {
"use strict";
var Version = -1.4,
Sign = "prettyPageHeading",
Shift = "0.25em",
Shop = "w:en:User:PerfektesChaos/js/",
Config, Nnsp, Rooms, Store;
function $flip( $assembly, apply, ahead, above ) {
// prepend one shifted text element
// Precondition:
// $assembly -- title
// apply -- substring
// ahead -- margin attribute
// above -- link items on top
// Uses:
// > Sign
// > Shift
// > Store
// 2015-12-26 [email protected]
var $el = $( above ? "<a>" : "<span>" );
if ( above ) {
$el.attr( "href", Store + encodeURI( above ) );
}
$assembly.prepend( $el.attr( "class", Sign )
.css( ahead, Shift )
.text( apply ) );
} // $flip()
function fiat() {
// Replace page header by new title
// Precondition:
// DOM.ready
// Uses:
// > Nnsp
// >< Store
// >< Rooms
// mw.config.get()
// $flip()
// 2018-04-22 [email protected]
var $h1 = $( "#firstHeading,#section_0" ),
env, i, k, ns, parts, plus,
shift, space, story, superior, support,
$ch, $el, $space;
if ( $h1.length ) {
$h1 = $h1.eq( 0 );
} else {
$h1 = $( "<h1>" );
}
$ch = $h1.children();
ns = $ch.length;
for ( i = ns - 1; i >= 0; i-- ) {
$el = $ch.eq( i );
if ( $el.get( 0 ).nodeName.toUpperCase() === "MARK" ) {
// ignore temporary markup
ns = i;
} else if ( $el.hasClass( "title-shortlink-container" ) ||
$el.hasClass( "title-shortlink-icon" ) ) {
plus = plus || [ ];
plus.push( $el.detach() );
ns = i;
} else {
break;
}
} // for i--
if ( ! ns ) {
env = mw.config.get( [ "wgContentLanguage",
"wgFormattedNamespaces",
"wgUserLanguage" ] );
if ( Store ) {
space = env.wgFormattedNamespaces[ Nnsp + "" ];
Store = Store + encodeURI( space ) + ":";
$( ".subpages" ).hide();
}
// No DISPLAYTITLE surprise
if ( $( "html" ).attr( "dir" ) === "rtl" ) {
shift = "margin-right";
} else {
shift = "margin-left";
}
story = $h1.text(); // DISPLAYTITLE
$h1.empty();
ns = story.indexOf( ":" ) + 1;
space = story.substr( 0, ns );
parts = story.substr( ns ).split( "/" );
for ( i = parts.length - 1; i >= 0; i-- ) {
$flip( $h1, parts[ i ], shift, superior );
if ( i ) {
$flip( $h1, "/", shift );
}
if ( Store ) {
superior = "";
for ( k = 0; k < i; k++ ) {
superior = superior + ( k ? "/" : "" )
+ parts[ k ];
} // for k++
}
} // for i--
$space = $( "<span>" );
$space.text( space );
if ( Nnsp <= 15 &&
env.wgUserLanguage !== env.wgContentLanguage ) {
if ( Nnsp < 0 ) {
support = "Special";
} else {
Rooms = [ "(main)",
"User",
"Project",
"File",
"MediaWiki",
"Template",
"Help",
"Category" ];
i = Nnsp % 2;
ns = ( Nnsp - i ) / 2;
support = Rooms[ ns ];
if ( i ) {
support = support + " Talk";
}
}
if ( support !== space ) {
$space.attr( "title", support );
}
}
$h1.prepend( $space );
if ( plus ) {
for ( i = plus.length - 1; i >= 0; i-- ) {
$h1.append( plus[ i ] );
} // for i--
}
}
} // fiat()
function fire() {
// Autorun on load (once)
// Uses:
// > Sign
// > Version
// > Shop
// < Nnsp
// < Config
// < Store
// < Shift
// mw.config.get()
// (fiat)
// 2018-08-25 [email protected]
var signature = "ext.gadget." + Sign,
rls;
if ( mw.loader.getState( signature ) !== "ready" ) {
rls = { };
rls[ signature ] = "ready";
mw.loader.state( rls );
Nnsp = mw.config.get( "wgNamespaceNumber" );
if ( Nnsp > 0 ) {
if ( typeof mw.libs[ Sign ] === "object" ) {
Config = mw.libs[ Sign ];
if ( Config ) {
Config.vsn = Version;
Config.doc = "[[" + Shop + Sign + "]]";
if ( typeof Config.link === "boolean"
&& Config.link ) {
Store = "/wiki/";
}
if ( typeof Config.shift === "string" ) {
Shift = Config.shift;
}
}
}
$( fiat );
}
}
} // fire()
fire();
}( window.mediaWiki, window.jQuery ) );
/// EOF </nowiki> prettyPageHeading.js