打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

网站测试中,如需帮助或提出建议
联系维护员 @天明

MediaWiki:Common.js:修订间差异

MediaWiki界面页面
天明留言 | 贡献
无编辑摘要
天明留言 | 贡献
修复可视化编辑器保存确认框高度未及时重算
 
(未显示同一用户的8个中间版本)
第30行: 第30行:
} );
} );


mw.loader.using( [ 'mediawiki.util' ], function () {
/* 提供外部搜索推荐 */
$(function () {
    if (mw.config.get("wgCanonicalSpecialPageName") !== "Search") {
        return;
    }
 
    // 当前搜索词
    const searchTerm = mw.util.getParamValue("search");
    if (!searchTerm) {
        return;
    }
 
    // 构造外部搜索链接
    const googleUrl = "https://www.google.com/search?q=" + encodeURIComponent(searchTerm);
    const bingUrl  = "https://www.bing.com/search?q="  + encodeURIComponent(searchTerm);
    const baiduUrl  = "https://www.baidu.com/s?wd="      + encodeURIComponent(searchTerm);
 
    const $externalLinks = $("<p>").html(
        `你也可以使用外部搜索:<a href="${googleUrl}" target="_blank" rel="noopener">Google</a> / ` +
        `<a href="${bingUrl}" target="_blank" rel="noopener">Bing</a> / ` +
        `<a href="${baiduUrl}" target="_blank" rel="noopener">百度</a> 来查找“${searchTerm}”。`
    ).addClass("mw-search-external");
 
    // 优先插入到有搜索结果的地方
    if ($(".mw-search-results").length) {
        $externalLinks.insertAfter(".mw-search-results");
    }
    // 否则插入到没有结果提示后
    else if ($(".mw-search-nonefound").length) {
        $externalLinks.insertAfter(".mw-search-nonefound");
    }
});
 
// 隐藏模板调用产生的空行
// document.querySelectorAll('.mw-parser-output p').forEach(p => {
// if (p.innerHTML.trim().toLowerCase() === '<br>') {
// p.style.display = 'none';
// }
// });
 
/* 将后置源码的信息框移到正文开头,使右浮动从页面顶部开始 */
$( function () {
var root = document.querySelector( '.mw-parser-output' );
 
if ( !root ) {
return;
}
 
var infobox = root.querySelector( '.acw-infobox' );
 
if ( !infobox ) {
return;
}
 
var firstContent = Array.prototype.find.call( root.children, function ( el ) {
return el.tagName.toLowerCase() !== 'style' &&
!el.classList.contains( 'acw-infobox' );
} );
 
if ( firstContent && infobox !== firstContent ) {
root.insertBefore( infobox, firstContent );
}
} );
 
/* 红链新建页在可视化编辑保存后自动回到阅读页 */
( function () {
    if ( mw.config.get( 'wgAction' ) !== 'edit' && mw.config.get( 'wgAction' ) !== 'submit' ) {
        return;
    }


     function injectExternalSearch( $content ) {
     var currentUrl = new URL( location.href );
    if ( currentUrl.searchParams.get( 'redlink' ) !== '1' ) {
        return;
    }


        // 1. 只处理搜索页
    var pageName = mw.config.get( 'wgRelevantPageName' );
        if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Search' ) {
    if ( !pageName ) {
        return;
    }
 
    function clearEditWarning( target ) {
        if ( !target ) {
             return;
             return;
         }
         }


         var searchTerm = mw.config.get( 'wgSearchTerms' );
         target.edited = false;
         if ( !searchTerm ) {
        target.submitting = false;
             return;
 
         if ( typeof target.teardownUnloadHandlers === 'function' ) {
             target.teardownUnloadHandlers();
         }
         }
    }


         var $info = $content.find( '.mw-search-results-info' );
    function redirectToCreatedPage( target ) {
         if ( !$info.length ) {
         clearEditWarning( target );
            return;
         location.href = mw.util.getUrl( pageName, { venotify: 'saved' } );
        }
    }


        // 2. 防止重复注入
    mw.hook( 've.newTarget' ).add( function ( target ) {
         if ( $info.find( '.mw-search-external' ).length ) {
         if ( !target || typeof target.on !== 'function' ) {
             return;
             return;
         }
         }


         // 3. 构造外部搜索链接
         target.on( 'save', function ( data ) {
        var links = [
             if ( data && data.newrevid !== undefined ) {
            {
                 redirectToCreatedPage( target );
                name: 'Google',
                url: 'https://www.google.com/search?q=' + encodeURIComponent( searchTerm )
             },
            {
                name: 'Bing',
                url: 'https://www.bing.com/search?q=' + encodeURIComponent( searchTerm )
            },
            {
                 name: '百度',
                url: 'https://www.baidu.com/s?wd=' + encodeURIComponent( searchTerm )
             }
             }
         ];
         } );
    } );
}() );


        var $p = $( '<p>' )
/* 让可视化编辑器保存确认框在打开后重新计算高度 */
            .addClass( 'mw-search-external' )
( function () {
            .text( '或使用外部搜索:' );
    function resizeSaveDialog() {
        var target = window.ve && ve.init && ve.init.target;
        var dialog = target && target.saveDialog;


         links.forEach( function ( link, index ) {
         if ( dialog && typeof dialog.updateSize === 'function' ) {
             if ( index > 0 ) {
             dialog.updateSize();
                $p.append( ' / ' );
        }
            }
 
        window.dispatchEvent( new Event( 'resize' ) );
    }


            $p.append(
    function scheduleResize() {
                $( '<a>' )
        [ 50, 200, 600, 1200 ].forEach( function ( delay ) {
                    .attr( {
             setTimeout( resizeSaveDialog, delay );
                        href: link.url,
                        target: '_blank',
                        rel: 'nofollow noopener'
                    } )
                    .text( link.name )
             );
         } );
         } );
        $info.append( $p );
     }
     }


     // 4. 在内容加载 / 刷新后执行
     mw.hook( 've.saveDialog.stateChanged' ).add( scheduleResize );
     mw.hook( 'wikipage.content' ).add( injectExternalSearch );
     mw.hook( 've.newTarget' ).add( function ( target ) {
 
        if ( target && typeof target.on === 'function' ) {
} );
            target.on( 'saveWorkflowBegin', scheduleResize );
            target.on( 'saveWorkflowChangePanel', scheduleResize );
        }
    } );
}() );

