diff --git a/assets/css/frontend/widget-batch5.css b/assets/css/frontend/widget-batch5.css index 6d0a9e8c..a51c6701 100644 --- a/assets/css/frontend/widget-batch5.css +++ b/assets/css/frontend/widget-batch5.css @@ -1303,3 +1303,132 @@ .aksrt-faq__main { grid-template-columns: 1fr; } .aksrt-faq__a { padding-left: 14px; } } + +/* ---- batch12: video shell + bookmark links styles + product oneline swiper ---- */ +.aksrt-video-widget { + position: relative; + width: 100%; + overflow: hidden; + border-radius: 10px; + background: #000; +} +.aksrt-video-widget.radius8 { border-radius: 10px; } +.aksrt-video-widget__frame, +.aksrt-video-widget__player, +.aksrt-video-widget .aksrt-video { + position: absolute; + inset: 0; + width: 100%; + height: 100%; +} +.aksrt-video-widget__frame { + border: 0; + display: block; +} +.aksrt-video-widget.controller-hide .aksrt-video video::-webkit-media-controls { + opacity: 0; + transition: opacity .2s ease; +} +.aksrt-video-widget.controller-hide:hover .aksrt-video video::-webkit-media-controls { + opacity: 1; +} + +.aksrt-bookmark-links.links-box { + display: flex; + flex-wrap: wrap; + gap: 12px; +} +.aksrt-bookmark-links.style-card .author-minicard, +.aksrt-bookmark-links.style-bigcard .author-minicard { + flex: 1 1 calc(50% - 12px); + min-width: 140px; + background: var(--surface-2, #f8fafc); + border: 1px solid var(--color-line, #e5e7eb); + padding: 12px; + box-sizing: border-box; +} +.aksrt-bookmark-links.style-bigcard .author-minicard { + flex: 1 1 100%; + text-align: center; +} +.aksrt-bookmark-links .avatar-img img, +.aksrt-bookmark-links .link-img img { + width: 42px; + height: 42px; + border-radius: 50%; + object-fit: cover; +} +.aksrt-bookmark-links.style-bigcard .avatar-img img { + width: 64px; + height: 64px; +} +.aksrt-bookmark-links.style-image { + display: flex; + flex-wrap: wrap; + gap: 10px; +} +.aksrt-bookmark-links.style-image .link-only-img img { + width: 48px; + height: 48px; + border-radius: 10px; + object-fit: cover; +} +.aksrt-bookmark-links.style-simple { + display: block; + line-height: 1.9; + font-size: 13px; +} +.aksrt-bookmark-links.style-simple a { + color: inherit; + text-decoration: none; + margin-right: 8px; +} +.aksrt-bookmark-links.style-simple a:hover { + color: var(--color-primary, #3b82f6); +} +.aksrt-bookmark-links.has-box { + padding: 12px; + border: 1px solid var(--color-line, #e5e7eb); + border-radius: 12px; + background: var(--surface-1, #fff); +} + +.aksrt-product-oneline-swiper { + position: relative; + overflow: hidden; + padding: 0 28px 4px; +} +.aksrt-product-oneline-swiper .swiper-wrapper { + display: flex; +} +.aksrt-product-oneline-swiper .swiper-slide { + width: auto; + max-width: 46%; + min-width: 150px; + height: auto; +} +.aksrt-product-oneline-swiper .aksrt-product-card { + height: 100%; +} +.aksrt-product-oneline-swiper .swiper-button-prev, +.aksrt-product-oneline-swiper .swiper-button-next { + width: 28px; + height: 28px; + margin-top: 0; + top: 42%; + border-radius: 50%; + background: var(--surface-1, #fff); + border: 1px solid var(--color-line, #e5e7eb); + color: var(--color-ink, #111); + box-shadow: 0 2px 8px rgba(0,0,0,.06); +} +.aksrt-product-oneline-swiper .swiper-button-prev:after, +.aksrt-product-oneline-swiper .swiper-button-next:after { + font-size: 12px; + font-weight: 700; +} +.aksrt-product-oneline-swiper .swiper-button-prev { left: 0; } +.aksrt-product-oneline-swiper .swiper-button-next { right: 0; } +.aksrt-product-widget--oneline .aksrt-product-widget__grid { + /* legacy flex fallback if swiper unavailable */ +} diff --git a/assets/js/video-player.js b/assets/js/video-player.js index fe52c533..8f0e461f 100644 --- a/assets/js/video-player.js +++ b/assets/js/video-player.js @@ -65,6 +65,8 @@ this.poster = this.el.dataset.poster || ''; this.type = this.el.dataset.type || detectType(this.src); this.autoplay = this.el.dataset.autoplay === 'true'; + this.loop = this.el.dataset.loop === 'true'; + this.muted = this.el.dataset.muted === 'true' || this.autoplay; this.init(); } @@ -76,8 +78,10 @@ this.video.controls = true; this.video.playsInline = true; this.video.preload = this.autoplay ? 'auto' : 'metadata'; + if (this.loop) this.video.loop = true; + if (this.muted) this.video.muted = true; if (this.poster) this.video.poster = this.poster; - this.video.style.cssText = 'display:block;width:100%;height:auto;max-height:70vh;'; + this.video.style.cssText = 'display:block;width:100%;height:100%;object-fit:contain;max-height:none;'; // Play overlay this.overlay = document.createElement('div'); diff --git a/src/AKSRT/Widgets/WidgetBookmarkLinks.php b/src/AKSRT/Widgets/WidgetBookmarkLinks.php index e3d900e0..ad69399c 100644 --- a/src/AKSRT/Widgets/WidgetBookmarkLinks.php +++ b/src/AKSRT/Widgets/WidgetBookmarkLinks.php @@ -1,6 +1,6 @@ esc_html__('WordPress 链接(书签)列表,适合友链/导航。', 'aksrt'), + 'description' => esc_html__('WordPress 链接(书签)列表:card / bigcard / image / simple。', 'aksrt'), 'classname' => 'widget_aksrt_bookmark_links', ] ); @@ -30,12 +30,12 @@ class WidgetBookmarkLinks extends \WP_Widget { } $order = strtoupper((string) ($instance['links_order'] ?? 'ASC')) === 'DESC' ? 'DESC' : 'ASC'; $type = sanitize_key((string) ($instance['type'] ?? 'card')); - if (!in_array($type, ['card', 'image', 'simple'], true)) { + if (!in_array($type, ['card', 'bigcard', 'image', 'simple'], true)) { $type = 'card'; } $go_link = !empty($instance['go_link']); $blank = !isset($instance['blank']) || !empty($instance['blank']); - $nofollow = !empty($instance['nofollow']); + $nofollow = !isset($instance['nofollow']) || !empty($instance['nofollow']); $show_box = !empty($instance['show_box']); $bm_args = [ @@ -49,6 +49,13 @@ class WidgetBookmarkLinks extends \WP_Widget { } $bookmarks = get_bookmarks($bm_args); if (!$bookmarks) { + if (current_user_can('manage_options')) { + echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo function_exists('aksrt_get_widget_null') + ? aksrt_get_widget_null(__('暂无链接,请在「链接」中添加', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + : '

' . esc_html__('暂无链接', 'aksrt') . '

'; + echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } return; } @@ -58,37 +65,22 @@ class WidgetBookmarkLinks extends \WP_Widget { echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } - $wrap = 'aksrt-bookmark-links style-' . $type . ($show_box ? ' has-box' : ''); + $wrap = 'aksrt-bookmark-links links-box style-' . $type . ($show_box ? ' has-box' : ''); echo '
'; - foreach ($bookmarks as $b) { - $url = (string) $b->link_url; - if ($url !== '' && $go_link && function_exists('aksrt_go_link')) { - $url = aksrt_go_link($url, true); + if (function_exists('aksrt_links_box')) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo aksrt_links_box($bookmarks, $type, $nofollow, $go_link, $blank); + } else { + // Minimal fallback. + foreach ($bookmarks as $b) { + $url = (string) $b->link_url; + if ($url !== '' && $go_link && function_exists('aksrt_go_link')) { + $url = aksrt_go_link($url, true); + } + echo ''; + echo esc_html((string) $b->link_name); + echo ''; } - $rel = []; - if ($nofollow) { - $rel[] = 'nofollow'; - } - if ($blank) { - $rel[] = 'noopener'; - $rel[] = 'noreferrer'; - } - $rel_attr = $rel ? ' rel="' . esc_attr(implode(' ', $rel)) . '"' : ''; - $tgt = $blank ? ' target="_blank"' : ''; - $img = (string) $b->link_image; - $name = (string) $b->link_name; - $desc = (string) $b->link_description; - - echo ''; - if ($type !== 'simple' && $img !== '') { - echo ''; - } - echo ''; - echo '' . esc_html($name) . ''; - if ($type === 'card' && $desc !== '') { - echo '' . esc_html($desc) . ''; - } - echo ''; } echo '
'; @@ -116,6 +108,7 @@ class WidgetBookmarkLinks extends \WP_Widget {

-