MediaWiki:Common.js:修订间差异
MediaWiki界面页面
更多操作
无编辑摘要 |
道具页:搜索过滤 + 切换逻辑整合 (via update-page on MediaWiki MCP Server) |
||
| (未显示同一用户的9个中间版本) | |||
| 第1行: | 第1行: | ||
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */ | /* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */ | ||
/* 引入卡片数据渲染模块 */ | |||
mw.loader.load( '/index.php?title=MediaWiki:CardData.js&action=raw&ctype=text/javascript' ); | |||
/* 卡面滚动 */ | /* 卡面滚动 */ | ||
window.addEventListener("scroll", () | window.addEventListener("scroll", function() { | ||
var bg = document.querySelector(".card_fullscreen-img"); | |||
if (!bg) return; | |||
if (window.scrollY > 10) { | if (window.scrollY > 10) { | ||
bg.classList.add("scrolled"); | bg.classList.add("scrolled"); | ||
| 第11行: | 第15行: | ||
}); | }); | ||
/* 小传折叠 + 标题 sticky */ | |||
/* 小传折叠 */ | |||
mw.hook("wikipage.content").add(function(){ | 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"); | |||
var toggle = story.querySelector(".card_content_story-toggle"); | |||
var | |||
toggle.addEventListener("click", function(){ | toggle.addEventListener("click", function(){ | ||
var collapsed = toggle.getAttribute("data-collapsed") === "true"; | 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"); | |||
}); | |||
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); | |||
content.classList.toggle("is-active", storyIndex === index); | |||
}); | }); | ||
}); | |||
}); | |||
}); | |||
/* 道具页:列表切换 + 搜索过滤 */ | |||
mw.hook("wikipage.content").add(function(){ | |||
var tabs = document.querySelectorAll(".item-tab"); | |||
var details = document.querySelectorAll(".item-detail"); | |||
var search = document.getElementById("item-search"); | |||
if (!tabs.length) return; | |||
function activate(id) { | |||
details.forEach(function(el){ el.style.display = "none"; }); | |||
tabs.forEach(function(t){ t.setAttribute("data-active", "false"); }); | |||
var detail = document.getElementById("item-" + id); | |||
if (detail) detail.style.display = "block"; | |||
var tab = document.querySelector(".item-tab[data-item='" + id + "']"); | |||
if (tab) tab.setAttribute("data-active", "true"); | |||
} | |||
tabs.forEach(function(tab){ | |||
tab.addEventListener("click", function(){ | |||
activate(tab.getAttribute("data-item")); | |||
}); | }); | ||
}); | }); | ||
if (search) { | |||
search.addEventListener("input", function(){ | |||
var q = search.value.trim().toLowerCase(); | |||
tabs.forEach(function(tab){ | |||
var text = (tab.getAttribute("data-name") || tab.textContent || "").toLowerCase(); | |||
tab.style.display = text.indexOf(q) !== -1 ? "" : "none"; | |||
}); | |||
}); | |||
} | |||
}); | }); | ||
2026年3月28日 (六) 22:06的最新版本
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* 引入卡片数据渲染模块 */
mw.loader.load( '/index.php?title=MediaWiki:CardData.js&action=raw&ctype=text/javascript' );
/* 卡面滚动 */
window.addEventListener("scroll", function() {
var bg = document.querySelector(".card_fullscreen-img");
if (!bg) return;
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");
});
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);
content.classList.toggle("is-active", storyIndex === index);
});
});
});
});
/* 道具页:列表切换 + 搜索过滤 */
mw.hook("wikipage.content").add(function(){
var tabs = document.querySelectorAll(".item-tab");
var details = document.querySelectorAll(".item-detail");
var search = document.getElementById("item-search");
if (!tabs.length) return;
function activate(id) {
details.forEach(function(el){ el.style.display = "none"; });
tabs.forEach(function(t){ t.setAttribute("data-active", "false"); });
var detail = document.getElementById("item-" + id);
if (detail) detail.style.display = "block";
var tab = document.querySelector(".item-tab[data-item='" + id + "']");
if (tab) tab.setAttribute("data-active", "true");
}
tabs.forEach(function(tab){
tab.addEventListener("click", function(){
activate(tab.getAttribute("data-item"));
});
});
if (search) {
search.addEventListener("input", function(){
var q = search.value.trim().toLowerCase();
tabs.forEach(function(tab){
var text = (tab.getAttribute("data-name") || tab.textContent || "").toLowerCase();
tab.style.display = text.indexOf(q) !== -1 ? "" : "none";
});
});
}
});