MediaWiki:Common.js
来自神国反恶俗
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
( function () {
/* ==========================================================
一、把页面里的目录(TOC)搬到左侧栏
========================================================== */
function moveTOC() {
var toc = document.getElementById( 'toc' )
|| document.querySelector( '.mw-table-of-contents-container' )
|| document.querySelector( '.mw-table-of-contents' );
var sidebar = document.getElementById( 'column-one' )
|| document.getElementById( 'mw-panel' );
if ( !toc || !sidebar || document.getElementById( 'p-toc' ) ) {
return;
}
var box = document.createElement( 'div' );
box.className = 'portlet';
box.id = 'p-toc';
var title = document.createElement( 'h3' );
title.textContent = '目录';
var inner = document.createElement( 'div' );
inner.className = 'pBody';
inner.appendChild( toc );
box.appendChild( title );
box.appendChild( inner );
sidebar.appendChild( box );
}
/* ==========================================================
二、吸顶样式
顶部一条通栏(左:编辑标签 / 右:账号)
左侧栏吸顶并带上下滑动条
========================================================== */
var STICKY_CSS = [
'.sg-sticky-bar{',
' position:fixed;left:0;right:0;top:0;z-index:401;',
' display:flex;align-items:center;justify-content:space-between;',
' background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.18);',
' padding:3px 12px;font-size:87%;line-height:1.3;',
' white-space:nowrap;overflow:hidden;',
'}',
'.sg-bar-left{flex:0 1 auto;overflow:hidden;}',
'.sg-bar-right{flex:0 0 auto;margin-left:auto;}',
'.sg-sticky-bar a{',
' color:#36c;text-decoration:none;padding:2px 7px;',
' display:inline-block;',
'}',
'.sg-sticky-bar a:hover{text-decoration:underline;}',
/* 左侧栏:吸顶 + 上下滑动条 */
'#column-one{',
' position:sticky;top:var(--sg-top-offset,0px);',
' align-self:flex-start;',
' max-height:calc(100vh - var(--sg-top-offset,0px) - 8px);',
' overflow-y:auto;',
' overflow-x:hidden;',
'}',
'body.sg-sticky-on #content{',
' padding-top:var(--sg-top-offset,0px) !important;',
'}'
].join( '\n' );
function injectCSS() {
if ( document.getElementById( 'sg-sticky-style' ) ) { return; }
var s = document.createElement( 'style' );
s.id = 'sg-sticky-style';
s.type = 'text/css';
s.textContent = STICKY_CSS;
document.head.appendChild( s );
}
function makeSticky() {
injectCSS();
var personal = document.getElementById( 'p-personal' ); /* 账号那排 */
var cactions = document.getElementById( 'p-cactions' ); /* 编辑标签那排 */
/* 先把上一条固定栏清掉 */
var old = document.getElementById( 'sg-topbar' );
if ( old && old.parentNode ) { old.parentNode.removeChild( old ); }
/* 收集链接:编辑标签在左,账号在右 */
function pick( portlet ) {
var out = [];
if ( !portlet ) { return out; }
Array.prototype.forEach.call(
portlet.querySelectorAll( 'ul a' ),
function ( a ) {
out.push( { href: a.href, text: a.textContent } );
}
);
return out;
}
var leftLinks = pick( cactions );
var rightLinks = pick( personal );
/* 两边都空 → 不做固定栏,也不留白 */
if ( !leftLinks.length && !rightLinks.length ) {
document.body.classList.remove( 'sg-sticky-on' );
document.documentElement.style.setProperty( '--sg-top-offset', '0px' );
return