MediaWiki:Common.js:修订间差异
外观
小无编辑摘要 标签:已被回退 |
小无编辑摘要 标签:已被回退 |
||
第33行: | 第33行: | ||
}); | }); | ||
mw. | /* 更新页脚“最后编辑时间” —— 稳定版 */ | ||
(function () { | |||
'use strict'; | |||
// 仅在普通查看页生效 | |||
if (mw.config.get('wgAction') !== 'view') return; | |||
var | var weekdays = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']; | ||
var editDate = new Date(y, | function pad(n){ return n < 10 ? '0' + n : '' + n; } | ||
function daysDiff(a, b) { | |||
var A = new Date(a.getFullYear(), a.getMonth(), a.getDate()); | |||
var B = new Date(b.getFullYear(), b.getMonth(), b.getDate()); | |||
return Math.round((B - A) / 86400000); | |||
} | |||
function updateLastmod() { | |||
var ts = mw.config.get('wgRevisionTimestamp'); // 形如 '20250904022639' | |||
var $lastmod = $('#footer-info-lastmod'); | |||
if (!$lastmod.length || !ts) return; | |||
var y = +ts.slice(0, 4); | |||
var mo = +ts.slice(4, 6) - 1; | |||
var d = +ts.slice(6, 8); | |||
var hh = +ts.slice(8,10); | |||
var mm = +ts.slice(10,12); | |||
var editDate = new Date(y, mo, d, hh, mm); | |||
var now = new Date(); | var now = new Date(); | ||
var | var diff = daysDiff(editDate, now); | ||
var rel = | var rel = diff === 0 ? '今天' : (diff === 1 ? '昨天' : diff + '天前'); | ||
var text = '此页面最后编辑于' + rel + ',' + | |||
var | y + '年' + pad(mo + 1) + '月' + pad(d) + | ||
var | '日(' + weekdays[editDate.getDay()] + ') ' + | ||
pad(hh) + ':' + pad(mm); | |||
$lastmod.text(text); | |||
} | |||
function schedule() { | |||
// 让位于皮肤的异步更新先完成,再改文案 | |||
setTimeout(updateLastmod, 0); | |||
(window.requestIdleCallback || setTimeout)(updateLastmod, 200); | |||
} | |||
// 首次加载 | |||
$(schedule); | |||
// 每次内容区加载(包括 AJAX 导航) | |||
mw.hook('wikipage.content').add(schedule); | |||
// 前进/后退 | |||
window.addEventListener('popstate', schedule); | |||
// 监听 pushState(Vector 内部导航) | |||
(function patchPushState(){ | |||
var ps = history.pushState; | |||
history.pushState = function() { | |||
var ret = ps.apply(this, arguments); | |||
schedule(); | |||
return ret; | |||
}; | |||
})(); | |||
// 兜底:若皮肤异步替换了页脚节点,观察到后再更新 | |||
var footer = document.getElementById('footer'); | |||
if (footer && window.MutationObserver) { | |||
new MutationObserver(function(muts){ | |||
for (var i = 0; i < muts.length; i++) { | |||
var added = muts[i].addedNodes; | |||
for (var j = 0; j < added.length; j++) { | |||
var n = added[j]; | |||
if ((n.id && n.id === 'footer-info-lastmod') || | |||
(n.querySelector && n.querySelector('#footer-info-lastmod'))) { | |||
schedule(); | |||
return; | |||
} | |||
} | |||
} | |||
}).observe(footer, { childList: true, subtree: true }); | |||
} | } | ||
}); | })(); |
2025年9月4日 (四) 03:36的版本
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
// Cloudflare Web Analytics
var script = document.createElement('script');
script.defer = true;
script.src = 'https://static.cloudflareinsights.com/beacon.min.js';
script.setAttribute('data-cf-beacon', '{"token": "6180aa28fe1943b48c4059a5056f4738"}');
document.head.appendChild(script);
// End Cloudflare Web Analytics
$(function () {
// 只在 Special:Search 页面运行
if (mw.config.get("wgCanonicalSpecialPageName") === "Search") {
const searchTerm = mw.util.getParamValue("search");
const googleUrl = "https://www.google.com/search?q=" + encodeURIComponent(searchTerm);
const $googleLink = $("<p>").html(
`你也可以到 <a href="${googleUrl}" target="_blank" rel="noopener">Google 中搜索“${searchTerm}”</a>。`
);
// 优先在有搜索结果时插入
if ($(".mw-search-results").length) {
$googleLink.insertAfter(".mw-search-results");
}
// 否则在没有结果提示后插入
else if ($(".mw-search-nonefound").length) {
$googleLink.insertAfter(".mw-search-nonefound");
}
}
});
$(function() {
$('#searchInput').attr('accesskey', '/');
});
/* 更新页脚“最后编辑时间” —— 稳定版 */
(function () {
'use strict';
// 仅在普通查看页生效
if (mw.config.get('wgAction') !== 'view') return;
var weekdays = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
function pad(n){ return n < 10 ? '0' + n : '' + n; }
function daysDiff(a, b) {
var A = new Date(a.getFullYear(), a.getMonth(), a.getDate());
var B = new Date(b.getFullYear(), b.getMonth(), b.getDate());
return Math.round((B - A) / 86400000);
}
function updateLastmod() {
var ts = mw.config.get('wgRevisionTimestamp'); // 形如 '20250904022639'
var $lastmod = $('#footer-info-lastmod');
if (!$lastmod.length || !ts) return;
var y = +ts.slice(0, 4);
var mo = +ts.slice(4, 6) - 1;
var d = +ts.slice(6, 8);
var hh = +ts.slice(8,10);
var mm = +ts.slice(10,12);
var editDate = new Date(y, mo, d, hh, mm);
var now = new Date();
var diff = daysDiff(editDate, now);
var rel = diff === 0 ? '今天' : (diff === 1 ? '昨天' : diff + '天前');
var text = '此页面最后编辑于' + rel + ',' +
y + '年' + pad(mo + 1) + '月' + pad(d) +
'日(' + weekdays[editDate.getDay()] + ') ' +
pad(hh) + ':' + pad(mm);
$lastmod.text(text);
}
function schedule() {
// 让位于皮肤的异步更新先完成,再改文案
setTimeout(updateLastmod, 0);
(window.requestIdleCallback || setTimeout)(updateLastmod, 200);
}
// 首次加载
$(schedule);
// 每次内容区加载(包括 AJAX 导航)
mw.hook('wikipage.content').add(schedule);
// 前进/后退
window.addEventListener('popstate', schedule);
// 监听 pushState(Vector 内部导航)
(function patchPushState(){
var ps = history.pushState;
history.pushState = function() {
var ret = ps.apply(this, arguments);
schedule();
return ret;
};
})();
// 兜底:若皮肤异步替换了页脚节点,观察到后再更新
var footer = document.getElementById('footer');
if (footer && window.MutationObserver) {
new MutationObserver(function(muts){
for (var i = 0; i < muts.length; i++) {
var added = muts[i].addedNodes;
for (var j = 0; j < added.length; j++) {
var n = added[j];
if ((n.id && n.id === 'footer-info-lastmod') ||
(n.querySelector && n.querySelector('#footer-info-lastmod'))) {
schedule();
return;
}
}
}
}).observe(footer, { childList: true, subtree: true });
}
})();