MediaWiki:Common.js:修订间差异
MediaWiki界面页面
更多操作
注入顶栏横向导航 |
导航注入目标改为 .citizen-header__start |
||
| 第1行: | 第1行: | ||
/* 在 Citizen | /* 在 Citizen 顶栏的官方预留槽位 .citizen-header__start 内注入横向主导航。 | ||
注意:不要插到 .citizen-header 根节点上——那里是 logo / 搜索 / 抽屉的 flex 行, | |||
插进去会跟它们抢空间导致错位。__start 是皮肤留空的导航槽。 */ | |||
( function () { | ( function () { | ||
'use strict'; | 'use strict'; | ||
var LINKS = [ | var LINKS = [ | ||
{ text: ' | { text: '首页', page: '首页', match: /^(首页|Main_Page)$/ }, | ||
{ text: '全部条目', | { text: '全部条目', page: 'Special:AllPages', match: /^Special:AllPages$/i }, | ||
{ text: '分类', | { text: '分类', page: 'Special:Categories', match: /^Special:Categories$/i }, | ||
{ text: '最近更改', | { text: '最近更改', page: 'Special:RecentChanges', match: /^Special:RecentChanges$/i }, | ||
{ text: '工具箱', | { text: '待创建', page: 'Special:WantedPages', match: /^Special:WantedPages$/i }, | ||
{ text: '工具箱', page: 'Special:SpecialPages', match: /^Special:SpecialPages$/i } | |||
]; | ]; | ||
function build() { | function build() { | ||
var | var slot = document.querySelector( '.citizen-header__start' ); | ||
if ( ! | if ( !slot || slot.querySelector( '.kuke-nav' ) ) { | ||
return; | return; | ||
} | } | ||
| 第19行: | 第22行: | ||
var page = mw.config.get( 'wgPageName' ); | var page = mw.config.get( 'wgPageName' ); | ||
var nav = document.createElement( 'nav' ); | var nav = document.createElement( 'nav' ); | ||
nav.className = 'kuke- | nav.className = 'kuke-nav'; | ||
nav.setAttribute( 'aria-label', '主导航' ); | nav.setAttribute( 'aria-label', '主导航' ); | ||
LINKS.forEach( function ( item ) { | LINKS.forEach( function ( item ) { | ||
var a = document.createElement( 'a' ); | var a = document.createElement( 'a' ); | ||
a.className = 'kuke- | a.className = 'kuke-nav__link'; | ||
a.href = item. | a.href = mw.util.getUrl( item.page ); | ||
a.textContent = item.text; | a.textContent = item.text; | ||
if ( item.match.test( page ) ) { | if ( item.match.test( page ) ) { | ||
a.classList.add( 'kuke- | a.classList.add( 'kuke-nav__link--active' ); | ||
a.setAttribute( 'aria-current', 'page' ); | a.setAttribute( 'aria-current', 'page' ); | ||
} | } | ||
| 第34行: | 第37行: | ||
} ); | } ); | ||
slot.appendChild( nav ); | |||
} | } | ||
2026年8月19日 (三) 17:22的版本
/* 在 Citizen 顶栏的官方预留槽位 .citizen-header__start 内注入横向主导航。
注意:不要插到 .citizen-header 根节点上——那里是 logo / 搜索 / 抽屉的 flex 行,
插进去会跟它们抢空间导致错位。__start 是皮肤留空的导航槽。 */
( function () {
'use strict';
var LINKS = [
{ text: '首页', page: '首页', match: /^(首页|Main_Page)$/ },
{ text: '全部条目', page: 'Special:AllPages', match: /^Special:AllPages$/i },
{ text: '分类', page: 'Special:Categories', match: /^Special:Categories$/i },
{ text: '最近更改', page: 'Special:RecentChanges', match: /^Special:RecentChanges$/i },
{ text: '待创建', page: 'Special:WantedPages', match: /^Special:WantedPages$/i },
{ text: '工具箱', page: 'Special:SpecialPages', match: /^Special:SpecialPages$/i }
];
function build() {
var slot = document.querySelector( '.citizen-header__start' );
if ( !slot || slot.querySelector( '.kuke-nav' ) ) {
return;
}
var page = mw.config.get( 'wgPageName' );
var nav = document.createElement( 'nav' );
nav.className = 'kuke-nav';
nav.setAttribute( 'aria-label', '主导航' );
LINKS.forEach( function ( item ) {
var a = document.createElement( 'a' );
a.className = 'kuke-nav__link';
a.href = mw.util.getUrl( item.page );
a.textContent = item.text;
if ( item.match.test( page ) ) {
a.classList.add( 'kuke-nav__link--active' );
a.setAttribute( 'aria-current', 'page' );
}
nav.appendChild( a );
} );
slot.appendChild( nav );
}
if ( document.readyState === 'loading' ) {
document.addEventListener( 'DOMContentLoaded', build );
} else {
build();
}
}() );