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:
1 parent
48f7436030
commit
5ce43c4326
10 files changed
+1373
-1298
No files matched your search
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 ──
|
||||
|
||||
Reference in new issue
Block a user