2026年6月30日 (二) 01:22的最新版本

/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */

/* 为表格自动加载默认排序规则 */
jQuery( document ).ready( function ( $ ) {

    // 确保 MediaWiki 自带的表格排序模块已加载
    mw.loader.using( 'jquery.tablesorter', function () {

        // 遍历页面中所有可排序表格
        $( 'table.sortable' ).each( function () {

            var $table = $( this );

            // 如果表格已经指定了默认排序(例如通过 data-sort-initial)
            // 则尊重作者意图,不进行干预
            if ( $table.data( 'sort-initialized' ) ) {
                return;
            }

            // 对表格设置默认排序:
            // 第一列,升序
            $table.tablesorter( {
                sortList: [ [ 0, 0 ] ]
            } );

            // 标记该表格已被初始化,避免重复执行
            $table.data( 'sort-initialized', true );
        } );
    } );
} );

/* 提供外部搜索推荐 */
$(function () {
    if (mw.config.get("wgCanonicalSpecialPageName") !== "Search") {
        return;
    }

    // 当前搜索词
    const searchTerm = mw.util.getParamValue("search");
    if (!searchTerm) {
        return;
    }

    // 构造外部搜索链接
    const googleUrl = "https://www.google.com/search?q=" + encodeURIComponent(searchTerm);
    const bingUrl   = "https://www.bing.com/search?q="   + encodeURIComponent(searchTerm);
    const baiduUrl  = "https://www.baidu.com/s?wd="      + encodeURIComponent(searchTerm);

    const $externalLinks = $("<p>").html(
        `你也可以使用外部搜索:<a href="${googleUrl}" target="_blank" rel="noopener">Google</a> / ` +
        `<a href="${bingUrl}" target="_blank" rel="noopener">Bing</a> / ` +
        `<a href="${baiduUrl}" target="_blank" rel="noopener">百度</a> 来查找“${searchTerm}”。`
    ).addClass("mw-search-external");

    // 优先插入到有搜索结果的地方
    if ($(".mw-search-results").length) {
        $externalLinks.insertAfter(".mw-search-results");
    }
    // 否则插入到没有结果提示后
    else if ($(".mw-search-nonefound").length) {
        $externalLinks.insertAfter(".mw-search-nonefound");
    }
});

