This commit is contained in:
ken 2026-06-22 17:07:58 +08:00
parent 4e8adc697e
commit 27d35c6da1
2 changed files with 354 additions and 277 deletions

View File

@ -1,7 +1,36 @@
;(function($, win, undefined) { ;(function($, win, undefined) {
// ECMAScript 5 嚴格模式 // ECMAScript 5 嚴格模式
'use strict'; 'use strict';
$(function() {
var $signLanguageBox = $('.orbit-bar-search-sign-language');
var $headerNav = $('.header-nav');
var $target = $('.header-nav [accesskey="U"], .header-nav [accesskey="W"]');
// 移除 color: inherit !important
$target.each(function() {
$(this)[0].style.removeProperty('color');
});
function handleNavMove() {
var windowWidth = window.innerWidth;
if (windowWidth > 768) {
if ($signLanguageBox.length && $signLanguageBox.find('[accesskey="U"], [accesskey="W"]').length === 0) {
$signLanguageBox.prepend($target);
}
} else {
if ($headerNav.length && $headerNav.find('[accesskey="U"], [accesskey="W"]').length === 0) {
$headerNav.append($target);
}
}
}
handleNavMove();
$(window).on('resize', function() {
handleNavMove();
});
});
//header fixed在上方 //header fixed在上方
function initdata1() { function initdata1() {
if ( $('.homebanner').length != 0) { if ( $('.homebanner').length != 0) {
@ -278,7 +307,13 @@
$('.mobile-menu').toggleClass('active'); $('.mobile-menu').toggleClass('active');
$('body').toggleClass('noscroll'); $('body').toggleClass('noscroll');
$('.mobile-menu .navbar-toggle').removeClass('collapsed');
// ★ 修正:依據 active 狀態決定 collapsed 的加/移除
if ($('.mobile-menu').hasClass('active')) {
$('.mobile-menu .navbar-toggle').removeClass('collapsed'); // 打開 → 叉叉
} else {
$('.mobile-menu .navbar-toggle').addClass('collapsed'); // 關閉 → 三條橫線
}
// 關閉所有下拉選單 // 關閉所有下拉選單
$('.mobile-menu1 > ul, .mobile-menu2 > ul').slideUp(500); $('.mobile-menu1 > ul, .mobile-menu2 > ul').slideUp(500);
@ -292,6 +327,34 @@
} }
}); });
// ✅ Tab 鍵跳過 .mobile-menu 時,觸發收合邏輯
$(document).on('focusout', '.mobile-menu', function(e) {
setTimeout(function() {
var $newFocus = $(document.activeElement);
// 焦點在 body 時代表滑鼠正在點擊中,不處理
if ($newFocus.is('body')) return;
if ($('.mobile-menu').hasClass('active') && $newFocus.closest('.mobile-menu').length === 0) {
var $btn = $('.navbar-toggle').first();
if ($btn.attr('data-bs-toggle')) {
var target = $btn.attr('data-bs-target');
var bsCollapse = window.bootstrap && bootstrap.Collapse.getInstance($(target)[0]);
if (bsCollapse) bsCollapse.hide();
$('.mobile-menu').removeClass('active');
$('body').removeClass('noscroll');
$('.mobile-menu .navbar-toggle').addClass('collapsed');
$('.mobile-menu1 > ul, .mobile-menu2 > ul').slideUp(500);
$('.mobile-menu1 > .menu-drop, .mobile-menu2 > .menu-drop').removeClass('opened');
} else {
$btn.trigger('click');
}
}
}, 50);
});
$('.mobile-menu1 > .menu-drop').click(function(){ $('.mobile-menu1 > .menu-drop').click(function(){
var $that = $(this); var $that = $(this);
var opencheck1 = $that.hasClass('opened'); var opencheck1 = $that.hasClass('opened');
@ -760,6 +823,14 @@
$(document).ready(function() { $(document).ready(function() {
removeEmptyTitles(); removeEmptyTitles();
}); });
// $(".w-annc__img-wrap a").each(function () {
// var $this = $(this);
// // 確保 <a> 內沒有文字節點 (避免重複添加)
// if ($this.text().trim() === "") {
// $this.append('<span class="sr-only">公告圖片</span>');
// }
// });
$(".widget-link__widget-title").each(function () { $(".widget-link__widget-title").each(function () {
if ($(this).text().trim() === "") { if ($(this).text().trim() === "") {
$(this).append('<span class="sr-only">公告標題</span>'); $(this).append('<span class="sr-only">公告標題</span>');
@ -874,224 +945,247 @@
setTimeout(fixImageAccessibility, 500); setTimeout(fixImageAccessibility, 500);
}); });
// 有連結目的之所有a標籤的無障礙處理 // 有連結目的之所有a標籤的無障礙處理
$(function() { $(function() {
/** // Bootstrap 會把原始 title 搬到 data-bs-original-title先還原回來
* 全站無障礙 AA 級補強 (整合 HM1240400C HM1240401C 規範) $('a[data-bs-original-title]').each(function() {
*/ var $a = $(this);
function fixAccessibilityAll() { var originalTitle = $a.attr('data-bs-original-title');
// --- 0. 環境與語言偵測 --- if (originalTitle && originalTitle.trim() !== '') {
//1200ms 後執行(確保所有其他 function 執行完畢後才處理) $a.attr('title', originalTitle);
//Part 1修正語言選單按鈕 }
//Part 2掃描所有 <a> });
//├─ 排除 navbar-brand、javascript: 連結
//├─ 空連結 → 隱藏
//├─ 文字是路徑/空 → 補隱藏 span
//├─ 圖片+文字共存 → 圖片 alt 清空
//├─ 無 title → 自動產出 title
//├─ 有 title 但與連結文字重複 → 只保留開窗提示
//├─ 有 title 出現空括號 () → 清除並補上正確開窗提示
//└─ 移除 aria-label
var urlParams = new URLSearchParams(window.location.search);
var isEditMode = urlParams.get('editmode') === 'on';
var pageLang = $('html').attr('lang') || 'zh-Hant'; /**
var isEn = pageLang.toLowerCase().startsWith('en'); * 全站無障礙 AA 級補強 (整合 HM1240400C HM1240401C 規範)
*/
function fixAccessibilityAll() {
// --- 0. 環境與語言偵測 ---
//1200ms 後執行(確保所有其他 function 執行完畢後才處理)
//Part 1修正語言選單按鈕
//Part 2掃描所有 <a>
//├─ 排除 navbar-brand、javascript: 連結
//├─ 空連結 → 隱藏
//├─ 文字是路徑/空 → 補隱藏 span
//├─ 圖片+文字共存 → 圖片 alt 清空
//├─ 無 title → 自動產出 title
//├─ 有 title 但與連結文字或圖片 alt 重複 → 只保留開窗提示
//├─ 有 title 出現空括號 () → 清除並補上正確開窗提示
//└─ 移除 aria-label
var urlParams = new URLSearchParams(window.location.search);
var isEditMode = urlParams.get('editmode') === 'on';
var i18n = { var pageLang = $('html').attr('lang') || 'zh-Hant';
langBtn: isEn ? 'Open language menu in this window' : '在本視窗開啟語言選單', var isEn = pageLang.toLowerCase().startsWith('en');
newWin: isEn ? 'Open in new window' : '在新視窗開啟',
selfWin: isEn ? 'Open in this window' : '在本視窗開啟',
link: isEn ? 'Link' : '連結',
openImg: isEn ? 'Open image' : '開啟圖片內容',
sort: isEn ? 'Sort' : '排序'
};
// --- Part 1: 語言選單修正 --- var i18n = {
var $langBtn = $('#languagebutton'); langBtn: isEn ? 'Open language menu in this window' : '在本視窗開啟語言選單',
if ($langBtn.length > 0) { newWin: isEn ? 'Open in new window' : '在新視窗開啟',
$langBtn.attr('title', i18n.langBtn); selfWin: isEn ? 'Open in this window' : '在本視窗開啟',
$langBtn.removeAttr('aria-label'); link: isEn ? 'Link' : '連結',
openImg: isEn ? 'Open image' : '開啟圖片內容',
sort: isEn ? 'Sort' : '排序'
};
// --- Part 1: 語言選單修正 ---
var $langBtn = $('#languagebutton');
if ($langBtn.length > 0) {
$langBtn.attr('title', i18n.langBtn);
$langBtn.removeAttr('aria-label');
}
// --- Part 2: 全站連結與圖片邏輯處理 ---
$('a').each(function() {
var $a = $(this);
// 【條件 1排除特定 class】
if ($a.hasClass('navbar-brand')) {
return;
} }
// --- Part 2: 全站連結與圖片邏輯處理 --- var href = ($a.attr('href') || '').toLowerCase();
$('a').each(function() { if (!href || href.startsWith('javascript:')) return;
var $a = $(this);
// 【條件 1排除特定 class】 // --- 關鍵修正:先偵測是否有原始 title ---
if ($a.hasClass('navbar-brand')) { var rawTitleAttr = $a.attr('title');
return; var hasOriginalTitle = (typeof rawTitleAttr !== 'undefined' && rawTitleAttr !== false && rawTitleAttr.trim() !== "");
// 清理 &nbsp; 與 空白
var linkText = $a.text().replace(/\u00a0/g, '').trim();
var $img = $a.find('img');
var $icons = $a.find('i, svg');
var currentTitle = ($a.attr('title') || '').trim();
// ✅ 在 D 區塊清空 alt 之前,先記錄圖片原始 alt
var imgAltOriginal = $img.length > 0 ? ($img.attr('alt') || '').trim() : '';
// --- 【修正 1隱藏空連結】 ---
if (!isEditMode && linkText === "" && $img.length === 0 && $icons.length === 0) {
$a.hide();
return;
}
// --- 【修正 2文字語意防禦】 ---
if ((linkText === "" || linkText.startsWith('/') || linkText.includes('?')) && $img.length === 0 && $icons.length === 0) {
var accessibleText = i18n.link;
if (href.includes('sort')) {
accessibleText = i18n.sort;
} }
var href = ($a.attr('href') || '').toLowerCase(); var $span = $a.find('span');
if (!href || href.startsWith('javascript:')) return; if ($span.length > 0) {
$span.text(accessibleText);
// --- 關鍵修正:先偵測是否有原始 title --- } else {
var rawTitleAttr = $a.attr('title'); $a.append('<span>' + accessibleText + '</span>');
var hasOriginalTitle = (typeof rawTitleAttr !== 'undefined' && rawTitleAttr !== false && rawTitleAttr.trim() !== ""); $span = $a.find('span').last();
// 清理 &nbsp; 與 空白
var linkText = $a.text().replace(/\u00a0/g, '').trim();
var $img = $a.find('img');
var $icons = $a.find('i, svg');
var currentTitle = ($a.attr('title') || '').trim();
// --- 【修正 1隱藏空連結】 ---
if (!isEditMode && linkText === "" && $img.length === 0 && $icons.length === 0) {
$a.hide();
return;
} }
// --- 【修正 2文字語意防禦】 --- $span.css({
if ((linkText === "" || linkText.startsWith('/') || linkText.includes('?')) && $img.length === 0 && $icons.length === 0) { 'display': 'inline-block', 'position': 'absolute', 'width': '1px', 'height': '1px',
var accessibleText = i18n.link; 'padding': '0', 'margin': '-1px', 'overflow': 'hidden', 'clip': 'rect(0, 0, 0, 0)',
if (href.includes('sort')) { 'white-space': 'nowrap', 'border': '0'
accessibleText = i18n.sort; });
} linkText = accessibleText;
}
var $span = $a.find('span'); // A. 視窗動作規範
if ($span.length > 0) { var isNewWindow = ($a.attr('target') === '_blank');
$span.text(accessibleText); var windowTask = isNewWindow ? i18n.newWin : i18n.selfWin;
} else {
$a.append('<span>' + accessibleText + '</span>');
$span = $a.find('span').last();
}
$span.css({ // B. 偵測檔案類型
'display': 'inline-block', 'position': 'absolute', 'width': '1px', 'height': '1px', var fileExt = "";
'padding': '0', 'margin': '-1px', 'overflow': 'hidden', 'clip': 'rect(0, 0, 0, 0)', var fileMatches = href.match(/\.(pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odp|zip|rar|jpg|png|csv)$/);
'white-space': 'nowrap', 'border': '0' if (fileMatches) {
}); fileExt = fileMatches[1].toLowerCase();
linkText = accessibleText; }
// C. 智慧修正標題判斷
var hasBadSymbol = currentTitle.includes('()') ||
currentTitle.includes('Open in new window') ||
currentTitle.includes('/uploads/');
if (currentTitle.startsWith('/') || currentTitle.includes('?')) {
currentTitle = "";
}
// D. 處理【HM1240400C】圖片與文字毗鄰時替代文字只能有一份
if (($img.length > 0 || $icons.length > 0) && linkText !== "") {
if ($img.length > 0) {
$img.attr('alt', '');
} }
// A. 視窗動作規範 var $hiddenSpans = $a.find('span').filter(function() {
var isNewWindow = ($a.attr('target') === '_blank'); return $(this).css('display') === 'none' || $(this).attr('style')?.includes('display: none');
var windowTask = isNewWindow ? i18n.newWin : i18n.selfWin; });
// B. 偵測檔案類型 if ($hiddenSpans.length > 0) {
var fileExt = ""; $hiddenSpans.each(function() {
var fileMatches = href.match(/\.(pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odp|zip|rar|jpg|png|csv)$/); var $span = $(this);
if (fileMatches) { if ($span.text().includes('/uploads/')) {
fileExt = fileMatches[1].toLowerCase(); $span.text(i18n.openImg);
} }
// C. 智慧修正標題判斷 $span.css({
var hasBadSymbol = currentTitle.includes('()') || 'display': 'inline-block',
currentTitle.includes('Open in new window') || 'position': 'absolute',
currentTitle.includes('/uploads/'); 'width': '1px',
'height': '1px',
if (currentTitle.startsWith('/') || currentTitle.includes('?')) { 'padding': '0',
currentTitle = ""; 'margin': '-1px',
} 'overflow': 'hidden',
'clip': 'rect(0, 0, 0, 0)',
// D. 處理【HM1240400C】圖片與文字毗鄰時替代文字只能有一份 'white-space': 'nowrap',
if (($img.length > 0 || $icons.length > 0) && linkText !== "") { 'border': '0'
if ($img.length > 0) {
$img.attr('alt', '');
}
var $hiddenSpans = $a.find('span').filter(function() {
return $(this).css('display') === 'none' || $(this).attr('style')?.includes('display: none');
});
if ($hiddenSpans.length > 0) {
$hiddenSpans.each(function() {
var $span = $(this);
if ($span.text().includes('/uploads/')) {
$span.text(i18n.openImg);
}
$span.css({
'display': 'inline-block',
'position': 'absolute',
'width': '1px',
'height': '1px',
'padding': '0',
'margin': '-1px',
'overflow': 'hidden',
'clip': 'rect(0, 0, 0, 0)',
'white-space': 'nowrap',
'border': '0'
});
}); });
} });
} }
}
// E. 重新計算標題 (關鍵邏輯:若 hasOriginalTitle 為真,則不進入此區塊) // E. 重新計算標題 (關鍵邏輯:若 hasOriginalTitle 為真,則不進入此區塊)
if (!hasOriginalTitle) { if (!hasOriginalTitle) {
if (linkText === "" && $img.length > 0) { if (linkText === "" && $img.length > 0) {
var rawAlt = ($img.attr('alt') || '').trim(); var rawAlt = ($img.attr('alt') || '').trim();
var forbidden = ['這是一張圖片', '圖片', 'image', 'photo', '圖', '']; var forbidden = ['這是一張圖片', '圖片', 'image', 'photo', '圖', ''];
var imgAlt = forbidden.some(function(txt) { return rawAlt.toLowerCase() === txt; }) var imgAlt = forbidden.some(function(txt) { return rawAlt.toLowerCase() === txt; })
? ($a.attr('aria-label') || i18n.link) : rawAlt; ? ($a.attr('aria-label') || i18n.link) : rawAlt;
var fileInfo = fileExt ? '[' + fileExt.toUpperCase() + '] ' : ''; var fileInfo = fileExt ? '[' + fileExt.toUpperCase() + '] ' : '';
$a.attr('title', (fileInfo + imgAlt + " " + windowTask).trim()); $a.attr('title', (fileInfo + imgAlt + " " + windowTask).trim());
$img.attr('alt', imgAlt); $img.attr('alt', imgAlt);
} }
else if (linkText !== "") { else if (linkText !== "") {
if (fileExt !== "" || hasBadSymbol || currentTitle === "" || currentTitle.includes('/uploads/')) { if (fileExt !== "" || hasBadSymbol || currentTitle === "" || currentTitle.includes('/uploads/')) {
if (fileExt !== "") { if (fileExt !== "") {
$a.attr('title', linkText + " ." + fileExt + " " + windowTask); $a.attr('title', linkText + " ." + fileExt + " " + windowTask);
} else { } else {
$a.attr('title', windowTask); $a.attr('title', windowTask);
}
} }
} }
} }
}
// ✅ 符合 HM1240404Etitle 不應與連結文字重複 // ✅ 符合 HM1240404Etitle 不應與連結文字或圖片 alt 重複
if (hasOriginalTitle && currentTitle !== "") { if (hasOriginalTitle && currentTitle !== "") {
var titleWithoutWindow = currentTitle var titleWithoutWindow = currentTitle
.replace('(在本視窗開啟)', '') .replace('(在本視窗開啟)', '')
.replace('(在新視窗開啟)', '') .replace('(在新視窗開啟)', '')
.replace('Open in this window', '') .replace('Open in this window', '')
.replace('Open in new window', '') .replace('Open in new window', '')
.replace('另開新視窗前往', '') .replace('另開新視窗前往', '')
.replace('另開新視窗', '') .replace('另開新視窗', '')
.trim(); .trim();
if (titleWithoutWindow === linkText && linkText !== i18n.link) { // ✅ title 去掉開窗字串後,若與連結文字或圖片原始 alt 相同,則只保留開窗提示
$a.attr('title', windowTask); if (
} (titleWithoutWindow === linkText && linkText !== i18n.link) ||
(imgAltOriginal !== '' && titleWithoutWindow === imgAltOriginal)
// ✅ 最終清理:若 title 出現空括號 () 則移除並補上正確開窗提示 ) {
var finalTitle = ($a.attr('title') || '').trim(); $a.attr('title', windowTask);
if (finalTitle.includes('()')) {
finalTitle = finalTitle.replace(/\(\)/g, '').trim();
$a.attr('title', finalTitle + ' ' + windowTask);
}
} }
// F. 最終清理:移除冗餘 label避免螢幕閱讀器唸兩次 // ✅ 最終清理:若 title 出現空括號 () 則移除並補上正確開窗提示
$a.removeAttr('aria-label'); var finalTitle = ($a.attr('title') || '').trim();
}); if (finalTitle.includes('()')) {
finalTitle = finalTitle.replace(/\(\)/g, '').trim();
// ✅ G. 補強特定連結(須在迴圈外,因為 javascript: 連結被迴圈跳過) $a.attr('title', finalTitle + ' ' + windowTask);
$('.btn-o a').each(function() {
var $a = $(this);
if (!$a.attr('target')) {
$a.attr('target', '_blank');
$a.attr('rel', 'noopener noreferrer');
} }
$a.attr('title', isEn ? 'Share to X Open in new window' : '分享至 X 在新視窗開啟'); }
});
// F. 最終清理:移除冗餘 label避免螢幕閱讀器唸兩次
$a.removeAttr('aria-label');
});
// ✅ G. 補強特定連結(須在迴圈外,因為 javascript: 連結被迴圈跳過)
$('.btn-o a').each(function() {
var $a = $(this);
if (!$a.attr('target')) {
$a.attr('target', '_blank');
$a.attr('rel', 'noopener noreferrer');
}
$a.attr('title', isEn ? 'Share to X Open in new window' : '分享至 X 在新視窗開啟');
});
$('.print-button a').each(function() {
var $a = $(this);
if (!$a.attr('title') || $a.attr('title').trim().toLowerCase() === 'print') {
$a.attr('title', isEn ? 'Print this page' : '列印此頁');
}
});
$('a.i-archive__file-name').each(function () {
var $a = $(this);
var isNewWindow = ($a.attr('target') === '_blank');
$a.attr('title', isNewWindow ? i18n.newWin : i18n.selfWin);
});
}
// ✅ 延遲 800ms 確保所有其他 function 執行完畢後才處理
setTimeout(function() {
fixAccessibilityAll();
}, 800);
});
$('.print-button a').each(function() {
var $a = $(this);
if (!$a.attr('title') || $a.attr('title').trim().toLowerCase() === 'print') {
$a.attr('title', isEn ? 'Print this page' : '列印此頁');
}
});
}
// ✅ 延遲 800ms 確保所有其他 function 執行完畢後才處理
setTimeout(function() {
fixAccessibilityAll();
}, 800);
});
//圖示新增sr-only
$(function() { $(function() {
function smartFixIcons() { function smartFixIcons() {
var isEn = $('html').attr('lang') === 'en'; var isEn = $('html').attr('lang') === 'en';
@ -1173,8 +1267,8 @@
if($('.w-ba-banner__slide a').eq(i).attr('target') == "") if($('.w-ba-banner__slide a').eq(i).attr('target') == "")
$('.w-ba-banner__slide a').eq(i).removeAttr('target'); $('.w-ba-banner__slide a').eq(i).removeAttr('target');
}; };
// 幫無標題之iframe加上title // 幫無標題之iframe加上title
for(var i=0;i<$('iframe').length;i++) for(var i=0;i<$('iframe').length;i++)
if($('iframe').eq(i).attr('title')=="" || $('iframe').eq(i).attr('title')== undefined ){ if($('iframe').eq(i).attr('title')=="" || $('iframe').eq(i).attr('title')== undefined ){
if($('iframe').eq(i).attr('src').search('facebook') != -1 ) if($('iframe').eq(i).attr('src').search('facebook') != -1 )
$('iframe').eq(i).attr('title','facebook'); $('iframe').eq(i).attr('title','facebook');
@ -1267,14 +1361,13 @@
var selectedText = $(this).text().trim(); var selectedText = $(this).text().trim();
$(this).find('span').text(selectedText + '(已選取)'); $(this).find('span').text(selectedText + '(已選取)');
}); });
//jPlayer 控制項無障礙標籤補強
$(function() { $(function() {
/** /**
* jPlayer 控制項無障礙標籤補強 * jPlayer 控制項無障礙標籤補強
* 1. 修正重複且無意義的 title="按鈕" * 1. 修正重複且無意義的 title="按鈕"
* 2. 解決鍵盤焦點無法進入隱藏介面的問題 * 2. 解決鍵盤焦點無法進入隱藏介面的問題
*/ */
function fixJPlayerAccessibility() { function fixJPlayerAccessibility() {
var $playerContainer = $('#jp_container_video_file'); var $playerContainer = $('#jp_container_video_file');
// --- A. 修正按鈕標題 (解決語義問題) --- // --- A. 修正按鈕標題 (解決語義問題) ---
@ -1328,7 +1421,7 @@
} }
`) `)
.appendTo("head"); .appendTo("head");
} }
// 執行補強(設定延遲確保 jPlayer 已生成 DOM // 執行補強(設定延遲確保 jPlayer 已生成 DOM
setTimeout(fixJPlayerAccessibility, 500); setTimeout(fixJPlayerAccessibility, 500);
@ -1543,86 +1636,60 @@
setTimeout(fixEmptyHref, 500); setTimeout(fixEmptyHref, 500);
}); });
//頁籤無障礙 //頁籤無障礙
$(function () { $(function() {
function fixTabAccessibility() { /**
var $tabNav = $('.tab_nav'); * 頁籤導覽 (Tab Navigation) 無障礙補強
var $tabs = $tabNav.find('li'); // ✅ 你的 HTML 是 li不是 .filter_tab * 1. 容器加入 role="tablist"
* 2. 項目加入 role="tab"
* 3. 動態切換 aria-selected="true/false"
* 4. 確保 Enter 鍵可以觸發切換 (針對 tabindex="0" 的優化)
*/
function fixTabAccessibility() {
var $tabNav = $('.tab_nav');
var $tabs = $tabNav.find('.filter_tab');
// --- 1. 初始化結構語意 --- // --- 1. 初始化結構語意 ---
$tabNav.attr('role', 'tablist'); $tabNav.attr('role', 'tablist');
$tabs.each(function () { $tabs.each(function() {
var $this = $(this); var $this = $(this);
var isActive = $this.hasClass('active'); var isActive = $this.hasClass('active');
$this.attr({ // 加入頁籤角色與選取狀態
'role': 'tab', $this.attr({
'aria-selected': isActive ? 'true' : 'false', 'role': 'tab',
'tabindex': isActive ? '0' : '-1' // ✅ 只有 active 的可以被 Tab 聚焦 'aria-selected': isActive ? 'true' : 'false'
}); });
var tabName = $this.text().trim(); // 修正 Title讓使用者知道這是切換頁籤
$this.attr('title', '切換至 ' + tabName); var tabName = $this.text().trim();
}); $this.attr('title', '切換至 ' + tabName);
});
// --- 2. 點擊事件:更新 aria-selected 與 tabindex --- // --- 2. 監聽切換事件 (點擊或鍵盤) ---
$tabs.on('click', function () { // 假設原本已有切換邏輯,我們在此「補強」屬性的變更
var $clickedTab = $(this); $tabs.on('click', function() {
var $clickedTab = $(this);
$tabs.attr('aria-selected', 'false').attr('tabindex', '-1'); // 先將所有頁籤設為未選取
$clickedTab.attr('aria-selected', 'true').attr('tabindex', '0'); $tabs.attr('aria-selected', 'false');
});
// --- 3. 鍵盤操作補強 --- // 將當前點擊的頁籤設為已選取
$tabs.on('keydown', function (e) { $clickedTab.attr('aria-selected', 'true');
var $current = $(this); });
var currentIndex = $tabs.index($current);
var lastIndex = $tabs.length - 1;
var $target = null;
switch (e.which) { // --- 3. 鍵盤操作補強 (針對 tabindex="0" 的非按鈕元素) ---
case 13: // Enter $tabs.on('keydown', function(e) {
case 32: // Space // 當按下 Enter (13) 或 Space (32) 時觸發點擊
e.preventDefault(); if (e.which === 13 || e.which === 32) {
$current.trigger('click'); e.preventDefault();
break; $(this).trigger('click');
}
});
}
case 37: // ← 左方向鍵:移到前一個頁籤 // 延遲執行確保頁籤元件已渲染
case 38: // ↑ 上方向鍵 setTimeout(fixTabAccessibility, 500);
e.preventDefault();
$target = currentIndex > 0
? $tabs.eq(currentIndex - 1)
: $tabs.eq(lastIndex); // 到底了就循環到最後一個
break;
case 39: // → 右方向鍵:移到下一個頁籤
case 40: // ↓ 下方向鍵
e.preventDefault();
$target = currentIndex < lastIndex
? $tabs.eq(currentIndex + 1)
: $tabs.eq(0); // 到底了就循環到第一個
break;
case 36: // Home跳到第一個頁籤
e.preventDefault();
$target = $tabs.eq(0);
break;
case 35: // End跳到最後一個頁籤
e.preventDefault();
$target = $tabs.eq(lastIndex);
break;
}
// 移動焦點並觸發點擊切換
if ($target && $target.length) {
$tabs.attr('tabindex', '-1');
$target.attr('tabindex', '0').focus().trigger('click');
}
});
}
setTimeout(fixTabAccessibility, 500);
}); });
//移除 accesskey="W" 之後的 | 符號 //移除 accesskey="W" 之後的 | 符號
$(function() { $(function() {
@ -1993,7 +2060,14 @@
// if($('.show-announcement').hasClass('show-announcement')) { // if($('.show-announcement').hasClass('show-announcement')) {
// $('.').css('', ''); // $('.').css('', '');
// } // }
$(function() {
var $headerNav = $('.header-nav');
$headerNav.contents().each(function() {
if (this.nodeType === 3 && this.nodeValue.trim() === '|') {
$(this).remove();
}
});
});
if($('.s-annc').length){ if($('.s-annc').length){
$(".carousel_images h4").remove(); $(".carousel_images h4").remove();
$('.carousel_images').addClass('carousel_images2'); $('.carousel_images').addClass('carousel_images2');

View File

@ -3,6 +3,9 @@
@import "../initial"; @import "../initial";
@import "variables"; @import "variables";
.fa-classic, .fa-regular, .fa-solid, .far, .fas ,.fa{
font-family: var(--fa-style-family, "FontAwesome");
}
#orbit-bar .orbit-bar-inner > label:focus, #orbit-bar .orbit-bar-inner > label.focus{ #orbit-bar .orbit-bar-inner > label:focus, #orbit-bar .orbit-bar-inner > label.focus{
.orbit-bar-search-sign-language{ .orbit-bar-search-sign-language{
display: block display: block