if ( mw.config.get( "skin" ) === "vector" ) {
$( document ).ready( () => {
"use strict";
const eById = id => document.getElementById( id ),
cE = e => document.createElement( e ),
NAMESPACE = mw.config.get( "wgFormattedNamespaces" )[ mw.config.get( "wgNamespaceNumber" ) ],
URL_ENCODED_USERNAME = mw.util.wikiUrlencode( mw.config.get( "wgUserName" ) ),
URL_ENCODED_PAGE_TITLE = mw.util.wikiUrlencode( mw.config.get( "wgTitle" ) ),
USER_OPT_PREVIEW_ON_FIRST = mw.user.options.values.previewonfirst,
VIEWS_UL = eById( "p-views" ).querySelector( "ul" ),
MW_CONTENT_TEXT = eById( "mw-content-text" ),
STYLE_SHEET = new CSSStyleSheet(),
EDIT_LINK = eById( "ca-edit" ),
CONTENT = eById( "content" ),
MW_HEAD = eById( "mw-head" ),
FOOTER = eById( "footer" ),
TOP = eById( "top" ),
menuLink = ( href, txt ) => {
const A = cE( "a" );
A.href = href;
A.textContent = txt;
return A;
},
userPageLinks = sbpg => {
sbpg = sbpg || "";
const UPL = cE( "div" );
UPL.append( menuLink( `/w/index.php?title=User:${URL_ENCODED_USERNAME}${sbpg}&action=edit`, "edit" ) );
UPL.append( menuLink( `/w/index.php?title=User:${URL_ENCODED_USERNAME}${sbpg}&action=history`, "history" ) );
UPL.append( menuLink( `/wiki/User_talk:${URL_ENCODED_USERNAME}${sbpg}`, "talk" ) );
const UPTL = cE( "div" );
UPTL.append( menuLink( `/w/index.php?title=User_talk:${URL_ENCODED_USERNAME}${sbpg}&action=edit`, "edit" ) );
UPTL.append( menuLink( `/w/index.php?title=User_talk:${URL_ENCODED_USERNAME}${sbpg}&action=history`, "history" ) );
UPL.append( UPTL );
return UPL;
},
newHeaderLinkTab = ( actn, txt, ttl ) => {
const LI = cE( "li" ),
SPAN = cE( "span" ),
A = menuLink( `/w/index.php?title=${NAMESPACE}:${URL_ENCODED_PAGE_TITLE}&action=${actn}`, "" );
SPAN.textContent = txt;
A.title = ttl || "";
A.append( SPAN );
LI.append( A );
EDIT_LINK.before( LI );
},
newHeaderButtonTab = ( txt, fnc ) => {
const LI = cE( "li" );
LI.textContent = txt;
LI.classList.add( "fg-navigation-ui-head-button-tab" );
if ( fnc ) {
LI.addEventListener( "click", fnc, { passive: true } );
}
VIEWS_UL.prepend( LI );
return LI;
};
let add_section_preview_links;
document.adoptedStyleSheets = [ ...document.adoptedStyleSheets, STYLE_SHEET ];
STYLE_SHEET.replaceSync( `#mw-head-base { height: 2.55em }
#content { border-top: 0 }
#left-navigation { margin: 0 0 0 11em }
#right-navigation { margin: 0 }
#p-logo { display: none }
#mw-head {
border-bottom: 1px solid #a7d7f9;
background-color: white;
position: fixed;
right: unset;
left: unset;
width: 100%;
z-index: 2;
}
#p-views, #p-cactions, #p-personal, #p-search { display: inline-block }
#p-search {
margin-left: 1em;
float: none;
}
#p-personal {
position: relative;
right: 0;
top: 0;
}
#p-personal ul { padding: 0 }
#mw-panel {
background-color: #f6f6f6;
overflow: hidden auto;
position: fixed;
height: 100vh;
left: unset;
width: 11em;
padding: 0;
z-index: 3;
}
#footer {
background-color: #f6f6f6;
padding: 1em 1em 3em;
}
.fg-links-dropdown {
box-shadow: 0 .5em 1em -0.2em #00000080;
overscroll-behavior: contain;
border-radius: 0 0 3px 3px;
border: 1px solid #a7d7f9;
background-color: white;
position: absolute;
padding: .5em 1em;
max-height: 70vh;
overflow: auto;
border-top: 0;
display: none;
z-index: 1;
}
#pt-userpage { font-size: .8em }
#pt-userpage:hover > .fg-links-dropdown, #fg-toc:hover > .fg-links-dropdown { display: block }
.fg-links-dropdown a {
padding: 0px 0px 0em !important;
background: none !important;
text-transform: capitalize;
display: block !important;
height: unset !important;
float: none !important;
}
.fg-links-dropdown div {
border-left: 1px solid #b3b3b3;
padding: 0 0 0 1em;
}
#pt-logout {
font-size: unset;
float: none;
margin: 0;
}
.vector-menu-tabs-legacy li { background-image: linear-gradient(to top,#77c1f6 0,#e8f2f8 0,#ffffff 100%) }
.ui-resizable { width: unset !important }
.fg-navigation-ui-head-button-tab {
padding: 1.1em .3em .55em !important;
font-size: 0.9em;
cursor: pointer;
color: #66c0ff;
}
.mw-editsection a + a { margin-left: 1em }` );
MW_HEAD.querySelectorAll( "#pt-mytalk, #pt-sandbox, #pt-preferences, #pt-watchlist, #pt-mycontris, #pt-betafeatures, #pt-adminlinks" ).forEach( e => e.remove() );
MW_HEAD.querySelectorAll( ".collapsible" ).forEach( e => e.classList.remove( "collapsible" ) );
eById( "p-search" ).before( eById( "p-personal" ) );
if ( mw.config.get( "wgIsProbablyEditable" ) && EDIT_LINK ) {
newHeaderLinkTab( "purge", "Purge", "Purge the current page" );
if ( !USER_OPT_PREVIEW_ON_FIRST ) {
newHeaderLinkTab( "edit&preview=yes", "Preview", "Edit this page with a preview" );
add_section_preview_links = true;
}
}
const TOCABLE = [];
MW_CONTENT_TEXT.querySelectorAll( "h2:not( #mw-toc-heading ), h3, h4, h5, h6" ).forEach( section => {
if ( add_section_preview_links ) {
const A = section.querySelector( ".mw-editsection a" ),
AC = A?.cloneNode( true );
if ( AC ) {
AC.href += "&preview=yes";
AC.textContent = "preview";
A.after( AC );
}
}
const HL = section.querySelector( ".mw-headline" );
if ( HL ) {
const ML = menuLink( `#${HL.id}`, HL.textContent );
ML.style.marginLeft = `${/([2-6])$/.exec( section.tagName )[ 1 ] - 2}em`;
TOCABLE.push( ML );
}
} );
if ( TOCABLE.length ) {
const TOC_TAB = newHeaderButtonTab( "ToC" ),
TOC_DROPDOWN = cE( "div" );
TOC_DROPDOWN.classList.add( "fg-links-dropdown" );
TOC_DROPDOWN.append( ...TOCABLE );
TOC_TAB.id = "fg-toc";
TOC_TAB.append( TOC_DROPDOWN );
VIEWS_UL.prepend( TOC_TAB );
}
newHeaderButtonTab( "▼", () => FOOTER.scrollIntoView() );
newHeaderButtonTab( "▲", () => TOP.scrollIntoView() );
const USER_LINKS_DROPDOWN = cE( "div" );
USER_LINKS_DROPDOWN.classList.add( "fg-links-dropdown" );
USER_LINKS_DROPDOWN.append( userPageLinks() );
USER_LINKS_DROPDOWN.append( menuLink( `/wiki/User:${URL_ENCODED_USERNAME}/sandbox`, "sandbox" ) );
USER_LINKS_DROPDOWN.append( userPageLinks( "/sandbox" ) );
USER_LINKS_DROPDOWN.append( menuLink( `/wiki/User:${URL_ENCODED_USERNAME}/common.js`, "user JS" ) );
USER_LINKS_DROPDOWN.append( userPageLinks( "/common.js" ) );
USER_LINKS_DROPDOWN.append( menuLink( `/wiki/User:${URL_ENCODED_USERNAME}/common.css`, "user CSS" ) );
USER_LINKS_DROPDOWN.append( userPageLinks( "/common.css" ) );
USER_LINKS_DROPDOWN.append( menuLink( `/wiki/Special:PrefixIndex/User:${URL_ENCODED_USERNAME}`, "user pages" ) );
USER_LINKS_DROPDOWN.append( menuLink( `/wiki/Special:PrefixIndex/User talk:${URL_ENCODED_USERNAME}`, "user talk pages" ) );
USER_LINKS_DROPDOWN.append( menuLink( `/wiki/Special:Contributions/${URL_ENCODED_USERNAME}`, "contributions" ) );
USER_LINKS_DROPDOWN.append( menuLink( "/wiki/Special:SpecialPages", "special" ) );
const WATCHLIST_LINKS = cE( "div" );
USER_LINKS_DROPDOWN.append( menuLink( "/wiki/Special:Watchlist", "watchlist" ) );
WATCHLIST_LINKS.append( menuLink( "/wiki/Special:EditWatchlist", "edit" ) );
WATCHLIST_LINKS.append( menuLink( "/wiki/Special:EditWatchlist/raw", "raw" ) );
USER_LINKS_DROPDOWN.append( WATCHLIST_LINKS );
const PREF_LINKS = cE( "div" );
USER_LINKS_DROPDOWN.append( menuLink( "/wiki/Special:Preferences", "preferences" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-rendering", "appearance" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-editing", "editing" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-rc", "recent changes" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-watchlist", "watchlist" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-gadgets", "gadgets" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-searchoptions", "search" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-betafeatures", "beta" ) );
PREF_LINKS.append( menuLink( "/wiki/Special:Preferences#mw-prefsection-echo", "notifications" ) );
USER_LINKS_DROPDOWN.append( PREF_LINKS );
const GLOBAL_PREF_LINKS = cE( "div" );
USER_LINKS_DROPDOWN.append( menuLink( "/wiki/Special:GlobalPreferences", "global preferences" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-rendering", "appearance" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-editing", "editing" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-rc", "recent changes" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-watchlist", "watchlist" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-gadgets", "gadgets" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-searchoptions", "search" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-centralnotice-banners", "banners" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-betafeatures", "beta" ) );
GLOBAL_PREF_LINKS.append( menuLink( "/wiki/Special:GlobalPreferences#mw-prefsection-echo", "notifications" ) );
USER_LINKS_DROPDOWN.append( GLOBAL_PREF_LINKS );
if ( ~mw.config.get( "wgUserGroups" ).indexOf( "sysop" ) ) {
USER_LINKS_DROPDOWN.append( menuLink( "/wiki/Special:AdminLinks", "admin links" ) );
}
USER_LINKS_DROPDOWN.append( eById( "pt-logout" ) );
eById( "pt-userpage" ).append( USER_LINKS_DROPDOWN );
eById( "wpSummary" )?.addEventListener( "keypress", evt => {
if ( evt.key === "Enter" ) {
evt.preventDefault();
}
} );
} );
}