feat(wiki): 新增 GHC06 任务页与图库发布体系,级联更新既有页面

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-08-11 15:03:14 +08:00
co-authored by Claude
parent 26d2fcd0b1
commit 4ef15545e3
34 changed files with 3515 additions and 1572 deletions
+152 -19
View File
@@ -7,35 +7,168 @@
.wiki-article .image-placeholder { min-height: 150px; border: 1px dashed #72777d; background: #eaecf0; color: #54595d; display: flex; align-items: center; justify-content: center; padding: 40px 16px; text-align: center; box-sizing: border-box; font-size: 0.92em; }
@media (max-width: 820px) { .wiki-article { padding: 18px 16px 36px; } }
.wiki-article img[data-wiki-asset] { cursor: zoom-in; }
.wiki-image-lightbox { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(32,33,34,0.84); z-index: 10000; box-sizing: border-box; }
/* mission-gallery-enhancements:start */
.wiki-article .gallery-grid {
grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr));
align-items: stretch;
}
.wiki-article .gallery-item {
display: grid;
grid-template-rows: auto 1fr;
overflow: hidden;
content-visibility: auto;
contain-intrinsic-size: 340px 300px;
}
.wiki-article .gallery-item img[data-wiki-asset] {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: contain;
background: #202122;
cursor: zoom-in;
}
.wiki-article .gallery-item .thumbcaption {
padding: 8px 7px 7px;
}
.wiki-article .gallery-notice {
margin: 1em 0 1.25em;
padding: 10px 12px;
border-left: 4px solid #36c;
background: #f1f4fd;
color: #202122;
}
.wiki-article .image-placeholder {
position: relative;
border: 1px dashed #72777d;
background: linear-gradient(135deg, #f8f9fa, #eaecf0);
color: #54595d;
}
.wiki-article.gallery-planning .gallery-grid {
grid-template-columns: repeat(auto-fill, minmax(min(100%, 360px), 1fr));
gap: 12px;
}
.wiki-article.gallery-planning .gallery-item {
display: block;
content-visibility: visible;
contain-intrinsic-size: none;
border-color: #a2a9b1;
background: #fff;
box-shadow: 0 1px 2px rgba(32, 33, 34, 0.08);
}
.wiki-article.gallery-planning .image-placeholder {
min-height: 0 !important;
display: block;
padding: 14px 14px 12px;
border: 0;
border-left: 4px solid #72777d;
background: #f8f9fa;
color: #202122;
text-align: left;
font-size: 13px;
font-weight: 600;
line-height: 1.65;
}
.wiki-article.gallery-planning .gallery-item .thumbcaption {
padding: 10px 14px 12px;
border-top: 1px solid #eaecf0;
color: #54595d;
}
.wiki-article.gallery-planning > .image-placeholder {
min-height: 0;
padding: 22px 18px;
border-left: 4px solid #72777d;
}
.wiki-image-lightbox {
position: fixed;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
background: rgba(32, 33, 34, 0.88);
z-index: 10000;
box-sizing: border-box;
}
.wiki-image-lightbox[hidden] { display: none; }
.wiki-image-lightbox-panel { position: relative; width: min(1120px, 96vw); max-height: 92vh; overflow: auto; margin: 0; padding: 10px; border: 1px solid #a2a9b1; background: #fff; box-shadow: 0 12px 38px rgba(0,0,0,0.35); box-sizing: border-box; }
.wiki-image-lightbox-panel img { display: block; width: 100%; height: auto; max-height: 82vh; object-fit: contain; background: #000; }
.wiki-image-lightbox-close { position: sticky; top: 0; float: right; width: 30px; height: 30px; margin: -2px -2px 8px 10px; border: 1px solid #a2a9b1; background: #eaecf0; color: #202122; font-weight: bold; line-height: 26px; cursor: pointer; }
.wiki-image-lightbox-close:hover, .wiki-image-lightbox-close:focus { background: #fff; }
.wiki-image-lightbox-panel {
position: relative;
display: grid;
grid-template-columns: 44px minmax(0, 1fr) 44px;
grid-template-areas: "close close close" "prev image next" "counter caption caption";
gap: 8px;
width: min(1320px, 96vw);
max-height: 94vh;
overflow: auto;
margin: 0;
padding: 10px;
border: 1px solid #a2a9b1;
background: #fff;
box-shadow: 0 12px 38px rgba(0, 0, 0, 0.35);
box-sizing: border-box;
}
.wiki-image-lightbox-panel > img {
grid-area: image;
width: 100%;
height: min(78vh, 900px);
object-fit: contain;
background: #000;
}
.wiki-image-lightbox-close {
grid-area: close;
justify-self: end;
position: static;
float: none;
width: 34px;
height: 34px;
margin: 0;
border: 1px solid #a2a9b1;
border-radius: 3px;
background: #eaecf0;
color: #202122;
font-size: 22px;
line-height: 30px;
cursor: pointer;
}
.wiki-image-lightbox-close:hover,
.wiki-image-lightbox-close:focus { background: #fff; }
.wiki-image-lightbox-prev { grid-area: prev; }
.wiki-image-lightbox-next { grid-area: next; }
.wiki-image-lightbox-nav {
align-self: center;
width: 40px;
height: 56px;
border: 1px solid #a2a9b1;
border-radius: 3px;
background: #eaecf0;
color: #202122;
font-size: 26px;
cursor: pointer;
}
.wiki-image-lightbox-nav:hover,
.wiki-image-lightbox-nav:focus { background: #fff; }
.wiki-image-lightbox-counter { grid-area: counter; color: #54595d; white-space: nowrap; }
.wiki-image-lightbox-panel .thumbcaption { grid-area: caption; padding: 0 4px 3px; }
body.wiki-image-lightbox-open { overflow: hidden; }
@media (max-width: 820px) { .wiki-image-lightbox { padding: 12px; } .wiki-image-lightbox-panel { width: 98vw; max-height: 94vh; } }
@media (max-width: 820px) {
.wiki-article .gallery-grid { grid-template-columns: 1fr; }
.wiki-image-lightbox-panel {
grid-template-columns: 36px minmax(0, 1fr) 36px;
width: 98vw;
}
.wiki-image-lightbox-panel > img { height: 70vh; }
.wiki-image-lightbox-nav { width: 34px; height: 48px; }
}
/* mission-gallery-enhancements:end */
</style>
<article class="mw-parser-output wiki-article">
<article class="mw-parser-output wiki-article gallery-planning">
<h1 id="top">金蟾部署任务-02 任务图集</h1>
<p style="margin-bottom:1.5em;"><a href="/home/mission/Guanghan_Program/JC-02">← 返回任务页</a></p>
<p style="margin-bottom:1.5em;"><b>任务图集导航</b><a href="/home/mission/Guanghan_Program/JC-01/Gallery">← JC-01 图集</a></p>
<p>JC-02 的影像素材待补充</p>
<div class="image-placeholder">JC-02 任务影像待补充</div>
<p class="gallery-notice"><b>影像制作中:</b>金蟾部署任务-02 的任务影像尚未完成。此提示并非图片加载失败,素材完成后将在本页补充正式图集</p>
<div class="image-placeholder">金蟾部署任务-02 任务影像制作中</div>
<p style="margin-top:1.5em;"><b>任务图集导航</b><a href="/home/mission/Guanghan_Program/JC-01/Gallery">← JC-01 图集</a></p>
<p style="margin-top:1.5em;"><a href="/home/mission/Guanghan_Program/JC-02">← 返回任务页</a></p>
</article>
<script>
(function () {
function ready(fn) { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', fn, { once: true }); } else { fn(); } }
function captionFor(image) { var container = image.closest('figure, td, tr, .infobox-image, .gallery-item'); if (!container) { return image.alt || ''; } var caption = container.querySelector('.thumbcaption'); return caption ? caption.textContent.trim() : (image.alt || ''); }
function install(article) { if (!article || article.dataset.lightboxReady === '1') { return; } article.dataset.lightboxReady = '1'; var overlay = document.createElement('div'); overlay.className = 'wiki-image-lightbox'; overlay.hidden = true; overlay.innerHTML = '<figure class="wiki-image-lightbox-panel" role="dialog" aria-modal="true"><button class="wiki-image-lightbox-close" type="button">x</button><img alt=""><figcaption class="thumbcaption"></figcaption></figure>'; document.body.appendChild(overlay); var pi = overlay.querySelector('img'); var pc = overlay.querySelector('figcaption'); var cb = overlay.querySelector('.wiki-image-lightbox-close'); function cp() { overlay.hidden = true; pi.removeAttribute('src'); pc.textContent = ''; document.body.classList.remove('wiki-image-lightbox-open'); } function op(image, event) { event.preventDefault(); event.stopPropagation(); if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } pi.src = image.currentSrc || image.src; pi.alt = image.alt || ''; pc.textContent = captionFor(image); overlay.hidden = false; document.body.classList.add('wiki-image-lightbox-open'); cb.focus(); } article.querySelectorAll('img[data-wiki-asset]').forEach(function (image) { if (image.dataset.lightboxBound === '1') { return; } image.dataset.lightboxBound = '1'; image.addEventListener('click', function (event) { op(image, event); }, true); }); article.addEventListener('click', function (event) { var image = event.target.closest && event.target.closest('img[data-wiki-asset]'); if (!image || !article.contains(image) || image.closest('.wiki-image-lightbox')) { return; } op(image, event); }); cb.addEventListener('click', cp); overlay.addEventListener('click', function (event) { if (event.target === overlay) { cp(); } }); document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && !overlay.hidden) { cp(); } }); }
function installAll() { document.querySelectorAll('.wiki-article, .vulture-article').forEach(install); }
ready(function () { installAll(); if (window.MutationObserver) { var observer = new MutationObserver(installAll); observer.observe(document.body, { childList: true, subtree: true }); } window.setTimeout(installAll, 500); window.setTimeout(installAll, 1500); window.setTimeout(installAll, 3000); });
}());
</script>