fix(frontend): close single 1:1 residuals without legacy paths

Unify TOC ownership, real video episode list, slider overlay, single-query related list, Zibll user-card after-box, and new-route subtitle/meta contracts.
This commit is contained in:
kate522 committed 2026-07-13 13:18:19 +08:00
1 parent 48f7436030
commit 5ce43c4326
10 files changed
+1373 -1298

No files matched your search

@@ -548,3 +548,17 @@ html.dark .post-drop-meta__item:hover {
.article-tags .but.c-green { color: #5cb85c; }
.article-tags .but.c-purple { color: #9c27b0; }
.article-tags .but.c-red { color: #f44336; }
/* ===== Zibll user-card after-box ===== */
.user-card.author.zib-widget { margin-bottom: 16px; overflow: hidden; }
.user-card.author .user-avatar { display: flex; justify-content: center; }
.user-card.author .user-avatar .avatar,
.user-card.author .user-avatar img { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; }
.user-card.author .user-name { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 4px; }
.user-card.author .user-name .display-name { font-weight: 700; color: var(--key-color, inherit); }
.user-card.author .user-desc { text-align: center; }
.user-card.author .user-btns { text-align: center; }
.user-card.author .user-card-posts ul { list-style: none; margin: 0; padding: 0; }
.user-card.author .user-card-posts li { padding: 6px 0; border-bottom: 1px dashed var(--color-line, rgba(0,0,0,.06)); }
.user-card.author .user-card-posts li:last-child { border-bottom: 0; }
+16
View File
@@ -273,3 +273,19 @@
.article-avatar .display-name {
margin-right: 2px;
}
/* Slide cover overlay (injected by aksrt_render_slider overlay_html) */
.aksrt-slider-wrapper--has-overlay,
.aksrt-slider-wrapper--scale { position: relative; overflow: hidden; border-radius: var(--radius-2xl, 16px); }
.aksrt-slider-wrapper--scale .new-swiper { position: absolute; inset: 0; width: 100%; height: 100%; }
.aksrt-slider-wrapper--scale .swiper-slide img.fit-cover { width: 100%; height: 100%; object-fit: cover; }
.aksrt-slider-overlay { position: absolute; inset: 0; z-index: 3; pointer-events: none; }
.aksrt-slider-overlay .abs-center.left-bottom { pointer-events: none; padding: 18px 20px; color: #fff; }
.aksrt-slider-overlay .article-title,
.aksrt-slider-overlay .article-title.title-h-left { color: #fff; text-shadow: 0 1px 4px rgba(0,0,0,.45); }
.aksrt-slider-overlay .breadcrumb a,
.aksrt-slider-overlay .breadcrumb li { color: rgba(255,255,255,.9); }
.aksrt-slider-overlay .single-metabox,
.aksrt-slider-overlay .cover-meta { pointer-events: auto; }
.aksrt-slider-overlay .post-drop-meta { pointer-events: auto; }
+13 -1
View File
@@ -19,19 +19,31 @@
var navContainer = document.querySelector('[data-nav]');
if (!navContainer) return;
// Single-post TOC is owned by page-template.js (.posts-nav-box .toc-list).
// Do not invent a second .aksrt-section-nav tree on article singles.
if (document.querySelector('.posts-nav-box .toc-list, .posts-nav-box.toc-widget')) {
return;
}
var headings = navContainer.querySelectorAll(HEADING_SEL);
if (headings.length < MIN_HEADINGS) return;
var tocContainer = document.querySelector('.posts-nav-lists, .aksrt-section-nav');
if (!tocContainer) {
// Docs / page-navs only: create a dedicated container. Never inject into single sidebars.
if (document.body.classList.contains('single') || document.body.classList.contains('single-post')) {
return;
}
tocContainer = document.createElement('nav');
tocContainer.className = 'aksrt-section-nav';
tocContainer.setAttribute('aria-label', '文章目录');
var sidebar = document.querySelector('.content-layout__aside, .sidebar, .widget-area');
if (sidebar) {
sidebar.insertBefore(tocContainer, sidebar.firstChild);
} else {
} else if (navContainer.parentNode) {
navContainer.parentNode.insertBefore(tocContainer, navContainer);
} else {
return;
}
}
+15 -3
View File
@@ -220,9 +220,16 @@
if (!switchBtn) return;
var container = switchBtn.closest('.aksrt-video') || switchBtn.closest('[data-aksrt-video]');
// Single cover: episodes sit in .single-video-footer; player is sibling under .single-video
if (!container) {
var singleVideo = switchBtn.closest('.single-video, .single-head-cover');
if (singleVideo) {
container = singleVideo.querySelector('.aksrt-video, [data-aksrt-video]');
}
}
if (!container) return;
var src = switchBtn.dataset.src || switchBtn.getAttribute('href');
var src = switchBtn.dataset.src || switchBtn.getAttribute('video-url') || switchBtn.getAttribute('href');
if (!src) return;
e.preventDefault();
@@ -237,9 +244,14 @@
}
// 高亮当前集
var siblings = container.parentElement ? container.parentElement.querySelectorAll('.switch-video, .switch-iframe') : [];
siblings.forEach(function (btn) { btn.classList.remove('is-active'); });
var scope = switchBtn.closest('.featured-video-episode') || (container.parentElement || document);
var siblings = scope.querySelectorAll('.switch-video, .switch-iframe');
siblings.forEach(function (btn) {
btn.classList.remove('is-active');
btn.classList.remove('active');
});
switchBtn.classList.add('is-active');
switchBtn.classList.add('active');
});
// ── Public API ──