MediaWiki:Common.js:修订间差异
| 第1行: | 第1行: | ||
/ | // 立即执行闭包,避免污染全局变量 | ||
(function() { | |||
// 1. 提前检查皮肤,不是 Minerva 直接退出 | |||
// | |||
if (mw.config.get('skin') !== 'minerva') return; | if (mw.config.get('skin') !== 'minerva') return; | ||
// | // 2. 预获取页面信息(mw.config 在页面头部就已加载,无需等待) | ||
const pageTitle = mw.config.get('wgPageName'); | const pageTitle = mw.config.get('wgPageName'); | ||
const isTalkPage = mw.config.get('wgNamespaceNumber') % 2 === 1; | const isTalkPage = mw.config.get('wgNamespaceNumber') % 2 === 1; | ||
const isExistingPage = mw.config.get('wgArticleId') > 0; | const isExistingPage = mw.config.get('wgArticleId') > 0; | ||
// | // 3. 预构造按钮 HTML(比动态创建元素更快) | ||
const editUrl = mw.util.getUrl(pageTitle, { action: 'edit' }); | const editUrl = mw.util.getUrl(pageTitle, { action: 'edit' }); | ||
const historyUrl = mw.util.getUrl(pageTitle, { action: 'history' }); | const historyUrl = mw.util.getUrl(pageTitle, { action: 'history' }); | ||
| 第16行: | 第15行: | ||
const talkUrl = mw.util.getUrl(talkTitle); | const talkUrl = mw.util.getUrl(talkTitle); | ||
const buttonsHtml = ` | |||
<div id="custom-wiki-bottom-bar" style=" | |||
margin: 2.5rem auto 1rem; | |||
padding: 1rem 0; | |||
border-top: 1px solid #e0e0e0; | |||
text-align: center; | |||
max-width: 800px; | |||
"> | |||
<a href="${editUrl}" style=" | |||
display: inline-block; | |||
margin: 0 0.75rem; | |||
padding: 0.5rem 1.25rem; | |||
background-color: #3366cc; | |||
color: white; | |||
text-decoration: none; | |||
border-radius: 4px; | |||
font-size: 0.95rem; | |||
font-weight: 500; | |||
transition: opacity 0.2s; | |||
" onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'"> | |||
${isExistingPage ? '编辑页面' : '创建页面'} | |||
</a> | |||
<a href="${historyUrl}" style=" | |||
display: inline-block; | |||
margin: 0 0.75rem; | |||
padding: 0.5rem 1.25rem; | |||
background-color: #72777d; | |||
color: white; | |||
text-decoration: none; | |||
border-radius: 4px; | |||
font-size: 0.95rem; | |||
font-weight: 500; | |||
transition: opacity 0.2s; | |||
" onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'"> | |||
查看历史 | |||
</a> | |||
<a href="${talkUrl}" style=" | |||
display: inline-block; | |||
margin: 0 0.75rem; | |||
padding: 0.5rem 1.25rem; | |||
background-color: #202122; | |||
color: white; | |||
text-decoration: none; | |||
border-radius: 4px; | |||
font-size: 0.95rem; | |||
font-weight: 500; | |||
transition: opacity 0.2s; | |||
" onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'"> | |||
${isTalkPage ? '返回条目' : '讨论页'} | |||
</a> | |||
</div> | |||
`; | `; | ||
// 4. | // 4. 【关键】DOM 一就绪就插入,不等图片/样式/钩子 | ||
const | function insertBar() { | ||
const content = document.querySelector('main#content, #content'); | |||
if (content && !document.getElementById('custom-wiki-bottom-bar')) { | |||
content.insertAdjacentHTML('beforeend', buttonsHtml); | |||
} | } | ||
} | |||
// 优先用 DOMContentLoaded,比 MediaWiki 的钩子快得多 | |||
if (document.readyState === 'loading') { | |||
document.addEventListener('DOMContentLoaded', insertBar); | |||
} else { | |||
insertBar(); // 如果 DOM 已经就绪,直接执行 | |||
} | } | ||
}); | })(); | ||