This commit is contained in:
ken 2026-08-21 17:36:39 +08:00
parent 20ae68e7e8
commit ea0f9862d3
29 changed files with 115 additions and 169 deletions

View File

@ -3692,5 +3692,17 @@ $(document).ready(function () {
// 比 fixAccessibilityAll 的 800ms 晚,確保最後執行
setTimeout(fixGalleryViewLinkA11y, 2000);
});
//公告活動公告tabindex
$(function() {
function removeAnncItemTabindex() {
setTimeout(function() {
$('.widget-announcement-4 .w-annc__item, .event-news-4 .w-annc__item')
.removeAttr('tabindex');
}, 500);
}
removeAnncItemTabindex();
});
}(jQuery, window));

View File

@ -1256,6 +1256,9 @@
}
// Widget-26
.widget-announcement-26 {
.widget-title-a {
display: inline!important;
}
.w-annc__item{
padding: 0;
}

View File

@ -8,7 +8,7 @@
// Member Index
// ## Gerneral styles for Index
.member-data-value-name a {
font-size: 1.5em;
font-size: 1.2em;
color: $theme-color-second;
font-weight: bold;
}

View File

@ -6,7 +6,7 @@
<li class="w-annc__item">
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__img-wrap ">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">

View File

@ -28,7 +28,7 @@
<div class="w-annc__item_inner">
<a href="{{link_to_show}}" class="widget-title-a">
<div class="w-annc__img-wrap bullseye" style="position:relative">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap">

View File

@ -22,7 +22,7 @@
<div class="w-annc__item">
<div class="w-annc__img-wrap">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap">
<div class="w-annc__meta">

View File

@ -7,7 +7,7 @@
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="widget-title-a-inner">
<div class="w-annc__img-wrap col-sm-4">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap col-sm-8">
<div class="w-annc__meta">

View File

@ -10,7 +10,7 @@
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__item_inner">
<div class="w-annc__img-wrap bullseye" >
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap card">

View File

@ -29,7 +29,7 @@
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__item_inner">
<div class="w-annc__img-wrap bullseye" >
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap card">

View File

@ -6,7 +6,7 @@
<li class="w-annc__item">
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__img-wrap ">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">

View File

@ -9,7 +9,7 @@
<li class="w-annc__item col-md-4">
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__img-wrap bullseye" >
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap card">

View File

@ -6,7 +6,7 @@
<li class="w-annc__item">
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__img-wrap ">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap card">
<div class="w-annc__meta">
@ -48,7 +48,6 @@
// li 撐滿 grid 格子
display: flex;
flex-direction: column;
overflow: hidden;
}
// a 撐滿 li

View File

@ -23,7 +23,7 @@
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
<div class="w-annc__img-wrap col-sm-4">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
</a>

View File

@ -5,7 +5,7 @@
<ul class="w-annc__list" data-level="0" data-list="custom_announcements">
<li class="w-annc__item">
<div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">

View File

@ -12,7 +12,7 @@
<ul class="w-annc__list row" data-level="0" data-list="custom_announcements">
<li class="w-annc__item col-md-4">
<div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap">
<div class="w-annc__meta">

View File

@ -27,7 +27,7 @@
<div class="w-annc__item">
<div class="w-annc__img-wrap">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap">
<div class="w-annc__meta">

View File

@ -9,7 +9,7 @@
<li class="w-annc__item col-md-4">
<div class="w-annc__img-wrap">
<a href="{{link_to_show}}" title="{{title}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</a>
</div>
<div class="w-annc__content-wrap">

View File

@ -5,7 +5,7 @@
<ul class="w-annc__list" data-level="0" data-list="custom_announcements">
<li class="w-annc__item row">
<div class="w-annc__img-wrap col-sm-4 bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap col-sm-8">
<div class="w-annc__meta">

View File

@ -24,7 +24,7 @@
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
<div class="w-annc__img-wrap col-sm-4 bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
</li>
</ul>

View File

@ -8,7 +8,7 @@
<ul class="w-annc__list row" data-level="0" data-list="custom_announcements">
<li class="w-annc__item col-md-4">
<div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap">
<div class="w-annc__meta">

View File

@ -5,7 +5,7 @@
<ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item">
<div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">

View File

