MediaWiki:Common.js:修订间差异
| (未显示同一用户的28个中间版本) | |||
| 第1行: | 第1行: | ||
// | //用户名前显示头像 | ||
(function() { | mw.loader.using( 'mediawiki.util', function () { | ||
// 1. | $( document ).ready( function () { | ||
function addAvatarsToElements( $elements ) { | |||
$elements.each( function () { | |||
var $link = $( this ); | |||
if ( $link.prev( '.sp-avatar-wrapper' ).length ) { | |||
return; | |||
} | |||
const excludeContainers = [ | |||
'#p-views', | |||
'#p-cactions', | |||
'#p-tb', | |||
'#right-navigation', | |||
'#p-personal', | |||
'.mw-portlet-personal' | |||
]; | |||
// 检查是否匹配任意一个排除容器 | |||
const isExcluded = excludeContainers.some(selector => $link.closest(selector).length); | |||
if (isExcluded) { | |||
return; | |||
} | |||
var href = $link.attr( 'href' ); | |||
if ( !href ) return; | |||
var userPart = decodeURIComponent( href.split( '/wiki/' )[1] ); | |||
if ( !userPart ) return; | |||
if ( userPart.indexOf( '/' ) !== -1 ) { | |||
return; | |||
} | |||
var userName = userPart.replace( /^User:|^用户:/, '' ).replace(/_/g, ' '); | |||
var linkText = $link.text().trim().replace(/^User:|^用户:/, ''); | |||
if ( linkText !== userName ) { | |||
var $target = $link.find( 'span, bdi' ).first(); | |||
var targetText = $target.length ? $target.text().trim().replace(/^User:|^用户:/, '') : ''; | |||
if ( !$target.length || targetText !== userName ) { | |||
return; | |||
} | |||
} | |||
new mw.Api().get( { | |||
action: 'parse', | |||
text: '{{#avatar:' + userName + '|l}}', | |||
contentmodel: 'wikitext', | |||
disablelimitreport: true, | |||
disableeditsection: true | |||
} ).done( function ( data ) { | |||
if ( data.parse && data.parse.text ) { | |||
var avatarHtml = data.parse.text[ '*' ]; | |||
var $avatarWrapper = $( '<span class="sp-avatar-wrapper" style="vertical-align: middle; margin-right: 4px; display: inline-block;"></span>' ).html( avatarHtml ); | |||
$avatarWrapper.find( 'img' ).css( { | |||
width: '2em', | |||
height: '2em', | |||
objectFit: 'cover', | |||
display: 'inline-block', | |||
verticalAlign: 'middle', | |||
border: 'var(--background-color-neutral, #eaecf0) 2px solid', | |||
boxSizing: 'border-box' | |||
} ); | |||
$link.before( $avatarWrapper ); | |||
if ( mw.user.isAnon() ) { | |||
return; | |||
} | |||
var currentUserName = mw.user.getName(); | |||
if ( userName !== currentUserName ) { | |||
return; | |||
} | |||
var avatarImg = $avatarWrapper.find( 'img' ); | |||
var avatarUrl = avatarImg.attr( 'src' ); | |||
if ( avatarUrl && avatarUrl !== '/images/avatars/default_l.gif' ) { | |||
var $styleTag = $( '#dynamic-avatar-style' ); | |||
if ( !$styleTag.length ) { | |||
$styleTag = $( '<style id="dynamic-avatar-style"></style>' ).appendTo( 'head' ); | |||
} | |||
var css = '.minerva-icon--userAvatarOutline { background-image: url("' + avatarUrl + '"); background-repeat: no-repeat; background-size: contain; width: 30px; height: 30px; mask-image: unset; }'; | |||
$styleTag.text( css ); | |||
} | |||
} | |||
} ); | |||
} ); | |||
} | |||
addAvatarsToElements( $( 'a[href*="/wiki/User:"], a[href*="/wiki/%E7%94%A8%E6%88%B7:"], a[href*="/wiki/用户:"]' ) ); | |||
var observer = new MutationObserver( function ( mutations ) { | |||
mutations.forEach( function ( mutation ) { | |||
$( mutation.addedNodes ).find( 'a[href*="/wiki/User:"], a[href*="/wiki/%E7%94%A8%E6%88%B7:"], a[href*="/wiki/用户:"]' ).each( function() { | |||
addAvatarsToElements( $( this ) ); | |||
} ); | |||
} ); | |||
} ); | |||
observer.observe( document.body, { childList: true, subtree: true } ); | |||
} ); | |||
} ); | |||
//重定向 | |||
(function() { | |||
const url = new URL(window.location.href); | |||
const pathname = url.pathname; | |||
const searchParams = url.searchParams; | |||
const isIndexPhp = pathname === '/index.php'; | |||
const hasOnlyTitleParam = searchParams.size === 1 && searchParams.has('title'); | |||
const titleValue = searchParams.get('title') || ''; | |||
const hasValidTitle = titleValue.trim() !== ''; | |||
if (isIndexPhp && hasOnlyTitleParam && hasValidTitle) { | |||
if ( | const targetUrl = `/wiki/${encodeURIComponent(titleValue)}`; | ||
window.location.replace(targetUrl); | |||
} | } | ||
})(); | })(); | ||