User:PerfektesChaos/js/prettyPageHeading/d.js

/// Gadget-prettyPageHeading.js // Format page header nice if namespace and/or subpage /// 2018-08-25 PerfektesChaos@de.wikipedia // ResourceLoader: compatible; //   dependencies: NONE /// Fingerprint:   #0#0# // Documentation:  w:en:User:PerfektesChaos/js/prettyPageHeading /// /* 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 PerfektesChaos@de.wikipedia var $el = $( above ? "" : " " ); 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 PerfektesChaos@de.wikipedia 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 = $( " " ); }     $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 = $( " " ); $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 PerfektesChaos@de.wikipedia 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  prettyPageHeading.js