@ -7,7 +7,7 @@
</div>
<div style="position: absolute;top: 50%;width:100%; z-index: 101;">
<div style="">
<button id="prev-{{subpart-id}}" class="btn-left" title = "<%= (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" %>" style="float: left;height: 2.5em; width: 2.5em;background: border: 0;background-size: contain;position: absolute;transition:.3s; left: 0.6%;color: #ffffff;
<button id="prev-{{subpart-id}}" class="btn-left" title = "<%= (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" %>" style="float: left;height: 2.5em; width: 2.5em;border: 0;background-size: contain;position: absolute;transition:.3s; left: 0.6%;color: #ffffff;
background: rgba(0, 0, 0, 0.2);
border-radius: 50%;
border: none; z-index: 2;"><i class="fa fa-angle-left prev-button" aria-hidden="true" style="font-size: 1.5rem;"></i><span style="display: none;"><%= (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" %></span></button>
@ -18,17 +18,18 @@
</div>
</div>
<ul class="w-annc__list row cycle-slideshow" data-level="0" data-list="event_news" data-cycle-fx="carousel"
data-cycle-carousel-rwd-json="{767: 1}"
data-cycle-timeout="0"
data-cycle-carousel-visible="3"
data-cycle-carousel-fluid="true"
data-cycle-next="#next-{{subpart-id}}"
data-cycle-prev="#prev-{{subpart-id}}"s
data-cycle-prev="#prev-{{subpart-id}}"
data-cycle-slides=".w-annc__item" >
<li class="w-annc__item " >
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__item_inner">
<a href="{{link_to_show}}" class="widget-title-a">
<div class="w-annc__img-wrap bullseye" style="position:relative">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap">
@ -50,10 +51,23 @@
</h4>
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
</div>
</a>
</div>
</li>
</ul>
</div>
<script src="//code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
<style type="text/css">
.w-annc__item_inner{
cursor: pointer;
}
.widget-title-a {
display: block;
}
[data-subpart-id="{{subpart-id}}"] .bullseye{
overflow: hidden;
}
</style>

View File

@ -6,7 +6,7 @@
<li class="w-annc__item row">
<div class="w-annc__img-wrap col-sm-4 bullseye">
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</a>
</div>
<div class="w-annc__content-wrap col-sm-8">

View File

@ -10,7 +10,7 @@
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__item_inner">
<div class="w-annc__img-wrap bullseye" >
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap card">

View File

@ -1,4 +1,4 @@
<div class="w-annc widget-announcement-4 event-news-21">
<div class="w-annc widget-announcement-21 event-news-21">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
@ -18,7 +18,7 @@
</div>
</div>
<ul class="w-annc__list row cycle-slideshow" data-level="0" data-list="event_news" data-cycle-fx="carousel"
data-cycle-carousel-rwd-json="{767: 1}"
data-cycle-carousel-rwd-json="{767: 1}"
data-cycle-timeout="0"
data-cycle-carousel-visible="3"
data-cycle-carousel-fluid="true"
@ -29,7 +29,7 @@
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" title="{{widget-title}}" class="widget-title-a">
<div class="w-annc__item_inner">
<div class="w-annc__img-wrap bullseye" >
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap card">

View File

