This commit is contained in:
ken 2026-06-24 11:24:41 +08:00
parent c13b02c358
commit c30675cc14
18 changed files with 550 additions and 185 deletions

View File

@ -760,13 +760,13 @@
$(document).ready(function() {
removeEmptyTitles();
});
$(".w-annc__img-wrap a").each(function () {
var $this = $(this);
// 確保 <a> 內沒有文字節點 (避免重複添加)
if ($this.text().trim() === "") {
$this.append('<span class="sr-only">公告圖片</span>');
}
});
// $(".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 () {
if ($(this).text().trim() === "") {
$(this).append('<span class="sr-only">公告標題</span>');
@ -835,7 +835,7 @@
var isLinkImage = $parentA.length > 0 && $parentA.text().replace(/\u00a0/g, '').trim() === "";
// --- 1. 處理「裝飾性圖片」標註 ---
if (currentAlt === "裝飾圖片" || currentTitle === "裝飾圖片") {
if (currentAlt === "announcement image" || currentAlt === "裝飾圖片" || currentTitle === "裝飾圖片") {
$img.attr('alt', '');
$img.removeAttr('title');
return;
@ -883,10 +883,10 @@
// 有連結目的之所有a標籤的無障礙處理
$(function() {
/**
* 全站無障礙 AA 級補強 (多語系偵測版)
* 全站無障礙 AA 級補強 (整合 HM1240400C HM1240401C 規範)
*/
function fixAccessibilityAll() {
// --- 0. 網址參數判斷 ---
// --- 0. 環境與語言偵測 ---
var urlParams = new URLSearchParams(window.location.search);
var isEditMode = urlParams.get('editmode') === 'on';
@ -897,7 +897,9 @@
langBtn: isEn ? 'Open language menu in this window' : '在本視窗開啟語言選單',
newWin: isEn ? '(Open in new window)' : '(在新視窗開啟)',
selfWin: isEn ? '(Open in this window)' : '(在本視窗開啟)',
link: isEn ? 'Link' : '連結'
link: isEn ? 'Link' : '連結',
openImg: isEn ? 'Open image' : '開啟圖片內容',
sort: isEn ? 'Sort' : '排序'
};
// --- Part 1: 語言選單修正 ---
@ -907,22 +909,62 @@
$langBtn.removeAttr('aria-label');
}
// --- Part 2: 全站連結處理 ---
// --- Part 2: 全站連結與圖片邏輯處理 ---
$('a').each(function() {
var $a = $(this);
// 【條件判斷:若 a 標籤的 class 等於或包含 navbar-brand則不執行此 function】
if ($a.hasClass('navbar-brand') || $a.hasClass('orbit-bar-logo')) {
return;
}
var href = ($a.attr('href') || '').toLowerCase();
if (!href || href.startsWith('javascript:')) return;
// 清理 &nbsp; 與 空白
var linkText = $a.text().replace(/\u00a0/g, '').trim();
var $img = $a.find('img');
var $icons = $a.find('i, svg'); // 偵測其他元素 (如 FontAwesome, SVG)
var currentTitle = ($a.attr('title') || '').trim();
// --- 【新增修正:隱藏空連結】 ---
// 若網址沒有 editmode=on 時,判定 a 裡面文字為空且沒有圖片,則隱藏
if (!isEditMode && linkText === "" && $img.length === 0) {
// --- 【修正 1隱藏空連結】 ---
if (!isEditMode && linkText === "" && $img.length === 0 && $icons.length === 0) {
$a.hide();
return; // 跳過後續處理
return;
}
// --- 【修正 2符合 HM1240401C 的文字與標題防禦】 ---
// 若連結文字為空、或文字內容為無效的 URL 路徑,自動補上語意文字
if (linkText === "" || linkText.startsWith('/') || linkText.includes('?')) {
var accessibleText = i18n.link; // 預設名稱
// 智慧判斷:若為排序連結,可顯示為「排序」
if (href.includes('sort')) {
accessibleText = i18n.sort;
}
var $span = $a.find('span');
if ($span.length > 0) {
$span.text(accessibleText);
} else {
$a.append('<span>' + accessibleText + '</span>');
$span = $a.find('span').last();
}
// 套用視覺隱藏但螢幕閱讀器可讀取之樣式
$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'
});
linkText = accessibleText; // 更新變數以便後續比對
}
// A. 視窗動作規範
@ -936,32 +978,69 @@
fileExt = fileMatches[1].toLowerCase();
}
// C. 智慧修正與標題補充
// C. 智慧修正標題 (移除冗餘資訊)
var hasBadSymbol = currentTitle.includes('()') ||
currentTitle.includes('另開新視窗') ||
currentTitle.includes('Open in new window');
currentTitle.includes('另開新視窗') ||
currentTitle.includes('Open in new window') ||
currentTitle.includes('/uploads/');
// 如果 title 是 URL視為壞標籤並重置
if (currentTitle.startsWith('/') || currentTitle.includes('?')) {
currentTitle = "";
}
// D. 處理【HM1240400C】圖片與文字毗鄰時替代文字只能有一份
if (($img.length > 0 || $icons.length > 0) && linkText !== "") {
if ($img.length > 0) {
// 強制圖片設為裝飾性
$img.attr('alt', '');
}
// 針對「視覺隱藏但存在於 DOM」的文字
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. 重新計算標題與替代文字 (針對不同情境)
if (linkText === "" && $img.length > 0) {
// 【純圖片連結】替代文字邏輯
var rawAlt = ($img.attr('alt') || '').trim();
var forbidden = ['這是一張圖片', '圖片', 'image', 'photo', '圖', ''];
var imgAlt = forbidden.some(function(txt) { return rawAlt.toLowerCase() === txt; })
? ($a.attr('aria-label') || i18n.link) : rawAlt;
var fileInfo = fileExt ? '[' + fileExt.toUpperCase() + '] ' : '';
// 確保具備標題與圖片 alt
$a.attr('title', (fileInfo + imgAlt + " " + windowTask).trim());
$img.attr('alt', imgAlt);
}
else if (linkText !== "") {
// 【有文字連結】
if (fileExt !== "" || hasBadSymbol || currentTitle === "") {
var isTag = $a.hasClass('label') || $a.hasClass('tag') || $a.find('[class*="tag"]').length > 0;
if (fileExt !== "" || hasBadSymbol || currentTitle === "" || currentTitle.includes('/uploads/')) {
if (fileExt !== "") {
$a.attr('title', linkText + " ." + fileExt + " " + windowTask);
} else if (linkText.length <= 6 || isTag) {
} else if (linkText.length <= 8) {
$a.attr('title', linkText + " " + windowTask);
} else {
$a.attr('title', windowTask);
@ -969,30 +1048,22 @@
}
}
// --- 修正後的 Part D 最終清理 ---
$a.removeAttr('aria-label');
// 只有當「真正可見的文字」存在時,才將圖片設為裝飾性
// 使用 clone() 移除隱藏元件後再計算文字,確保準確度
var visibleText = $a.clone().find(':hidden, style, script').remove().end().text().replace(/\u00a0/g, '').trim();
if (visibleText !== "" && $img.length > 0) {
$img.attr('alt', '');
} else {
// 如果文字是隱藏的 (如你的範例),則必須保留或補強圖片 alt
var rawAlt = ($img.attr('alt') || '').trim();
if (rawAlt === "") {
// 如果連圖片 alt 都沒寫,就從 a 的 title 抓
var cleanTitle = currentTitle.replace(/\(在本視窗開啟\)|\(在新視窗開啟\)/g, '').trim();
$img.attr('alt', cleanTitle || i18n.link);
}
// 【HM1240401C 補強】若連結包含其他多媒體內容 (如 i 標籤、SVG),需補齊 title 屬性
var hasOtherContent = ($img.length > 0 || $icons.length > 0);
if (hasOtherContent && currentTitle === "") {
var newTitle = linkText + " " + windowTask;
$a.attr('title', newTitle.trim());
}
// F. 最終清理:移除冗餘 label
$a.removeAttr('aria-label');
});
}
// 延遲執行確保 DOM 載入完成
setTimeout(function() {
fixAccessibilityAll();
}, 600);
}, 800);
});
// if (location.href.search('editmode=on') === -1) {
@ -1011,66 +1082,87 @@
// });
// });
// }
$(function() {
function smartFixIcons() {
$('i').each(function() {
var $icon = $(this);
var $parent = $icon.parent();
$(function() {
function smartFixIcons() {
var isEn = $('html').attr('lang') === 'en';
// 1. 基本安全:所有圖示先對螢幕閱讀器隱藏 (避免讀出 Unicode 亂碼)
$icon.attr('aria-hidden', 'true');
var labels = {
calendar : isEn ? 'Date: ' : '日期:',
user : isEn ? 'Author: ' : '發布者:',
tag : isEn ? 'Tag: ' : '標籤:',
clock : isEn ? 'Time: ' : '時間:',
location : isEn ? 'Location: ' : '地點:',
phone : isEn ? 'Phone: ' : '電話:',
envelope : isEn ? 'Email: ' : '信箱:',
folder : isEn ? 'Category: ' : '分類:',
eye : isEn ? 'Views: ' : '瀏覽次數:',
download : isEn ? 'Download: ' : '下載檔案:',
search : isEn ? 'Search' : '搜尋',
bars : isEn ? 'Menu' : '選單',
print : isEn ? 'Print this page': '列印此頁',
share : isEn ? 'Share' : '分享至社群',
close : isEn ? 'Close' : '關閉視窗'
};
// 2. 檢查:如果已經有 aria-label 或旁邊已有 sr-only就不重複處理
if ($icon.attr('aria-label') || $icon.next('.sr-only').length > 0 || $parent.find('.sr-only').length > 0) {
return;
}
$('i').each(function() {
var $icon = $(this);
var $parent = $icon.parent();
var cls = ($icon.attr('class') || '').toLowerCase();
var labelText = '';
// 1. 所有圖示先對螢幕閱讀器隱藏
$icon.attr('aria-hidden', 'true');
// --- 策略 A常見資訊型圖示 (自動識別內容意義) ---
if (cls.includes('calendar')) labelText = '日期:';
else if (cls.includes('user') || cls.includes('male')) labelText = '發布者:';
else if (cls.includes('tag')) labelText = '標籤:';
else if (cls.includes('clock') || cls.includes('time')) labelText = '時間:';
else if (cls.includes('map-marker') || cls.includes('location')) labelText = '地點:';
else if (cls.includes('phone')) labelText = '電話:';
else if (cls.includes('envelope') || cls.includes('mail')) labelText = '信箱:';
else if (cls.includes('folder')) labelText = '分類:';
else if (cls.includes('eye')) labelText = '瀏覽次數:';
else if (cls.includes('download')) labelText = '下載檔案:';
// --- 策略 B功能性按鈕 (如果 i 放在 <a> 或 <button> 裡面且容器沒文字) ---
var $container = $icon.closest('a, button');
if ($container.length > 0 && $container.text().trim() === "") {
// 如果容器裡面什麼字都沒有,這是一個「純圖示按鈕」
// 我們嘗試抓取容器的 title 作為 label
var btnTitle = $container.attr('title');
if (btnTitle) {
labelText = btnTitle;
} else if (cls.includes('search')) labelText = '搜尋';
else if (cls.includes('bars') || cls.includes('navicon')) labelText = '選單';
else if (cls.includes('print')) labelText = '列印此頁';
else if (cls.includes('share')) labelText = '分享至社群';
else if (cls.includes('close') || cls.includes('times')) labelText = '關閉視窗';
}
// 特判:.close-screen-btn 內的圖示,移除無關的 sr-only 並設正確 aria-label
if ($parent.hasClass('close-screen-btn')) {
$parent.find('.sr-only').remove();
$parent.attr('aria-label', '關閉公告視窗');
return;
}
// --- 3. 執行補強 ---
if (labelText !== '') {
// 如果是按鈕內部,用 aria-label 補強容器
if ($container.length > 0 && $container.text().trim() === "") {
$container.attr('aria-label', labelText);
} else {
// 如果是資訊列表,在 i 後面插入 sr-only
$icon.after('<span class="sr-only">' + labelText + '</span>');
}
}
});
}
// 2. 已有 aria-label 或 sr-only 就不重複處理
if ($icon.attr('aria-label') || $icon.next('.sr-only').length > 0 || $parent.find('.sr-only').length > 0) {
return;
}
// 延遲執行確保內容渲染完成
setTimeout(smartFixIcons, 500);
});
var cls = ($icon.attr('class') || '').toLowerCase();
var labelText = '';
// --- 策略 A常見資訊型圖示 ---
if (cls.includes('calendar')) labelText = labels.calendar;
else if (cls.includes('user') || cls.includes('male')) labelText = labels.user;
else if (cls.includes('tag')) labelText = labels.tag;
else if (cls.includes('clock') || cls.includes('time')) labelText = labels.clock;
else if (cls.includes('map-marker') || cls.includes('location')) labelText = labels.location;
else if (cls.includes('phone')) labelText = labels.phone;
else if (cls.includes('envelope') || cls.includes('mail')) labelText = labels.envelope;
else if (cls.includes('folder')) labelText = labels.folder;
else if (cls.includes('eye')) labelText = labels.eye;
else if (cls.includes('download')) labelText = labels.download;
// --- 策略 B功能性按鈕 ---
var $container = $icon.closest('a, button');
if ($container.length > 0 && $container.text().trim() === '') {
var btnTitle = $container.attr('title');
if (btnTitle) labelText = btnTitle;
else if (cls.includes('search')) labelText = labels.search;
else if (cls.includes('bars') || cls.includes('navicon')) labelText = labels.bars;
else if (cls.includes('print')) labelText = labels.print;
else if (cls.includes('share')) labelText = labels.share;
else if (cls.includes('close') || cls.includes('times')) labelText = labels.close;
}
// --- 3. 執行補強 ---
if (labelText !== '') {
if ($container.length > 0 && $container.text().trim() === '') {
$container.attr('aria-label', labelText);
} else {
$icon.after('<span class="sr-only">' + labelText + '</span>');
}
}
});
}
setTimeout(smartFixIcons, 500);
});
// 刪除banner-slide的空連結和空連結目標
for(var i=0;i<$('.w-ba-banner__slide a').length;i++){
if($('.w-ba-banner__slide a').eq(i).attr('href')=="")
@ -1393,35 +1485,35 @@
});
};
//公告頁籤
function annc_widget_nav() {
$('.tab_nav').nextAll().addClass('tab_content');
$('.tab_content').css("display","none");
$('.tab_content').eq(0).css('display', 'block');
// //公告頁籤
// function annc_widget_nav() {
// $('.tab_nav').nextAll().addClass('tab_content');
// $('.tab_content').css("display","none");
// $('.tab_content').eq(0).css('display', 'block');
var num = $('.tab_nav li').length;
$('.tab_content').eq(num).css('display', 'block');
$('.tab_content').eq(num).nextAll().css('display', 'block');
// var num = $('.tab_nav li').length;
// $('.tab_content').eq(num).css('display', 'block');
// $('.tab_content').eq(num).nextAll().css('display', 'block');
$('.tab_nav li').off('click').on('click',function() {
$('.tab_nav li').removeClass('active');
$(this).addClass('active');
var fa = $(this).index();
// $('.tab_nav li').off('click').on('click',function() {
// $('.tab_nav li').removeClass('active');
// $(this).addClass('active');
// var fa = $(this).index();
$('.tab_content').attr('style','');
$('.tab_content').css("display","none");
$('.tab_content').eq(fa).css('display','block');
var num = $('.tab_nav li').length;
$('.tab_content').eq(num).css('display', 'block');
$('.tab_content').eq(num).nextAll().css('display', 'block');
});
// $('.tab_content').attr('style','');
// $('.tab_content').css("display","none");
// $('.tab_content').eq(fa).css('display','block');
// var num = $('.tab_nav li').length;
// $('.tab_content').eq(num).css('display', 'block');
// $('.tab_content').eq(num).nextAll().css('display', 'block');
// });
var url = window.location.search;
if (url == "?editmode=on") {
$('.tab_content').css({'position': 'relative','display':'block'});
}
}
annc_widget_nav();
// var url = window.location.search;
// if (url == "?editmode=on") {
// $('.tab_content').css({'position': 'relative','display':'block'});
// }
// }
// annc_widget_nav();
//切換語言停留在同一頁
if(window.location.pathname!="/")
@ -1800,6 +1892,14 @@
// if($('.show-announcement').hasClass('show-announcement')) {
// $('.').css('', '');
// }
$(function() {
var $headerNav = $('.header-nav');
$headerNav.contents().each(function() {
if (this.nodeType === 3 && this.nodeValue.trim() === '|') {
$(this).remove();
}
});
});
if ($('.fatfooter').length === 0) {
$('.btn-fatfooter').hide();
};
@ -1967,11 +2067,15 @@
});
$(window).resize(function() {
if ($(window).width() <769) {
$('.modules-menu-level-0').after($('.header-nav'));
}else{
$('.navbar-header').before($('.header-nav'));
};
// if ($(window).width() <769) {
// $('.leftnav').append($('.header-nav'));
// }else{
// $('.leftnav').append($('.header-nav'));
// };
if ($(window).width() > 821) {
$('.form-horizontal').append($('.cancelbooking'));
@ -2117,22 +2221,108 @@ $(document).ready(function() {
// 2. 語言按鈕與手機版選單補強
$(function() {
function fixLanguageA11y() {
var isEn = document.documentElement.lang === 'en';
var correctTitle = isEn ? 'Open language menu' : '在本視窗開啟語言選單';
var $desktopBtn = $('#languagebutton');
var $langLi = $('#language-li');
var $langUl = $('#language-li ul');
// =============================================
// ✅ 新增 GN1210101E繁體中文 li 補上可聚焦 <a>
// 桌面版 + 手機版都處理
// =============================================
var $activeLis = $langUl.find('li.active')
.add($('#language-li-ul').find('li.active'));
$activeLis.each(function() {
var $li = $(this);
if ($li.find('a, button').length === 0) {
var activeText = $li.text().trim();
$li.html(
'<a href="javascript:;" ' +
'aria-current="true" ' +
'title="' + (isEn ? 'Current language' : '目前語言') + '" ' +
'tabindex="0">' +
activeText +
'</a>'
);
}
});
// =============================================
// Desktop 語言按鈕
// =============================================
if ($desktopBtn.length > 0) {
$desktopBtn.attr({ 'aria-expanded': 'false', 'role': 'button', 'aria-haspopup': 'true' });
$desktopBtn.attr({
'aria-expanded': 'false',
'role': 'button',
'aria-haspopup': 'true',
'title': correctTitle
});
$desktopBtn.removeAttr('aria-label');
function openLangMenu() {
$langUl.addClass('show');
$desktopBtn.attr('aria-expanded', 'true');
$('.orbit-bar-search-sign-language').addClass('show');
}
function closeLangMenu() {
$langUl.removeClass('show');
$desktopBtn.attr('aria-expanded', 'false');
}
// 原有focus 展開
$desktopBtn.on('focus', function() {
$(this).closest('#language-li').find('ul').addClass('show');
$(this).attr('aria-expanded', 'true');
$('.orbit-bar-search-sign-language').addClass('show');
openLangMenu();
});
// ✅ 新增 GN1210100EEnter / Space 切換、Escape 收合
$desktopBtn.on('keydown', function(e) {
if (e.which === 13 || e.which === 32) {
e.preventDefault();
$langUl.hasClass('show') ? closeLangMenu() : openLangMenu();
}
if (e.which === 27) {
closeLangMenu();
$desktopBtn.focus();
}
});
// 原有click 切換
$desktopBtn.on('click', function(e) {
e.preventDefault();
$langUl.hasClass('show') ? closeLangMenu() : openLangMenu();
});
// ✅ 新增:選單內 Escape 跳回按鈕
$langUl.find('a').on('keydown', function(e) {
if (e.which === 27) {
e.preventDefault();
closeLangMenu();
$desktopBtn.focus();
}
});
// 原有:焦點離開整個 language-li 時收合
$langLi.on('focusout', function() {
var $container = $(this);
setTimeout(function() {
if (!$container.is(':focus-within')) {
closeLangMenu();
}
}, 150);
});
}
var $mobileBtn = $('.mobile-button');
// =============================================
// 手機版選單補強(原有邏輯完整保留)
// =============================================
var $mobileBtn = $('.mobile-button');
if ($mobileBtn.length > 0) {
$mobileBtn.attr({ 'role': 'button', 'tabindex': '0', 'aria-haspopup': 'true', 'aria-expanded': 'false' });
$mobileBtn.on('focus', function() {
$(this).closest('li').find('ul').addClass('show');
$(this).attr('aria-expanded', 'true');
$(this).attr('aria-expanded', 'true');
});
$mobileBtn.on('keydown', function(e) {
if (e.which === 13 || e.which === 32) {
@ -2153,17 +2343,20 @@ $(function() {
});
}
// 強制鎖定 Title
// =============================================
// 原有MutationObserver 強制鎖定 title
// =============================================
var target = document.getElementById('languagebutton');
if (target) {
var isEn = document.documentElement.lang === 'en';
var correctTitle = isEn ? 'Open language menu' : '在本視窗開啟語言選單';
var observer = new MutationObserver(function() {
if (target.getAttribute('title') !== correctTitle) target.setAttribute('title', correctTitle);
if (target.getAttribute('title') !== correctTitle) {
target.setAttribute('title', correctTitle);
}
});
observer.observe(target, { attributes: true });
observer.observe(target, { attributes: true, attributeFilter: ['title'] });
}
}
setTimeout(fixLanguageA11y, 600);
});
// rwd左上選單無障礙
@ -2535,24 +2728,32 @@ $(function() {
// 延遲 600 毫秒執行,確保動態元件已載入
setTimeout(wrapGoBackTop, 500);
});
//修正 Logo 連結與無障礙文字
$(function() {
/**
* 修正 Logo 連結與無障礙文字
* 目標將登入連結改為官網連結並更新相關替代文字
*/
function fixLogoLinkToOfficial() {
// 選取目標連結(建議透過 class 鎖定)
// 選取目標連結(透過 class 鎖定)
var $logoLink = $('a.orbit-bar-logo');
if ($logoLink.length > 0) {
// 偵測當前 HTML 標籤的 lang 屬性
var pageLang = $('html').attr('lang') || 'zh-Hant';
var isEn = pageLang.toLowerCase().startsWith('en');
// 根據語系動態設定文字內容
// alt 屬性:圖片說明
var altText = isEn ? 'National Formosa University Logo' : '國立虎尾科技大學Logo';
// title 屬性:依據 HM1240404E 規範,補充內容不與 alt 相同,僅保留視窗提示即可
var titleText = isEn ? '(Open in this window)' : '(在本視窗開啟)';
// 1. 修改超連結位址 (href) 與 標題 (title)
$logoLink.attr({
'href': 'https://www.nfu.edu.tw',
'title': '國立虎尾科技大學(在本視窗開啟)'
'title': titleText
});
// 2. 修改內部圖片的替代文字 (alt)
$logoLink.find('img').attr('alt', '國立虎尾科技大學');
$logoLink.find('img').attr('alt', altText);
// 3. 移除內部的 <p> 標籤 (避免 display:none 的舊文字干擾無障礙檢測)
$logoLink.find('p').remove();
@ -2563,6 +2764,110 @@ $(function() {
setTimeout(function() {
fixLogoLinkToOfficial();
}, 500);
});
$(document).ready(function () {
setTimeout(function () {
$('iframe.twitter-share-button, iframe.twitter-tweet-button').each(function () {
$(this).attr('title', '分享至 X 在新視窗開啟');
});
}, 1500);
});
//orbitbarlogo無障礙
$(function() {
var $logo = $('.orbit-bar-logo');
var $inner = $logo.contents().not('p');
var $span = $('<span>').addClass('orbit-bar-logo').append($inner);
$logo.replaceWith($span);
});
//orbitbar登入無障礙
$(function() {
var $loginWindow = $('.login-window');
var $checkbox = $('#open-orbit-login');
// login-window 顯示時,焦點移到 label.close
$checkbox.on('change', function() {
if ($(this).is(':checked')) {
setTimeout(function() {
$('.login-window .login-header label.close').focus();
}, 50);
}
});
// login-window 失去焦點時,關閉並還原焦點
$loginWindow.on('focusout', function() {
var $thisWindow = $(this);
setTimeout(function() {
// document.hasFocus() 為 false 代表焦點移到瀏覽器外(開發者工具、右鍵選單等),不關閉
if (!document.hasFocus()) return;
if (!$thisWindow.is(':focus-within') && $checkbox.is(':checked')) {
$(".orbit-bar-logo").one("focusin", function() {
if (window.orbit_login_button) {
window.orbit_login_button.focus();
}
});
$checkbox.click();
}
}, 500);
});
});
//gallery層級問題
$(function() {
var target = document.getElementById('gallery-theater-stage');
if (!target) return;
var observer = new MutationObserver(function() {
var display = target.style.display;
if (display === 'block') {
$('.verticalhome').css('z-index', '2000');
} else if (display === 'none') {
$('.verticalhome').css('z-index', 'auto');
}
});
observer.observe(target, {
attributes : true,
attributeFilter: ['style']
});
});
$(document).ready(function() {
function removeFakeLinks() {
$('a.fake_link').remove();
}
// 初始執行一次
removeFakeLinks();
// Shift+Tab 時也執行
$(document).on('keydown', function(e) {
if (e.key === 'Tab' && e.shiftKey) {
removeFakeLinks();
}
});
// MutationObserver 監聽 DOM 變化fake_link 一出現就移除
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
mutation.addedNodes.forEach(function(node) {
// 直接是 fake_link
if ($(node).is('a.fake_link')) {
$(node).remove();
}
// 或其子元素內含 fake_link
if ($(node).find) {
$(node).find('a.fake_link').remove();
}
});
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
});
// 執行 member等高計算目前改用flexbox故mark掉 by ika 20160105
// $(window).load(function() {

View File

@ -7,7 +7,7 @@ a[accesskey] {
}
#orbit-bar a[accesskey] {
color: #666666 !important;
color: #666666;
margin-left: 0;
position: relative;
&:hover {

View File

@ -2,8 +2,9 @@
@import "../initial";
@import "variables";
#orbit-bar .orbit-bar-title a{
color: #333!important;
.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-search-sign-language{
@ -11,6 +12,48 @@
}
}
.login-btn:focus {
outline: 0.3125em auto -webkit-focus-ring-color !important;
transition: all 0.2s ease-in-out!important;
}
.orbit-bar-inner{
li.active {
@media(min-width:768px){
padding: 0 !important;
}
}
}
label[for="open-orbit-login"] {
@media(max-width:768px){
display: none!important;
}
}
[accesskey="U"],[accesskey="W"]{
@media(max-width:768px){
color: #666!important;
}
}
.orbit-bar-inner{
[accesskey="U"]{
height: 40px;
display: inline-block!important;
line-height: 40px;
float: left;
@media(min-width:769px){
color: #fff!important;
}
}
[accesskey="W"]{
height: 40px;
display: inline-block!important;
line-height: 40px;
float: left;
color: #fff!important;
@media(min-width:769px){
color: #fff!important;
}
}
}
.orbit-bar-search-sign-language{
@media(max-width:767px){
position: absolute !important;
@ -126,7 +169,7 @@ a.btn-primary {
&:hover {
color: #fff;
// box-shadow:$theme-color-third 0 0px 0px 40px inset;
background: radial-gradient(circle at 60% 90%, #dea797, transparent 60%), radial-gradient(circle at 10px 10px, #eb8467, transparent 25%), #ec6641;
background: radial-gradient(circle at 60% 90%, #ea8466, transparent 60%), radial-gradient(circle at 10px 10px, #e66c4a, transparent 25%), #cc3d00;
}
}
.theadsearch2{

View File

@ -2,7 +2,7 @@
@import "variables";
.go-back-top-inner{
background: radial-gradient(circle at 60% 90%, #dea797, transparent 60%), radial-gradient(circle at 10px 10px, #eb8467, transparent 25%), #ec6641;
background: radial-gradient(circle at 60% 90%, #ea8466, transparent 60%), radial-gradient(circle at 10px 10px, #e66c4a, transparent 25%), #cc3d00;
clip-path: polygon(25% 5.77%, 75% 5.77%, 100% 50%, 75% 94.23%, 25% 94.23%, 0% 50%);
padding: 1em;
}

View File

@ -21,6 +21,9 @@ $theme-color-third: #ec6641;
$theme-color-green: #ec6641;
$theme-color-hover:#00437c;
.fa, .fa-classic, .fa-regular, .fa-solid, .far, .fas {
font-family: "Font Awesome 6 Free", FontAwesome;
}
// Font stacks
$main-font: "Noto Sans TC", sans-serif;
$sub-font: "Noto Sans TC", sans-serif;

View File

@ -54,7 +54,7 @@ i.kenmenu-drop.fa-solid.fa-chevron-down {
list-style: none;
}
a[accesskey] {
position: absolute;
position:relative;
}
.container {

View File

@ -155,6 +155,6 @@
--bs-card-bg: transparent;
}
.card:before{
background: radial-gradient(circle at 60% 90%, #dea797, transparent 60%), radial-gradient(circle at 10px 10px, #eb8467, transparent 25%), #ec6641!important;
background: radial-gradient(circle at 60% 90%, #ea8466, transparent 60%), radial-gradient(circle at 10px 10px, #e66c4a, transparent 25%), #cc3d00!important;
}
}

View File

@ -39,6 +39,15 @@ ul.button-mid{
.banner-pager .active-slide button{
background: $theme-color-second!important;
}
.w-ba-banner .button-mid {
position: absolute;
width: 100%;
height: 0;
top: 50%;
}
.next-button, .prev-button {
cursor: pointer;
}
iframe{
border: none;
}
@ -349,8 +358,8 @@ ul.button-mid{
}
.banner-overlay{
padding: 3.5em 5em;
background-image: linear-gradient(180deg, transparent 0, #00000066 40%, #000);
-pie-background: linear-gradient(180deg, transparent 0, #00000066 40%, #000);
background-image: linear-gradient(180deg, transparent 0, #00000066 40%, #000000a3);
-pie-background: linear-gradient(180deg, transparent 0, #00000066 40%, #000000a3);
behavior: url("/assets/ie_support/PIE2/PIE.htc");
position: absolute;
z-index: 99;
@ -630,8 +639,8 @@ ul.button-mid{
.banner-overlay{
color: #fff;
padding: 3.5em 5em;
background-image: linear-gradient(180deg, transparent 0, #00000066 40%, #000);
-pie-background: linear-gradient(180deg, transparent 0, #00000066 40%, #000);
background-image: linear-gradient(180deg, transparent 0, #00000066 40%, #000000a3);
-pie-background: linear-gradient(180deg, transparent 0, #00000066 40%, #000000a3);
behavior: url("/assets/ie_support/PIE2/PIE.htc");
.ad-overlay2{
margin: 0 3em;
@ -667,8 +676,8 @@ ul.button-mid{
.ba-banner-widget-10 {
.w-ad-banner__caption{
padding: 2em 1em;
background-image: linear-gradient(180deg, transparent 0, #00000066 40%, #000);
-pie-background: linear-gradient(180deg, transparent 0, #00000066 40%, #000);
background-image: linear-gradient(180deg, transparent 0, #00000066 40%, #000000a3);
-pie-background: linear-gradient(180deg, transparent 0, #00000066 40%, #000000a3);
behavior: url("/assets/ie_support/PIE2/PIE.htc");
position: absolute;
width: 100%;

View File

@ -535,6 +535,7 @@
}
li{
list-style: none;
margin-bottom: 0.5em;
}
}
.index-archive-15{

View File

@ -84,18 +84,18 @@ tr.i-member-tr-head {
.i-member-pic-wrap{
overflow: hidden;
}
.i-member-item{
&:hover{
img{
transform: scale(1.1) !important;
-webkit-transition: .3s ease-out;
-moz-transition: .3s ease-out;
-ms-transition: .3s ease-out;
-o-transition: .3s ease-out;
transition: .3s ease-out;
}
}
}
// .i-member-item{
// &:hover{
// img{
// transform: scale(1.1) !important;
// -webkit-transition: .3s ease-out;
// -moz-transition: .3s ease-out;
// -ms-transition: .3s ease-out;
// -o-transition: .3s ease-out;
// transition: .3s ease-out;
// }
// }
// }
// Index 1
.index-member-1 {
.i-member__status-title {

View File

@ -437,7 +437,7 @@
}
&:hover {
background: radial-gradient(circle at 60% 90%, #dea797, transparent 60%), radial-gradient(circle at 10px 10px, #eb8467, transparent 25%), #ec6641;
background: radial-gradient(circle at 60% 90%, #ea8466, transparent 60%), radial-gradient(circle at 10px 10px, #e66c4a, transparent 25%), #cc3d00;
@media(max-width: 769px){
a,i {
color:#fff;
@ -557,13 +557,13 @@
}
.navbar-toggle {
position: absolute;
left: 0;
left: 1em;
background: transparent;
top: 40px;
z-index: 1;
height: 100vh;
height: 93vh;
margin: 0;
width: 20%;
width: 13%;
border: 0;
}
.cover {

View File

@ -481,7 +481,7 @@
color: #fff;
}
&:hover{
background: radial-gradient(circle at 60% 90%, #dea797, transparent 60%), radial-gradient(circle at 10px 10px, #eb8467, transparent 25%), #ec6641;
background: radial-gradient(circle at 60% 90%, #ea8466, transparent 60%), radial-gradient(circle at 10px 10px, #e66c4a, transparent 25%), #cc3d00;
}
& + .widget-content {

View File

@ -39,7 +39,7 @@
margin-right: 1%;
margin-bottom: 0.5em;
cursor: pointer;
background: radial-gradient(circle at 60% 90%, #dea797, transparent 60%), radial-gradient(circle at 10px 10px, #eb8467, transparent 25%), #ec6641;
background: radial-gradient(circle at 60% 90%, #ea8466, transparent 60%), radial-gradient(circle at 10px 10px, #e66c4a, transparent 25%), #cc3d00;
border-radius: 2em;
behavior: url("/assets/ie_support/PIE2/PIE.htc");
color: #fff;

View File

@ -2,7 +2,7 @@
<div class="layout-footer-inner">
<div class="layout-footer-content">{{footer-data}}</div>
<div class="footer-counter"><a href="https://ruling.digital/"><img src="/assets/ruling_logo.png" alt="ruling-logo-icon"></a>{{site-counter}}</div>
<div class="footer-counter"><a href="https://orbitek.co"><img src="/assets/orbitek.png" alt="orbitek-logo-icon" style="width: 15px;"></a>{{site-counter}}</div>
<div class="footer-updated-date">{{last-updated}}</div>
</div>
</footer>

View File

@ -41,10 +41,10 @@
<p style="display: none;"><%= I18n.t("ad_banner.pause") %></p>
</a>
</ul>
<ul class="button-mid">
<i class="fa fa-angle-left prev-button" aria-hidden="true" title = "<%= (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" %>"></i>
<i class="fa fa-angle-right next-button" aria-hidden="true" title = "<%= (I18n.locale.to_s =="zh_tw") ? "下一張" : "next" %>"></i>
</ul>
<ul class="button-mid">
<i class="fa fa-angle-left prev-button" aria-label="<%= I18n.t("ad_banner.prev") %>"></i>
<i class="fa fa-angle-right next-button" aria-label="<%= I18n.t("ad_banner.next") %>"></i>
</ul>
</div>
<script>
var flag = 1;

View File

@ -37,7 +37,7 @@
<section class="s-annc__post-wrap">
<div class="s-annc__sub-img2">
<div class="s-annc__sub-img {{hide_class}}">
<img src="{{img_src}}"></img>
<img src="{{img_src}}" alt="{{img_description}}"></img>
<span class="s-annc__img_description">{{img_description}}</span>
</div>
</div>

View File

@ -37,7 +37,7 @@
<section class="s-annc__post-wrap">
<div class="s-annc__sub-img2">
<div class="s-annc__sub-img {{hide_class}}">
<img src="{{img_src}}"></img>
<img src="{{img_src}}" alt="{{img_description}}"></img>
<span class="s-annc__img_description">{{img_description}}</span>
</div>
</div>

View File

@ -3,19 +3,23 @@
<thead>
<tr>
<th class="col-md-1">{{th_year}}</th>
<th class="col-md-6">{{th_course_title}}</th>
<th class="col-md-3">{{th_course_category}}</th>
<th class="col-md-4">{{th_course_title}}</th>
<th class="col-md-2">{{th_course_class}}</th>
<th class="col-md-2">{{th_course_category}}</th>
<th class="col-md-1 min-tablet">{{th_course_semester}}</th>
<th class="col-md-1 min-tablet-l">{{th_authors}}</th>
<th class="col-md-1 min-tablet-2">{{th_url}}</th>
</tr>
</thead>
<tbody data-level="0" data-list="courses">
<tr>
<td>{{year}}</td>
<td><a href="{{link_to_show}}">{{title}}</a></td>
<td>{{course_class}}</td>
<td>{{category}}</td>
<td>{{semester}}</td>
<td>{{authors}}</td>
<td>{{url}}</td>
</tr>
</tbody>
</table>
@ -33,4 +37,4 @@ $('table.courses-index').each(function(){
});
}
});;
</script>
</script>