MediaWiki:Common.js:修订间差异

来自神国反恶俗
跳到导航跳到搜索
无编辑摘要
无编辑摘要
第1行: 第1行:
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
( function () {
( function () {


    /* ==========================================================
      一、把页面里的目录(TOC)搬到左侧栏
      ========================================================== */
     function moveTOC() {
     function moveTOC() {
         var toc = document.getElementById( 'toc' )
         var toc = document.getElementById( "toc" );
            || document.querySelector( '.mw-table-of-contents-container' )
        if ( !toc ) { toc = document.querySelector( ".mw-table-of-contents-container" ); }
            || document.querySelector( '.mw-table-of-contents' );
         var sidebar = document.getElementById( "column-one" );
         var sidebar = document.getElementById( 'column-one' )
         if ( !toc || !sidebar ) { return; }
            || document.getElementById( 'mw-panel' );
        if ( document.getElementById( "p-toc" ) ) { return; }
 
         var box = document.createElement( "div" );
         if ( !toc || !sidebar || document.getElementById( 'p-toc' ) ) {
         box.className = "portlet";
            return;
         box.id = "p-toc";
        }
         var title = document.createElement( "h3" );
 
         title.textContent = "\u76ee\u5f55";
         var box = document.createElement( 'div' );
         var inner = document.createElement( "div" );
         box.className = 'portlet';
         inner.className = "pBody";
         box.id = 'p-toc';
 
         var title = document.createElement( 'h3' );
         title.textContent = '目录';
 
         var inner = document.createElement( 'div' );
         inner.className = 'pBody';
         inner.appendChild( toc );
         inner.appendChild( toc );
         box.appendChild( title );
         box.appendChild( title );
         box.appendChild( inner );
         box.appendChild( inner );
第32行: 第20行:
     }
     }


     /* ==========================================================
     function pickLinks( portlet ) {
      二、吸顶样式
         var out = [];
      顶部一条通栏(左:编辑标签 / 右:账号)
         if ( !portlet ) { return out; }
      左侧栏吸顶并带上下滑动条
         var links = portlet.querySelectorAll( "ul a" );
      ========================================================== */
         for ( var i = 0; i < links.length; i++ ) { out.push( links[ i ] ); }
    var STICKY_CSS = [
         return out;
        '.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() {
     function makeSticky() {
         injectCSS();
         var old = document.getElementById( "sg-topbar" );
        if ( old ) { old.parentNode.removeChild( old ); }
 
        var leftLinks = pickLinks( document.getElementById( "p-cactions" ) );
        var rightLinks = pickLinks( document.getElementById( "p-personal" ) );


         var personal = document.getElementById( 'p-personal' );  /* 账号那排 */
         if ( leftLinks.length === 0 && rightLinks.length === 0 ) { return; }
        var cactions = document.getElementById( 'p-cactions' ); /* 编辑标签那排 */


        /* 先把上一条固定栏清掉 */
         var bar = document.createElement( "div" );
         var old = document.getElementById( 'sg-topbar' );
        bar.id = "sg-topbar";
         if ( old && old.parentNode ) { old.parentNode.removeChild( old ); }
         bar.className = "sg-sticky-bar";


         /* 收集链接:编辑标签在左,账号在右 */
         var left = document.createElement( "div" );
        function pick( portlet ) {
        left.className = "sg-bar-left";
            var out = [];
        for ( var i = 0; i < leftLinks.length; i++ ) {
            if ( !portlet ) { return out; }
             var a = document.createElement( "a" );
             Array.prototype.forEach.call(
            a.href = leftLinks[ i ].href;
                portlet.querySelectorAll( 'ul a' ),
            a.textContent = leftLinks[ i ].textContent;
                function ( a ) {
             left.appendChild( a );
                    out.push( { href: a.href, text: a.textContent } );
                }
             );
            return out;
         }
         }


         var leftLinks = pick( cactions );
         var right = document.createElement( "div" );
         var rightLinks = pick( personal );
         right.className = "sg-bar-right";
        for ( var j = 0; j < rightLinks.length; j++ ) {
            var b = document.createElement( "a" );
            b.href = rightLinks[ j ].href;
            b.textContent = rightLinks[ j ].textContent;
            right.appendChild( b );
        }
 
        bar.appendChild( left );
        bar.appendChild( right );
        document.body.appendChild( bar );
 
        var personal = document.getElementById( "p-personal" );
        var cactions = document.getElementById( "p-cactions" );
        if ( personal ) { personal.style.visibility = "hidden"; }
        if ( cactions ) { cactions.style.visibility = "hidden"; }
 
        document.body.className = document.body.className + " sg-sticky-on";
    }
 
    function run() {
        moveTOC();
        makeSticky();
    }
 
    if ( document.readyState === "loading" ) {
        document.addEventListener( "DOMContentLoaded", run );
    } else {
        run();
    }


        /* 两边都空 → 不做固定栏,也不留白 */
}() );
        if ( !leftLinks.length && !rightLinks.length ) {
            document.body.classList.remove( 'sg-sticky-on' );
            document.documentElement.style.setProperty( '--sg-top-offset', '0px' );
            return

2026年10月11日 (日) 14:45的版本

( function () {

    function moveTOC() {
        var toc = document.getElementById( "toc" );
        if ( !toc ) { toc = document.querySelector( ".mw-table-of-contents-container" ); }
        var sidebar = document.getElementById( "column-one" );
        if ( !toc || !sidebar ) { return; }
        if ( document.getElementById( "p-toc" ) ) { return; }
        var box = document.createElement( "div" );
        box.className = "portlet";
        box.id = "p-toc";
        var title = document.createElement( "h3" );
        title.textContent = "\u76ee\u5f55";
        var inner = document.createElement( "div" );
        inner.className = "pBody";
        inner.appendChild( toc );
        box.appendChild( title );
        box.appendChild( inner );
        sidebar.appendChild( box );
    }

    function pickLinks( portlet ) {
        var out = [];
        if ( !portlet ) { return out; }
        var links = portlet.querySelectorAll( "ul a" );
        for ( var i = 0; i < links.length; i++ ) { out.push( links[ i ] ); }
        return out;
    }

    function makeSticky() {
        var old = document.getElementById( "sg-topbar" );
        if ( old ) { old.parentNode.removeChild( old ); }

        var leftLinks = pickLinks( document.getElementById( "p-cactions" ) );
        var rightLinks = pickLinks( document.getElementById( "p-personal" ) );

        if ( leftLinks.length === 0 && rightLinks.length === 0 ) { return; }

        var bar = document.createElement( "div" );
        bar.id = "sg-topbar";
        bar.className = "sg-sticky-bar";

        var left = document.createElement( "div" );
        left.className = "sg-bar-left";
        for ( var i = 0; i < leftLinks.length; i++ ) {
            var a = document.createElement( "a" );
            a.href = leftLinks[ i ].href;
            a.textContent = leftLinks[ i ].textContent;
            left.appendChild( a );
        }

        var right = document.createElement( "div" );
        right.className = "sg-bar-right";
        for ( var j = 0; j < rightLinks.length; j++ ) {
            var b = document.createElement( "a" );
            b.href = rightLinks[ j ].href;
            b.textContent = rightLinks[ j ].textContent;
            right.appendChild( b );
        }

        bar.appendChild( left );
        bar.appendChild( right );
        document.body.appendChild( bar );

        var personal = document.getElementById( "p-personal" );
        var cactions = document.getElementById( "p-cactions" );
        if ( personal ) { personal.style.visibility = "hidden"; }
        if ( cactions ) { cactions.style.visibility = "hidden"; }

        document.body.className = document.body.className + " sg-sticky-on";
    }

    function run() {
        moveTOC();
        makeSticky();
    }

    if ( document.readyState === "loading" ) {
        document.addEventListener( "DOMContentLoaded", run );
    } else {
        run();
    }

}() );