@ -21,7 +21,7 @@
<li class="w-annc__item">
<a href="{{link_to_show}}" aria-label="前往{{widget-title}}" class="widget-title-a">
<div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
<div class="w-annc__content-wrap">
<div class="w-annc__meta">
@ -130,7 +130,7 @@
num=1;
}
var flag=false;
$('.btn-left').click(function(){
$('[data-subpart-id="{{subpart-id}}"] .btn-left, #prev-{{subpart-id}}').click(function(){
if(!flag){
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
var ul_length = uls.length;
@ -148,7 +148,7 @@
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list.active').eq(0).effect("slide", { direction: "left", mode: 'show', duration: 500},function(){flag=false;});
};
});
$('.btn-right').click(function(){
$('[data-subpart-id="{{subpart-id}}"] .btn-right, #next-{{subpart-id}}').click(function(){
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
if(!flag){
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();

View File

@ -24,7 +24,7 @@
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
<div class="w-annc__img-wrap col-sm-4 bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}">
</div>
</li>
</ul>

View File

@ -1,15 +1,16 @@
<div class="w-annc event-news-4">
<div class="w-annc__more-wrap clearfix">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= t("event_news.more") %></a>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
</div>
<ul class="w-annc__list row" data-level="0" data-list="event_news">
<li class="w-annc__item col-md-4" data-href="{{link_to_show}}" tabindex="0" role="link" title="{{title}}">
<li class="w-annc__item col-sm-4">
<div class="w-annc__item_inner">
<div class="w-annc__img-wrap" style="position:relative">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
<a href="{{link_to_show}}">
<div class="w-annc__img-wrap bullseye" style="position:relative">
<img class="w-annc__img" src="{{img_src}}" alt="" >
<div class="transitionfade"></div>
</div>
<div class="w-annc__content-wrap">
@ -31,146 +32,61 @@
</h4>
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
</a>
</div>
</li>
</ul>
</div>
<style type="text/css">
.w-annc__item_inner{
cursor: pointer;
}
.widget-title-a {
display: block;
}
[data-subpart-id="{{subpart-id}}"] .bullseye{
overflow: hidden;
}
/* 防止外部排版套件影響此 widget 的 li */
[data-subpart-id="{{subpart-id}}"] ul.w-annc__list > li {
position: static !important;
left: auto !important;
top: auto !important;
opacity: 1 !important;
transform: none !important;
transition-property: none !important;
}
[data-subpart-id="{{subpart-id}}"] ul.w-annc__list {
position: static !important;
height: auto !important;
}
</style>
<script>
$(document).ready(function(){
$(document).on('click', '.w-annc__item[data-href]', function(e){
var url = $(this).data('href');
var title = $(this).data('title');
if(!url) return;
var isExternal = !(url.indexOf('/') === 0);
if(isExternal){
window.open(url, '_blank', 'noopener noreferrer');
} else {
window.location.href = url;
}
});
});
$(document).ready(function(){
$(document).on('click keydown', '.w-annc__item[data-href]', function(e){
// 鍵盤只接受 Enter(13) 或 Space(32)
if(e.type === 'keydown' && e.which !== 13 && e.which !== 32) return;
// 避免 Space 捲動頁面
if(e.type === 'keydown' && e.which === 32) e.preventDefault();
var url = $(this).data('href');
if(!url) return;
var isExternal = !(url.indexOf('/') === 0);
if(isExternal){
window.open(url, '_blank', 'noopener noreferrer');
} else {
window.location.href = url;
}
});
});
$(document).ready(function() {
var $widget = $('.event-news-4');
function clearNavTabsFilterStyle_{{subpart-id}}(){
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list > li').each(function(){
var $li = $(this);
$li[0].style.removeProperty('width');
$li[0].style.removeProperty('position');
$li[0].style.removeProperty('left');
$li[0].style.removeProperty('top');
$li[0].style.removeProperty('float');
$li[0].style.removeProperty('opacity');
$li[0].style.removeProperty('transform');
$li[0].style.removeProperty('transition-property');
$li[0].style.removeProperty('transition-duration');
});
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').each(function(){
this.style.removeProperty('position');
this.style.removeProperty('height');
});
}
function getAnncItems($list) {
return $list.find('.w-annc__item[data-href]:visible');
}
// 若父層有 .nav_tabs_filter跳過 reorganize由頁籤自行控制顯示/隱藏)
var hasNavTabsFilter_{{subpart-id}} = (
$('[data-subpart-id=\"{{subpart-id}}\"]').parents('.nav_tabs_filter').length > 0 ||
$('[data-subpart-id=\"{{subpart-id}}\"]').closest('.tab-content, .tab_content, [data-pp]').length > 0 &&
$('.nav_tabs_filter').length > 0
);
function getActiveTabIndex($tabs) {
return $tabs.filter('.active').index($tabs.filter('.active').parent().find('.nav_tabs_filter li'));
// 更簡單的寫法:
}
$(window).resize(function(){
if(hasNavTabsFilter_{{subpart-id}}){
clearNavTabsFilterStyle_{{subpart-id}}();
}
})
// 1. 頁籤行為攔截
$(document).on('keydown', '.nav_tabs_filter li', function(e) {
if (e.which !== 9) return;
var $tabs = $widget.find('.nav_tabs_filter li');
var $list = $widget.find('.w-annc__list');
var index = $tabs.index(this);
if (index === -1) return;
if (!e.shiftKey) {
e.preventDefault();
e.stopImmediatePropagation();
$(this).click();
setTimeout(function() {
var $items = getAnncItems($list);
if ($items.length > 0) {
$items.first().focus();
} else {
if (index < $tabs.length - 1) {
$tabs.eq(index + 1).focus();
}
}
}, 150);
} else {
if (index > 0) {
e.preventDefault();
e.stopImmediatePropagation();
var $prevTab = $tabs.eq(index - 1);
$prevTab.click();
setTimeout(function() {
var $prevItems = getAnncItems($list);
if ($prevItems.length > 0) {
$prevItems.last().focus();
} else {
$prevTab.focus();
}
}, 150);
}
}
});
// 2. w-annc__item 行為攔截
$(document).on('keydown', '.w-annc__item[data-href]', function(e) {
if (e.which !== 9) return;
var $this = $(this);
if ($widget.find($this).length === 0) return;
var $list = $widget.find('.w-annc__list');
var $tabs = $widget.find('.nav_tabs_filter li');
// 關鍵修正:從 active tab 取得當前 index
var activeTabIdx = $tabs.index($tabs.filter('.active'));
var $allItems = getAnncItems($list);
var currentIdx = $allItems.index($this);
if (e.shiftKey) {
e.preventDefault();
e.stopImmediatePropagation();
if (currentIdx === 0) {
// 回到當前 active 的頁籤
$tabs.eq(activeTabIdx).focus();
} else {
$allItems.eq(currentIdx - 1).focus();
}
} else {
if (currentIdx === $allItems.length - 1) {
// 最後一筆 -> 跳到下一個頁籤
if (activeTabIdx < $tabs.length - 1) {
e.preventDefault();
e.stopImmediatePropagation();
$tabs.eq(activeTabIdx + 1).focus();
}
// 已是最後一個頁籤的最後一筆,自然流出
} else {
e.preventDefault();
e.stopImmediatePropagation();
$allItems.eq(currentIdx + 1).focus();
}
}
});
});
</script>
</script>

View File

@ -4,6 +4,7 @@
</h3>
<ul class="w-annc__list row" data-level="0" data-list="event_news">
<li class="w-annc__item">
<a href="{{link_to_show}}">
<div class="w-annc__content-wrap">
<div class="w-annc__meta">
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
@ -23,6 +24,7 @@
</h4>
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
</a>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">