// 隐藏模板调用产生的空行
// document.querySelectorAll('.mw-parser-output p').forEach(p => {
// 	if (p.innerHTML.trim().toLowerCase() === '<br>') {
// 		p.style.display = 'none';
// 	}
// });

/* 将后置源码的信息框移到正文开头,使右浮动从页面顶部开始 */
$( function () {
	var root = document.querySelector( '.mw-parser-output' );

	if ( !root ) {
		return;
	}

	var infobox = root.querySelector( '.acw-infobox' );

	if ( !infobox ) {
		return;
	}

	var firstContent = Array.prototype.find.call( root.children, function ( el ) {
		return el.tagName.toLowerCase() !== 'style' &&
			!el.classList.contains( 'acw-infobox' );
	} );

	if ( firstContent && infobox !== firstContent ) {
		root.insertBefore( infobox, firstContent );
	}
} );

/* 红链新建页在可视化编辑保存后自动回到阅读页 */
( function () {
    if ( mw.config.get( 'wgAction' ) !== 'edit' && mw.config.get( 'wgAction' ) !== 'submit' ) {
        return;
    }

    var currentUrl = new URL( location.href );
    if ( currentUrl.searchParams.get( 'redlink' ) !== '1' ) {
        return;
    }

    var pageName = mw.config.get( 'wgRelevantPageName' );
    if ( !pageName ) {
        return;
    }

    function clearEditWarning( target ) {
        if ( !target ) {
            return;
        }

        target.edited = false;
        target.submitting = false;

        if ( typeof target.teardownUnloadHandlers === 'function' ) {
            target.teardownUnloadHandlers();
        }
    }

    function redirectToCreatedPage( target ) {
        clearEditWarning( target );
        location.href = mw.util.getUrl( pageName, { venotify: 'saved' } );
    }

    mw.hook( 've.newTarget' ).add( function ( target ) {
        if ( !target || typeof target.on !== 'function' ) {
            return;
        }

        target.on( 'save', function ( data ) {
            if ( data && data.newrevid !== undefined ) {
                redirectToCreatedPage( target );
            }
        } );
    } );
}() );

/* 让可视化编辑器保存确认框在打开后重新计算高度 */
( function () {
    function resizeSaveDialog() {
        var target = window.ve && ve.init && ve.init.target;
        var dialog = target && target.saveDialog;

        if ( dialog && typeof dialog.updateSize === 'function' ) {
            dialog.updateSize();
        }

        window.dispatchEvent( new Event( 'resize' ) );
    }

    function scheduleResize() {
        [ 50, 200, 600, 1200 ].forEach( function ( delay ) {
            setTimeout( resizeSaveDialog, delay );
        } );
    }

    mw.hook( 've.saveDialog.stateChanged' ).add( scheduleResize );
    mw.hook( 've.newTarget' ).add( function ( target ) {
        if ( target && typeof target.on === 'function' ) {
            target.on( 'saveWorkflowBegin', scheduleResize );
            target.on( 'saveWorkflowChangePanel', scheduleResize );
        }
    } );
}() );