MediaWiki:Common.js
MediaWiki界面页面
更多操作
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* 引入卡片数据渲染模块 */
mw.loader.load( '/index.php?title=MediaWiki:CardData.js&action=raw&ctype=text/javascript' );
/* 卡面滚动 */
window.addEventListener("scroll", () => {
const bg = document.querySelector(".card_fullscreen-img");
if (window.scrollY > 10) {
bg.classList.add("scrolled");
} else {
bg.classList.remove("scrolled");
}
});
/* 小传折叠 + 标题 sticky */
mw.hook("wikipage.content").add(function(){
document.querySelectorAll(".card_content_story").forEach(function(story){
var toggle = story.querySelector(".card_content_story-toggle");
var timeline = story.querySelector(".card_content_story-timeline");
var headerLeft = story.querySelector(".card_content_story-header-left");
if (!toggle || !timeline || !headerLeft) return;
var icon = toggle.querySelector(".story-toggle-icon");
var text = toggle.querySelector(".story-toggle-text");
/* 折叠/展开 */
toggle.addEventListener("click", function(){
var collapsed = toggle.getAttribute("data-collapsed") === "true";
if (collapsed) {
timeline.style.opacity = "1";
timeline.style.transform = "translateY(0)";
timeline.style.maxHeight = "5000px";
} else {
timeline.style.opacity = "0";
timeline.style.transform = "translateY(-6px)";
timeline.style.maxHeight = "0";
}
toggle.setAttribute("data-collapsed", collapsed ? "false" : "true");
icon.innerText = collapsed ? "-" : "+";
text.innerText = collapsed ? "收起" : "展开";
if (!collapsed) headerLeft.classList.remove("is-sticky");
});
/* sticky 判断 */
function updateSticky() {
if (toggle.getAttribute("data-collapsed") === "true") {
headerLeft.classList.remove("is-sticky");
return;
}
var storyRect = story.getBoundingClientRect();
var timelineRect = timeline.getBoundingClientRect();
if (storyRect.top < 0 && timelineRect.bottom > window.innerHeight) {
headerLeft.classList.add("is-sticky");
} else {
headerLeft.classList.remove("is-sticky");
}
}
window.addEventListener("scroll", updateSticky, { passive: true });
updateSticky();
});
});
/* 邀约故事区 */
mw.hook("wikipage.content").add(function(){
var cards = document.querySelectorAll(".card_content_date-item");
var panel = document.getElementById("date-story-panel");
var contents = document.querySelectorAll(".card_date_story-content");
if(!cards.length || !panel) return;
var currentIndex = -1;
cards.forEach(function(card){
card.addEventListener("click", function(){
var index = parseInt(card.getAttribute("data-date-index"), 10);
if(currentIndex === index){
panel.classList.remove("is-visible");
card.classList.remove("is-active");
currentIndex = -1;
return;
}
cards.forEach(function(c){ c.classList.remove("is-active"); });
card.classList.add("is-active");
currentIndex = index;
panel.classList.remove("is-visible");
void panel.offsetWidth;
panel.classList.add("is-visible");
contents.forEach(function(content){
var storyIndex = parseInt(content.getAttribute("data-story-index"), 10);
if(storyIndex === index){
content.classList.add("is-active");
} else {
content.classList.remove("is-active");
}
});
});
});
});
/* 道具页:左侧列表切换右侧详情 */
mw.hook("wikipage.content").add(function(){
var tabs = document.querySelectorAll(".item-tab");
var details = document.querySelectorAll(".item-detail");
if (!tabs.length || !details.length) return;
tabs.forEach(function(tab){
tab.addEventListener("click", function(){
var id = tab.getAttribute("data-item");
details.forEach(function(el){ el.style.display = "none"; });
tabs.forEach(function(t){
t.style.borderLeft = "2px solid transparent";
t.style.background = "transparent";
});
var detail = document.getElementById("item-" + id);
if (detail) detail.style.display = "block";
tab.style.borderLeft = "2px solid #ff7676";
tab.style.background = "rgba(255,150,170,0.08)";
});
});
});