diff --git a/assets/css/frontend/single-post/code-blocks.css b/assets/css/frontend/single-post/code-blocks.css index 22f97a57..410406e2 100644 --- a/assets/css/frontend/single-post/code-blocks.css +++ b/assets/css/frontend/single-post/code-blocks.css @@ -1,4 +1,4 @@ -/* ========== 浠g爜鍧?GitHub 椋庢牸 ========== */ +/* ========== 代码块:GitHub 风格 ========== */ .code-block { border-radius: var(--radius-code); border: 1px solid var(--color-line); @@ -52,8 +52,8 @@ } } -.entry-content pre.wp-block-code, -.entry-content pre:not(.wp-block-preformatted) { +:is(.entry-content, .wp-posts-content) pre.wp-block-code, +:is(.entry-content, .wp-posts-content) pre:not(.wp-block-preformatted) { border-radius: var(--radius-code); border: 1px solid var(--color-line); background: var(--surface-3); @@ -61,7 +61,7 @@ overflow: hidden; } -.entry-content pre code { +:is(.entry-content, .wp-posts-content) pre code { display: block; padding: 16px 20px; overflow-x: auto; diff --git a/assets/css/frontend/single-post/content.css b/assets/css/frontend/single-post/content.css index bbf616d0..da3bc8b9 100644 --- a/assets/css/frontend/single-post/content.css +++ b/assets/css/frontend/single-post/content.css @@ -129,27 +129,33 @@ article.article.box-body, height: 2px; } -.entry-content > *:first-child { +:is(.entry-content, .wp-posts-content) > *:first-child { margin-top: 0; } -.entry-content p { +:is(.entry-content, .wp-posts-content) p { margin: 0 0 1.5em; } -.entry-content h2 { +:is(.entry-content, .wp-posts-content) h2 { font-size: 20px; font-weight: 700; - margin: 20px 0 10px; + margin: 28px 0 14px; } -.entry-content h3 { +:is(.entry-content, .wp-posts-content) h3 { font-size: 18px; font-weight: 700; - margin: 20px 0 10px; + margin: 24px 0 12px; } -.entry-content blockquote { +:is(.entry-content, .wp-posts-content) h4 { + font-size: 16px; + font-weight: 700; + margin: 22px 0 10px; +} + +:is(.entry-content, .wp-posts-content) blockquote { margin: 0 0 24px; padding: 18px 20px; border-left: 4px solid var(--color-primary); @@ -158,11 +164,29 @@ article.article.box-body, color: var(--color-ink-3); } -.entry-content img { +:is(.entry-content, .wp-posts-content) img { margin: 0 auto; display: block; max-width: 100%; height: auto; + border-radius: min(8px, var(--main-radius, 8px)); +} + +:is(.entry-content, .wp-posts-content) figure { + max-width: 100%; + margin: 1.5em auto; +} + +:is(.entry-content, .wp-posts-content) figcaption { + margin-top: 8px; + color: var(--muted-color, #777); + font-size: 13px; + line-height: 1.6; + text-align: center; +} + +:is(.entry-content, .wp-posts-content) .aksrt-lightbox-target { + cursor: zoom-in; } /* ===== 图片灯箱 ===== */ @@ -226,14 +250,14 @@ article.article.box-body, pointer-events: none; } -.entry-content iframe, -.entry-content .wp-block-embed iframe, -.entry-content video { +:is(.entry-content, .wp-posts-content) iframe, +:is(.entry-content, .wp-posts-content) .wp-block-embed iframe, +:is(.entry-content, .wp-posts-content) video { max-width: 100%; height: auto; } -.entry-content .wp-block-embed { +:is(.entry-content, .wp-posts-content) .wp-block-embed { position: relative; width: 100%; max-width: 100%; @@ -242,7 +266,7 @@ article.article.box-body, } /* 行内代码 — 对齐 zibll: 粉色文字 + 粉色背景 */ -.entry-content code { +:is(.entry-content, .wp-posts-content) code { font-family: var(--font-mono); font-size: 0.9em; color: #ff3c98; @@ -251,13 +275,13 @@ article.article.box-body, border-radius: 4px; } -.entry-content ul, -.entry-content ol { +:is(.entry-content, .wp-posts-content) ul, +:is(.entry-content, .wp-posts-content) ol { padding-left: 1.5em; margin: 0 0 1.5em; } -.entry-content ul li::marker { +:is(.entry-content, .wp-posts-content) ul li::marker { color: var(--color-primary); } diff --git a/assets/css/frontend/single-post/shell.css b/assets/css/frontend/single-post/shell.css index 27349db9..ddb94363 100644 --- a/assets/css/frontend/single-post/shell.css +++ b/assets/css/frontend/single-post/shell.css @@ -40,3 +40,72 @@ body.single .sidebar .widget { body.single main.container { box-sizing: border-box; } + +/* Reading facts below the author row. */ +.article-reading-meta { + display: flex; + flex-wrap: wrap; + gap: 8px 14px; + margin: 12px 0 2px; + color: var(--muted-color, #777); + font-size: 12px; +} + +.article-reading-meta span { + display: inline-flex; + align-items: center; + gap: 5px; +} + +/* Useful fallback for sites that enable the column before adding widgets. */ +.single-overview-widget { + padding: 18px; + border-radius: var(--main-radius, 8px); + background: var(--main-bg-color, #fff); + box-shadow: 0 0 10px var(--main-shadow, rgba(116, 116, 116, 0.08)); +} + +.single-overview-widget__title { + display: flex; + align-items: center; + gap: 8px; + margin: 0 0 12px; + font-size: 15px; +} + +.single-overview-widget__title i { + color: var(--focus-color, #f04494); +} + +.single-overview-widget__list { + margin: 0; +} + +.single-overview-widget__list > div { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 8px 0; + border-bottom: 1px dashed var(--main-border-color, rgba(50, 50, 50, 0.08)); +} + +.single-overview-widget__list > div:last-child { + padding-bottom: 0; + border-bottom: 0; +} + +.single-overview-widget__list dt, +.single-overview-widget__list dd { + margin: 0; + font-size: 12px; +} + +.single-overview-widget__list dt { + color: var(--muted-color, #777); +} + +.single-overview-widget__list dd { + color: var(--key-color, #333); + text-align: right; +} diff --git a/assets/js/page-template.js b/assets/js/page-template.js index d87794c2..e0efc604 100644 --- a/assets/js/page-template.js +++ b/assets/js/page-template.js @@ -177,7 +177,7 @@ function initLightbox() { var overlay = document.getElementById('lightbox-overlay'); - var content = document.querySelector(".entry-content[data-aksrt-lightbox='1']"); + var content = document.querySelector(".wp-posts-content[data-aksrt-lightbox='1'], .entry-content[data-aksrt-lightbox='1']"); if (!overlay || !content || overlay.dataset.aksrtLightboxBound === '1') return; overlay.dataset.aksrtLightboxBound = '1'; @@ -188,6 +188,7 @@ function close() { overlay.classList.remove('is-open'); + overlay.setAttribute('aria-hidden', 'true'); document.body.style.overflow = ''; if (image) { image.src = ''; @@ -196,11 +197,19 @@ } content.querySelectorAll('img').forEach(function (img) { - img.style.cursor = 'zoom-in'; - img.addEventListener('click', function () { - if (!image) return; + var link = img.closest('a[href]'); + var linkHref = link ? link.href : ''; + var linksToImage = /\.(?:avif|gif|jpe?g|png|svg|webp)(?:[?#].*)?$/i.test(linkHref); + if (img.closest('[data-no-lightbox]') || (link && !linksToImage)) return; - image.src = img.src; + img.classList.add('aksrt-lightbox-target'); + img.addEventListener('click', function (event) { + if (!image) return; + if (linksToImage) event.preventDefault(); + + image.src = linksToImage + ? linkHref + : (img.getAttribute('data-src') || img.getAttribute('data-lazy-src') || img.currentSrc || img.src); image.alt = img.alt || ''; if (caption) { @@ -210,20 +219,18 @@ } overlay.classList.add('is-open'); + overlay.setAttribute('aria-hidden', 'false'); document.body.style.overflow = 'hidden'; + if (closeBtn) closeBtn.focus(); }); }); overlay.addEventListener('click', function (event) { - if (event.target === overlay || event.target === closeBtn) { + if (event.target === overlay || event.target === closeBtn || (event.target.closest && event.target.closest('.lightbox-close'))) { close(); } }); - if (closeBtn) { - closeBtn.addEventListener('click', close); - } - document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && overlay.classList.contains('is-open')) { close(); diff --git a/inc/bootstrap.php b/inc/bootstrap.php index 424482b9..3fc3155b 100644 --- a/inc/bootstrap.php +++ b/inc/bootstrap.php @@ -29,6 +29,7 @@ require_once AKSRT_DIR . '/inc/helpers/aksrt-single-components.php'; require_once AKSRT_DIR . '/inc/helpers/aksrt-single.php'; require_once AKSRT_DIR . '/inc/helpers/aksrt-yiyan.php'; require_once AKSRT_DIR . '/inc/helpers/aksrt-single-render.php'; +require_once AKSRT_DIR . '/inc/helpers/aksrt-single-aside.php'; require_once AKSRT_DIR . '/inc/helpers/aksrt-archive.php'; require_once AKSRT_DIR . '/inc/helpers/aksrt-archive-filters.php'; require_once AKSRT_DIR . '/inc/helpers/aksrt-comments.php'; diff --git a/inc/helpers/aksrt-single-aside.php b/inc/helpers/aksrt-single-aside.php new file mode 100644 index 00000000..add6934b --- /dev/null +++ b/inc/helpers/aksrt-single-aside.php @@ -0,0 +1,91 @@ + $ctx Single context. + */ + function aksrt_single_render_overview_widget(array $ctx): void { + $post_id = (int) ($ctx['post_id'] ?? get_the_ID()); + $categories = get_the_category($post_id); + $primary_category = !empty($categories) && $categories[0] instanceof WP_Term ? $categories[0] : null; + $modified = get_the_modified_date('', $post_id); + $overview_items = is_array($ctx['meta_items_secondary'] ?? null) ? $ctx['meta_items_secondary'] : []; + ?> +
+

+ + +

+
+ +
name); ?>
+ +
+
+ + +
+ + + +
+ +
+
+ $ctx Single context. + */ + function aksrt_single_render_aside(array $ctx): void { + if (empty($ctx['show_aside']) || wp_is_mobile()) { + return; + } + + $has_article_widgets = is_active_sidebar('all_sidebar_top') + || is_active_sidebar('sidebar-article') + || is_active_sidebar('all_sidebar_bottom'); + ?> + + empty($settings['hide_time']), 'meta_html' => empty($ctx['show_cover']) ? (string) ($ctx['meta_box_html'] ?? '') : '', ]); + $reading_meta = is_array($ctx['meta_items_secondary'] ?? null) ? $ctx['meta_items_secondary'] : []; + if ($reading_meta !== []) : + ?> +
+ + + +
+ ?> 'OR', + 'views_value' => [ + 'key' => 'aksrt_post_views', + 'compare' => 'EXISTS', + 'type' => 'NUMERIC', + ], + 'views_missing' => [ + 'key' => 'aksrt_post_views', + 'compare' => 'NOT EXISTS', + ], + ]; + $q['orderby'] = ['views_value' => 'DESC', 'date' => 'DESC']; } elseif ($card_orderby === 'comment_count') { $q['orderby'] = 'comment_count'; $q['order'] = 'DESC'; @@ -657,8 +676,19 @@ if (!function_exists('aksrt_single_related_query_args')) : $args['orderby'] = 'modified'; break; case 'views': - $args['meta_key'] = 'aksrt_post_views'; - $args['orderby'] = 'meta_value_num'; + $args['meta_query'] = [ + 'relation' => 'OR', + 'views_value' => [ + 'key' => 'aksrt_post_views', + 'compare' => 'EXISTS', + 'type' => 'NUMERIC', + ], + 'views_missing' => [ + 'key' => 'aksrt_post_views', + 'compare' => 'NOT EXISTS', + ], + ]; + $args['orderby'] = ['views_value' => 'DESC', 'date' => 'DESC']; break; case 'relevance': default: @@ -938,42 +968,3 @@ if (!function_exists('aksrt_single_render_after_box')) : } endif; -if (!function_exists('aksrt_single_render_aside')) : - /** - * Page-owned single aside (not a generic sidebar prepend hack). - * - * @param array $ctx Single context. - */ - function aksrt_single_render_aside(array $ctx): void { - if (empty($ctx['show_aside']) || wp_is_mobile()) { - return; - } - ?> - - - -
- - -
- -
@@ -92,6 +85,14 @@ while (have_posts()) : + + + +