;(function($, win, undefined) {
// ECMAScript 5 嚴格模式
'use strict';
//header fixed在上方
function initdata1() {
if ( $('.homebanner').length != 0) {
$('.layout-header').css('height', '');
var scrollTop = $(window).scrollTop();
var scrollBottom = $('html').height() - $(window).height() - $('.layout-header').height();
if (scrollTop>5 && scrollBottom>0) { /* 要滑動到選單的距離 */
if (parseInt($('.index-layout-content').css('margin-top'))==0){
}
$('.outdropdowns').addClass('navFixed'); /* 幫選單加上固定效果 */
} else {
if ($('.homebanner').html().trim() == "") {
$('.outdropdowns').removeClass('navFixed');
}else{
$('.outdropdowns').removeClass('navFixed'); /* 移除選單固定效果 */
}
}
}
}
// 初始函數: 把所有的程式碼都包在init裡面,方便在之後的jQuery ready 函數裡一次呼叫
function init() {
// 快取一些常用的變數
var doc = document;
var lang = doc.documentElement.lang;
var pageModule = doc.body.getAttribute('data-module');
var resizeTimer = -1;
// 把所有的函數都包在orbit這個物件裡並按模組做簡單的分類
var orbit = {
// 工具函數,裡面包含可以重覆使用的函數
utils: {
// 字數限制函數, 因為系統預設沒有,所以使用JS來做
// els = 元素, maxLen = 限制長度
truncateText: function(els, maxLen) {
var els = doc.querySelectorAll(els);
var newTitle = '';
var i = -1;
var elsLen = els.length;
for (i = 0; i < elsLen; i++) {
if (els[i].firstChild !== null) {
if (els[i].firstChild.length > maxLen) {
newTitle = els[i].firstChild.textContent;
els[i].textContent = newTitle.substring(0, maxLen) + '...';
}
}
}
}
},
// 外掛,所有的外掛都可以放到這個物件裡
// plugins: {
// // 自適應圖片裁切,Ray的外掛
// bullEye: function() {
// $('.bullseye').bullseye({
// fadeEffect: false
// });
// }
// },
member: {
// 欄位相同高度,小心這個函數沒有計算到圖片高度,所以可能要搭配 jQuery load函數使用,或是之後使用更好的方式例如 CSS3 flexbox
equalHeight: function(el) {
var bigbrother = -1;
var $el = $(el);
$el.each(function(i) {
bigbrother = bigbrother > $el.eq(i).height() ? bigbrother : $el.eq(i).height();
});
$el.height(bigbrother);
},
// 把沒有完成資料的表格列藏起來, 因為後台不管有沒有資料都會輸出項目,所以需要在前台藏起來…
removeEmptyRow: function() {
// index 頁面項目
$('.i-member-profile-item .i-member-value').each(function() {
if ($(this).text().trim() === '' || $(this).text().trim() === ':') {
$(this).parent().addClass('hide');
}
});
// show 頁面項目
$('.show-member .member-data th, .show-member .member-data td').each(function() {
if ($(this).text().trim() === '') {
$(this).parent('tr').addClass('hide');
}
});
},
},
archives: {
// 把沒有文字內容的標題藏起來,因為就算是標題裡沒有文字系統仍然會輸出,這樣會造成一些多餘的CSS margins, paddings,或許之後也可以使用 CSS3 :empty selector 處理
// el = 要移除的元素
removeEmptyTitle: function(el) {
var $el = $(el);
var $els = $el.children();
$.each($els, function(i, val) {
if ($els.eq(i).text().trim() === '') {
$els.eq(i).addClass('hide');
}
});
$.each($el, function(i, val) {
if ($el.eq(i).children('.hide').length >= 2) {
$el.eq(i).addClass('hide');
}
});
},
// bootstarp panel 功能擴充,因為原本的功能不支援多個panel
extendPanel: function() {
var len = $('.i-archive .panel-title').length;
var i = -1;
if (len > 0) {
// 新增數字到要對應的panel按鈕id及href上面
for (i = 0; i < len; i++) {
$('.panel-title:eq(' + i + ') .collapsed').attr('href', '#collapse' + i);
$('.panel-collapse:eq(' + i + ')').attr('id', 'collapse' + i);
}
}
}
},
adBanner: {
// 讓AD banner 的圖片可以點選,因為系統預設輸出的圖片是沒有連結的
// els = 要可以點選的元素(需要配合有data-link這個參數及data-targe才能使用)
addLinkOnADBanner: function(els) {
$.each(els, function() {
if ($(this).data('link') !== '' && !$(this).hasClass('youtube')) {
$(this).on('click', function() {
var target = $(this).data('target');
var link = $(this).data('link');
// 設定頁面打開的方式,記得要加上data-target在HTML裡面
if (target === '_blank') {
window.open(link, target);
} else {
window.location.href = link;
}
}).addClass('cursor'); // cursor類別樣式定義在CSS裡面
}
});
},
},
// 移除行動版下拉選單
removeDropdown: function() {
var $nav = $('#main-nav');
$nav
.find('.menu-drop')
.remove();
$nav
.find('.opened')
.removeClass('opened');
},
// 網站次選單設定,如果次選單有第三層就新增下拉選單的圖示及加上bootstrap class
// els = 選單元素
sitemenuDropdown: function(els) {
var els = doc.querySelectorAll('.sitemenu-list.level-2');
var len = els.length;
var i = -1;
var caret = null;
for (i = 0; i < len; i++) {
if (els[i].children.length) {
caret = doc.createElement('span');
caret.className = 'sitemenu-dropdown-toggle fa fa-caret-down';
caret.setAttribute('data-toggle', 'dropdown');
els[i].parentNode.insertBefore(caret, els[i]);
els[i].className += ' dropdown-menu';
}
}
},
// 回到頁面最頂端,動態產生DOM
// txt = 按鈕的文字, speed = 捲動時的速度
goBackTop: function(txt, speed) {
var top = document.createElement('div');
top.className = 'go-back-top no-print';
top.textContent = txt || 'top';
doc.body.appendChild(top);
// 判斷是否顯示按鈕
$(window).scroll(function() {
if ($(this).scrollTop() !== 0) {
$('.go-back-top').fadeIn();
} else {
$('.go-back-top').fadeOut();
}
});
// 捲動效果
$('.go-back-top').on('click', function() {
$('body, html').animate({
scrollTop: 0
}, speed || 300);
return false;
});
},
// Multi-column layout, passing ID or class string as parameters and a
// Bootstrap col class for full width, eg: col-md-12
setColumn: function(leftCol, rightCol, columnCls) {
var $leftCol = $(leftCol);
var $rightCol = $(rightCol);
var columnCls = columnCls || 'col-sm-12';
if ($leftCol.length && $rightCol.length) {
$.each([$leftCol, $rightCol], function() {
if ($(this).is(':empty')) {
$(this)
.addClass('empty-column')
.siblings()
.removeClass(function(index, css) {
return (css.match(/(^|\s)col-\S+/g) || []).join(' ');
})
.addClass(columnCls);
}
});
}
},
MobileMenu: function() {
var $menu = $('[data-menu-level="0"]');
$menu.find('ul[data-menu-level="1"]').parent().addClass('mobile-menu1');
$menu.find('ul[data-menu-level="2"]').parent().addClass('mobile-menu2');
var $caret1 = $('');
var $caret2 = $('');
// 如果有第二層選單,新增對應的類別到parent元素上
$('.nav-level-1')
.parent('li')
.addClass('has-dropdown level-1');
// 檢查是否已經有dropdown-toggle-icon這個元素,才不會在resize事件中重覆新增
if ($('.has-dropdown.level-1 .menu-drop').length < 1) {
$('.mobile-menu1').append($caret1);
// 如果有第三層選單,新增對應的類別到parent元素上
$('.nav-level-2')
.parent('li')
.addClass('has-dropdown level-2');
$caret2.appendTo('.has-dropdown.level-2');
}
},
ClickMenuHandler: function() {
// 處理主選單切換(漢堡 icon)
$(document).on('click', '.navbar-toggle', function (e) {
e.preventDefault();
// 確保 .navbar-toggle 放到 .modules-menu 後面
$('.mobile-menu').each(function () {
var $menu = $(this);
if ($menu.find('.modules-menu').length && !$menu.find('.modules-menu + .navbar-toggle').length) {
$menu.find('.modules-menu').after($menu.find('.navbar-toggle'));
}
});
$('.mobile-menu').toggleClass('active');
$('body').toggleClass('noscroll');
$('.mobile-menu .navbar-toggle').removeClass('collapsed');
// 關閉所有下拉選單
$('.mobile-menu1 > ul, .mobile-menu2 > ul').slideUp(500);
$('.mobile-menu1 > .menu-drop, .mobile-menu2 > .menu-drop').removeClass('opened');
// 無障礙:聚焦第一個互動元素
if ($('.mobile-menu').hasClass('active')) {
setTimeout(function () {
$('.modules-menu').find('input, button, select, textarea, a').first().focus();
}, 100);
}
});
$('.mobile-menu1 > .menu-drop').click(function(){
var $that = $(this);
var opencheck1 = $that.hasClass('opened');
if ( opencheck1 == 0 ) {
$('.mobile-menu1 > ul').not($that.siblings('ul')).slideUp(500);
$('.mobile-menu1 > .menu-drop').not($that).removeClass('opened');
$('.mobile-menu2 > ul').slideUp(500);
$('.mobile-menu2 > .menu-drop').removeClass('opened');
$that.siblings('ul').slideDown(500);
$that.addClass('opened');
} else if (opencheck1 == 1) {
$that.siblings('ul').slideUp(500);
$('.mobile-menu2 > ul').slideUp(500);
$('.mobile-menu2 > .menu-drop').removeClass('opened');
$that.removeClass('opened');
}
})
$('.mobile-menu2 > .menu-drop').click(function(){
var $that = $(this);
var opencheck2 = $that.hasClass('opened');
if ( opencheck2 == 0 ) {
$('.mobile-menu2 > ul').not($that.siblings('ul')).slideUp(500);
$('.mobile-menu2 > .menu-drop').not($that).removeClass('opened');
$that.siblings('ul').slideDown(500);
$that.addClass('opened');
} else if (opencheck2 == 1) {
$that.siblings('ul').slideUp(500);
$that.removeClass('opened');
}
})
}
};
// 把orbit物件加到window物件裡面並改名為ORBITFRONT來減少名稱衝突的機會
win.ORBITFRONT = orbit;
// 在switch裡測試頁面模組後執行對應的函數
switch (pageModule) {
case 'home':
break;
case 'member':
orbit.member.removeEmptyRow();
$('.index-member-3 .member-data-title-email').empty();
break;
case 'archive':
orbit.archives.removeEmptyTitle('.i-archive__category-item');
orbit.archives.extendPanel();
break;
case 'gallery':
orbit.utils.truncateText('.show-description', 15);
break;
default:
break;
}
// 在所有的頁面(包含首頁)執行下面這幾個函數
initdata1();
orbit.sitemenuDropdown();
orbit.goBackTop('top', 800);
// orbit.plugins.bullEye();
orbit.setColumn('.left-column', '.right-column');
// 自適應網頁使用,當網頁載入時,如果視窗寬度小於769,就執行orbit.nav.setDropdown函數
if ($(window).width() < 769) {
// orbit.nav.setDropdown();
orbit.MobileMenu();
$('.mobile-menu').append($('.modules-menu'));
$('.header-buttom').appendTo($('.modules-menu'));
orbit.ClickMenuHandler();
}
// 自適應網頁使用,當使用者改變瀏覽器寬度時呼叫orbit.nav.setDropdown函數
$(window).resize(function() {
if ($(window).width() < 769) {
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
// if ( $('.modules-menu i').length == 0 ) {
// orbit.MobileMenu();
// }
if( $('.mobile-menu .modules-menu').length == 0 ) {
$('.mobile-menu').append($('.modules-menu'));
$('.header-buttom').appendTo($('.modules-menu'));
orbit.MobileMenu();
orbit.ClickMenuHandler();
// $('.navbar-toggle').bind('click', orbit.ClickMenuHandler);
// $('.navbar-toggle').bind(orbit.ClickMenuHandler());
}
},500 )} else {
resizeTimer = setTimeout(function(){
if( $('.mobile-menu .modules-menu').length > 0 ) {
$('.layout-header .outdropdowns .dropdowns').append($('.modules-menu'));
$('.dropdowns').append($('.header-buttom'));
}
orbit.removeDropdown();
}, 500);
}
});
// if($(window).width()<769){
// $('.header-buttom').appendTo($('.modules-menu'));
// }else{
// $('.header-buttom').appendTo($('.dropdowns'));
// }
function forFreeGo() {
//表單legend
$("fieldset").each(function () {
const $fieldset = $(this);
const hasLegend = $fieldset.children("legend").length > 0;
if (!hasLegend) {
// 嘗試抓最上層的群組標題,例如 "Apply"
const headingText = $fieldset.find(".form-group:first").text().trim() || "表單填寫";
// 插入 legend 為第一個元素
$fieldset.prepend(``);
}
});
// 處理「上一頁」按鈕
$(".cmdBackward").each(function () {
$(this)
.attr("title", "上一頁")
.attr("aria-label", "上一頁");
if ($(this).find(".sr-only").length === 0) {
$(this).append('上一頁');
}
$(this).find("i").attr("aria-hidden", "true");
$(this).find(".icon").attr("aria-hidden", "true");
});
// 處理「下一頁」按鈕
$(".cmdForward").each(function () {
$(this)
.attr("title", "下一頁")
.attr("aria-label", "下一頁");
if ($(this).find(".sr-only").length === 0) {
$(this).append('下一頁');
}
$(this).find("i").attr("aria-hidden", "true");
$(this).find(".icon").attr("aria-hidden", "true");
});
$('.pagination li.active a').attr('aria-current', 'page');
$('path').each(function () {
$(this)
.attr('aria-hidden', 'true')
.attr('focusable', 'false')
.attr('tabindex', '-1');
});
$('.controlplay a[role="radio"]').on('click', function () {
// 取消所有的 aria-checked 並還原文字
$('.controlplay a[role="radio"]').attr('aria-checked', 'false');
$('.controlplay a[role="radio"] span').each(function () {
var text = $(this).text().replace('(已選取)', '');
$(this).text(text);
});
// 設定目前被點擊的按鈕為已選取
$(this).attr('aria-checked', 'true');
var selectedText = $(this).text().trim();
$(this).find('span').text(selectedText + '(已選取)');
});
// 遍历所有的 .s-annc__tag-wrap 元素
$('.s-annc__tag-wrap').each(function() {
// 遍历 .s-annc__tag-wrap 下的每个 a 元素
$(this).find('a').each(function() {
// 如果 .s-annc__tag 元素为空或没有内容
if ($(this).find('.s-annc__tag').is(':empty')) {
// 移除该 a 元素
$(this).remove();
}
});
});
$('.w-ba-banner__caption li button').each(function (index) {
const $slide = $('.w-ba-banner__slide').eq(index);
const title = $slide.attr('data-cycle-title')?.trim();
if (title) {
const fullText = title + '的pager';
$(this).attr('aria-label', fullText);
$(this).attr('title', fullText);
}
});
// 當 focus 到 menu link 時,顯示對應 ul
$('.sitemenu-item > a').on('focus', function () {
$(this).siblings('ul').addClass('show');
});
// 當 focus 離開最後一個子選單 link 時,移除 .show
$('.sitemenu-item').each(function () {
const $submenuLinks = $(this).find('ul a');
if ($submenuLinks.length > 0) {
$submenuLinks.last().on('blur', function () {
// 當最後一個子項 blur 時關閉 ul
$(this).closest('ul').removeClass('show');
});
} else {
// 若沒有子項,當主選單項 blur 也隱藏
$(this).find('> a').on('blur', function () {
$(this).siblings('ul').removeClass('show');
});
}
});
if (document.documentElement.lang === 'zh_tw') {
document.documentElement.lang = 'zh-Hant';
}
//tab鍵按下
$(document).on('keydown', function(e) {
if (e.key === "Tab" || e.keyCode === 9) {
$('.header-nav, .dropdowns').css('display', 'block');
}
});
//li被hover
function handleHover() {
if ($(window).width() > 769) {
$('li').off('mouseenter mouseleave').hover(
function() {
$(this).children('ul').addClass('show');
},
function() {
$(this).children('ul').removeClass('show');
}
);
} else {
$('li').off('mouseenter mouseleave'); // 移除 hover 事件
}
}
// 先執行一次
handleHover();
// 監聽視窗大小變化
$(window).on('resize', function() {
handleHover();
});
//刪除空的h1
$('h1').each(function() {
if ($(this).text().trim() === '') {
$(this).remove();
}
});
//refresh_btn加上aria-label
$('#refresh_btn').each(function() {
var $this = $(this);
// 如果 button 尚未有 aria-label,則新增
if (!$this.attr('aria-label')) {
$this.attr('aria-label', '重新整理');
}
});
//無障礙會員表格刪除沒有顯示的th
$('.i-member-tr-head').each(function() {
if ($(this).css('display') === 'none') {
$(this).remove();
}
});
//無障礙公告a是空的
$('.w-annc__subtitle').each(function () {
var $this = $(this);
var $link = $this.find('a');
// 檢查 a 是否存在,且去除空白後是否為空字串
if ($link.length && $link.text().trim() === '') {
$this.remove(); // 移除外層 .w-annc__subtitle
}
});
//無障礙單位轉換
$("[style*='font-size']").each(function() {
var fontSize = $(this).css("font-size");
if (fontSize.includes("px")) {
var pxValue = parseFloat(fontSize); // 取得數值
var emValue = pxValue / 16; // 假設 1em = 16px
$(this).css("font-size", emValue + "em");
}
});
$("[style*='font-size']").each(function() {
var fontSize = $(this).css("font-size");
if (fontSize.includes("pt")) {
var ptValue = parseFloat(fontSize); // 取得數值
var emValue = ptValue / 12; // 1em = 12pt(一般轉換標準)
$(this).css("font-size", emValue + "em");
}
});
$("[style*='font-size']").each(function() {
var styleAttr = $(this).attr("style"); // 取得原始 style 屬性字串
var match = styleAttr.match(/font-size\s*:\s*(\d+(?:\.\d+)?)pt/i);
if (match) {
var ptValue = parseFloat(match[1]);
var emValue = ptValue / 12;
// 替換 style 屬性字串中的 pt 為 em
var newStyle = styleAttr.replace(/font-size\s*:\s*\d+(?:\.\d+)?pt/i, `font-size: ${emValue}em`);
$(this).attr("style", newStyle);
}
});
//表格scope
$("table").each(function() {
$(this).find("tr").each(function(rowIndex) {
$(this).find("th").each(function(colIndex) {
if (rowIndex === 0) {
// 第一列的 th,適用於該欄
$(this).attr("scope", "col");
} else if (colIndex === 0) {
// 其他列的第一個 th,適用於該行
$(this).attr("scope", "row");
}
});
});
});
$(".banner-pager button").addClass('banner-pagerbtn');
$(".banner-pager button").attr("type","button");
$(".banner-pager button").append('下一張');
$("button").attr("role", "button");
$("select").attr("title","選擇類別");
$(".jarallax-video-audio").attr("role", "button");
$('button').each(function() {
var $this = $(this);
if (!$this.attr('title') || $this.attr('title').trim() === '') {
$this.attr('title', '按鈕');
}
});
$('img').each(function() {
var $this = $(this);
if (!$this.attr('alt') || $this.attr('alt').trim() === '') {
$this.attr('alt', '這是一張圖片');
}
});
$('img').each(function() {
var $this = $(this);
if (!$this.attr('title') || $this.attr('title').trim() === '') {
$this.attr('title', '這是一張圖片');
}
});
$('img').each(function() {
var $this = $(this);
// 檢查 img 的 alt 屬性是否為 "裝飾圖片"
if ($this.attr('alt') === "裝飾圖片" || $this.attr('title') === "裝飾圖片") {
// 設定 alt 為空字串
$this.attr('alt', '');
// 移除 title 屬性
$this.removeAttr('title');
}
});
$(".w-annc__img-wrap a").each(function () {
var $this = $(this);
// 確保 內沒有文字節點 (避免重複添加)
if ($this.text().trim() === "") {
$this.append('公告圖片');
}
});
$(".widget-link__widget-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('公告標題');
}
});
$(".sitemenu-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('次選單');
}
});
$(".annc-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('內頁公告標題');
}
});
$(".event-annc-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('內頁活動公告標題');
}
});
$(".show-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('內頁活動公告標題');
}
});
$(".w-annc__widget-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('公告標題');
}
});
$(".widget-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('網路資源標題');
}
});
$(".widget-title").each(function () {
if ($(this).text().trim() === "") {
$(this).append('網路資源標題');
}
});
$('input').each(function() {
var $this = $(this);
if (!$this.attr('title') || $this.attr('title').trim() === '') {
$this.attr('title', '網內搜尋');
}
});
$('.rucaptcha-image').each(function() {
var $button = $(this).next('button'); // 取得緊接在 .rucaptcha-image 之後的 button
if ($button.length && !$button.attr('aria-label')) {
$button.attr('aria-label', '播放驗證碼語音');
}
});
//有連結目的之所有a標籤加上aria-label和title
$('a').each(function () {
var $a = $(this);
var href = $a.attr('href');
if (!href) return;
var hasSrOnly = $a.find('.sr-only').length > 0;
// 若有 .sr-only,移除 aria-label 和 title 避免重複朗讀
if (hasSrOnly) {
$a.removeAttr('aria-label');
$a.removeAttr('title');
return; // 有 .sr-only 就不做其他處理
}
// ----- aria-label 邏輯 -----
if (!$a.attr('aria-label')) {
let ariaLabel = '';
// 加入開啟方式
if ($a.attr('target') === '_blank') {
ariaLabel += '在新視窗開啟 ';
} else if ($a.attr('target') === '_self') {
ariaLabel += '在本視窗開啟 ';
}
// 如果包含圖片且有圖片 title
if ($a.find('img').length) {
const imgTitle = $a.find('img').attr('title');
if (imgTitle) ariaLabel = imgTitle;
} else {
const text = $a.text().trim();
if (text) {
ariaLabel += text;
} else if ($a.children('span').length === 1) {
ariaLabel += $a.children('span').text().trim();
}
}
if (ariaLabel) {
$a.attr('aria-label', ariaLabel);
}
}
// ----- title 邏輯 -----
if (!$a.attr('title')) {
let titleStr = '';
if ($a.attr('target') === '_blank') {
titleStr += '在新視窗開啟 ';
} else if ($a.attr('target') === '_self') {
titleStr += '在本視窗開啟 ';
}
if ($a.find('img').length) {
titleStr = '這是一張照片';
} else {
const text = $a.text().trim();
if (text) {
titleStr += text;
} else if ($a.children('span').length === 1) {
titleStr += $a.children('span').text().trim();
}
}
if (titleStr) {
$a.attr('title', titleStr);
}
}
});
$('a').each(function () {
const $link = $(this);
const linkText = $link.text().trim();
$link.find('img').each(function () {
const $img = $(this);
const altText = $img.attr('alt')?.trim();
// 如果圖片 alt 是空的,就略過(已符合)
if (altText === '') return;
// 如果圖片 alt 等於文字內容,就將 alt 清空,避免重複
if (altText === linkText) {
$img.attr('alt', '');
}
});
});
// 刪除banner-slide的空連結和空連結目標
for(var i=0;i<$('.w-ba-banner__slide a').length;i++){
if($('.w-ba-banner__slide a').eq(i).attr('href')=="")
$('.w-ba-banner__slide a').eq(i).removeAttr('href');
if($('.w-ba-banner__slide a').eq(i).attr('target') == "")
$('.w-ba-banner__slide a').eq(i).removeAttr('target');
};
// 幫無標題之iframe加上title
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('src').search('facebook') != -1 )
$('iframe').eq(i).attr('title','facebook');
else if($('iframe').eq(i).attr('src').search('google') != -1 )
$('iframe').eq(i).attr('title','google');
else if($('iframe').eq(i).attr('src').search('youtube') != -1 )
$('iframe').eq(i).attr('title','youtube');
else if($('iframe').eq(i).attr('src').search('twitframe') != -1 )
$('iframe').eq(i).attr('title','twitter');
else
$('iframe').eq(i).attr('title','unknown');
};
//button是空的就加上內容
$('button').each(function() {
var $this = $(this);
var titleText = $this.attr('title') || '';
// 檢查 button 是否是空的(沒有可見文字或子元素)
if ($this.text().trim() === '' && !$this.children().length && titleText) {
// 新增隱藏的 span,內容為 title
$this.append('' + titleText + '');
}
});
// 刪除空的檔案室
var archievelen = $('dd a.i-archive-files-item').length;
for(i=archievelen-1;i>=0;i--)
if($('dd a.i-archive-files-item').eq(i).html().trim()=="")
$('dd a.i-archive-files-item').eq(i).parent('dd').remove();
// 刪除具有空連結欄位的橫列
for(var i = 0;i < $('*[data-list] tr td a').length ; i++)
if($('*[data-list] tr td a').eq(i).html().trim()=="")
$('*[data-list] tr td a').eq(i).parent('td').parent('tr').remove();
// tab按鍵選到menu,會顯示下層的menu(為了符合無障礙)
$('.nav-level-0>li>a').focus(function(e) {
e.stopPropagation();
$(this).parent().focus();
if ($(this).parent().find('.nav-level-1').hasClass('show')) {
} else {
$('.nav-level-1').removeClass('show');
$(this).parent().find('.nav-level-1').addClass('show');
}
});
$('.nav-level-1>li>a').focus(function(e) {
e.stopPropagation();
if ($(this).parent().find('.nav-level-2').hasClass('show')) {
}else{
$('.nav-level-2').removeClass('show');
$(this).parent().find('.nav-level-2').addClass('show');
}
});
$('show').parent('li').focus();
}
forFreeGo();
//header banner setting
if ( location.href.search('editmode=on') != -1 ) {
$('.header-banner').css('z-index','2');
} else {
$('.header-banner').css({
'position': 'relative',
'top': '0',
'z-index': '-2',
});
};
//公告頁籤
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');
$('.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');
});
var url = window.location.search;
if (url == "?editmode=on") {
$('.tab_content').css({'position': 'relative','display':'block'});
}
}
annc_widget_nav();
//切換語言停留在同一頁
if(window.location.pathname!="/")
$("#en").attr("href",window.location.pathname.replace("zh_tw","en"))
//檔案室 下載檔案 hover 彈出備註訊息
$('[data-toggle="tooltip"]').tooltip()
//下載檔案格式dot pdf分色
$(".i-archive .label.label-primary").each(function() {
var downloadType = $(this).text();
$(this).addClass(downloadType);
})
//檔案室模組 Widget 手風琴
function extendPanelWidget() {
var len = $('.panel-title').length;
var i = -1;
if (len > 0) {
// 新增數字到要對應的panel按鈕id及href上面
for (i = 0; i < len; i++) {
$('.panel-title:eq(' + i + ') .collapsed').attr('href', '#collapse' + i);
$('.panel-collapse:eq(' + i + ')').attr('id', 'collapse' + i);
}
}
}
extendPanelWidget();
// member show tab scroll
$('.nav-pills').scrollingTabs({
scrollToTabEdge: true,
enableSwiping: true,
leftArrowContent: [
'',
'
'
].join(''),
rightArrowContent: [
'',
'
'
].join('')
});
}
$(document).ready(function () {
// 處理所有 .fnav-item 裡的
$(".fnav-item a").each(function () {
const $a = $(this);
// 如果內部已經有 .sr-only,就略過
if ($a.find(".sr-only").length > 0) return;
// 嘗試從 title 擷取語意文字
let label = $a.attr("title") || "";
// 如果還是空字串,再嘗試用 i 的 title
if (!label.trim()) {
const iconTitle = $a.find("i").attr("title");
if (iconTitle) label = iconTitle;
}
// 如果真的都沒有語意,預設一個 generic label(也可加入 warning log)
if (!label.trim()) {
label = "操作按鈕";
}
// 加上 title 和 aria-label
$a.attr("title", label).attr("aria-label", label);
// 加上 sr-only 輔助文字
$a.append(`${label}`);
// 確保 icon 不被閱讀器讀取
$a.find("i").attr("aria-hidden", "true");
$a.find(".icon").attr("aria-hidden", "true");
});
});
//video js
$(document).ready(function () {
if ($(".main-content .video_detail").length > 0) {
$('.videopagenone').css("display","none");
$('.videopage').css('display', 'block');
$('.sitemenu').css("display","none");
$('span img[alt="HD"]').parent().hide();
$('span img[alt="觀看人數"]').remove();
$(".video_detail .view_info span").each(function () {
var text = $(this).text().trim(); // 取得 裡的文字,去掉前後空格
var number = text.replace(/\D/g, ""); // 只保留數字部分
if (number) {
$(this).text(`・觀看次數:${number}次`); // 更新內容格式
}
});
$(".movie_desc").before('單元介紹
');
$(".movie_desc").each(function () {
var decodedHtml = $("").html($(this).text()).html(); // 轉換轉義的 HTML
$(this).html(decodedHtml); // 設置為真正的 HTML
});
$(".video_group_time").each(function () {
var $this = $(this);
// 找到對應的 ,並移動到 .video_group_time 內部
var $q = $this.closest(".imglst_desc").find(".movie_desc q");
if ($q.length) {
$this.append($q.clone()); // 將 複製並添加到 .video_group_time
$q.remove(); // 移除 .movie_desc 裡的
}
// 移動 .view_info 到 .video_group_time 的內部
$this.append($this.siblings(".view_info"));
// 取得內容並移除 "SystemAdmin | " 前綴
var text = $this.text().trim();
var newText = text.replace(/^.*\|\s*/, ""); // 移除 "SystemAdmin | "
$this.text(newText); // 更新內容
$(this).insertBefore($(this).closest(".imglst_desc").siblings("h3"));
});
$(".main-content").css({
"max-width": "920px",
"margin": "auto"
});
$(".video_box_wrap").css("padding-bottom", "56%");
$(".video_detail .video_yt_box").insertBefore(".video_detail .video_group_time");
};
function getYouTubeThumbnail() {
var $ytThumb = $(".ytp-cued-thumbnail-overlay-image");
if ($ytThumb.length) {
var imageUrl = $ytThumb.css("background-image");
// 檢查背景圖格式:url("https://...")
var urlMatch = imageUrl.match(/url\(["']?(.*?)["']?\)/);
var extractedUrl = urlMatch ? urlMatch[1] : null;
if (extractedUrl) {
// console.log("成功獲取縮圖:", extractedUrl);
$(".background").css("background-image", `url("${extractedUrl}")`);
} else {
// console.log("背景圖格式不對,改用影片 ID 生成縮圖");
setThumbnailFromVideoId();
}
} else {
// console.log("找不到 .ytp-cued-thumbnail-overlay-image,改用影片 ID 生成縮圖");
setThumbnailFromVideoId();
}
}
function setThumbnailFromVideoId() {
var $iframe = $("iframe[src*='youtube.com/embed']");
if ($iframe.length) {
var src = $iframe.attr("src");
var videoIdMatch = src.match(/youtube\.com\/embed\/([^?]+)/);
var videoId = videoIdMatch ? videoIdMatch[1] : null;
if (videoId) {
var fallbackImageUrl = `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`;
// console.log("透過影片 ID 取得縮圖:", fallbackImageUrl);
$(".background").css("background-image", `url("${fallbackImageUrl}")`);
}
}
}
// 嘗試多次加載
var interval = setInterval(function () {
if ($(".ytp-cued-thumbnail-overlay-image").length || $("iframe[src*='youtube.com/embed']").length) {
getYouTubeThumbnail();
clearInterval(interval);
}
}, 1000);
//改變日期格式
$(".video_group_time").each(function () {
var $this = $(this);
var originalText = $this.text().trim();
// 把 YYYY-MM-DD 轉換成 M月D日
var formattedText = originalText.replace(/(\d{4})-(\d{2})-(\d{2})/g, function (match, year, month, day) {
return parseInt(month, 10) + "月" + parseInt(day, 10) + "日";
});
// 找到對應的 ,並複製
var $q = $this.closest(".video_data").find(".video_desc q").clone();
// 更新內容並加上
$this.html(formattedText).append($q);
});
});
$(document).ready(function () {
$('.rucaptcha-image').removeAttr('onload');
// 檢查是否已插入過
if (!$('#captcha_audio').length) {
const audioButton = $(`
`);
const audio = $('');
$('.rucaptcha-image').after(audioButton, audio);
}
});
//萬用表格searchbtn2
$(document).ready(function () {
$('.searchbtn2').click(function (event) {
event.preventDefault(); // 防止預設行為
$(".searchbox").slideToggle(300, function () {
updateAriaExpanded();
});
$(this).closest('.ken-click').toggleClass('ken-click2');
});
let triggeredByFocus = false;
function updateAriaExpanded() {
const isVisible = $(".searchbox").is(":visible");
$(".searchbtn2").attr("aria-expanded", isVisible ? "true" : "false");
}
// 預設 aria-expanded 為 false
$(".searchbtn2").attr("aria-expanded", "false");
});
//強制保持全站search展開
$(document).ready(function () {
//search移位
function moveSearchIfWide() {
if ($('.input-search').is(':focus')) return;
if ($(window).width() > 769) {
// 如果已經在正確位置就不動
if (!$('.modules-menu-level-0 .searchclass').length) {
$('.searchclass').appendTo('.header-nav');
}
} else {
$('.navbar-brand').after($('.searchclass'));
}
}
$(document).ready(moveSearchIfWide);
$(window).on('resize', moveSearchIfWide);
const $searchBox = $('.search-box');
const $input = $searchBox.find('.input-search');
const $btn = $('.btn-search');
// 點擊 btn 時:若未展開則展開,展開後才可送出
$btn.on('click', function (e) {
if (!$searchBox.hasClass('searching')) {
e.preventDefault(); // 第一次點擊不送出
// 延遲讓 Android 不會立即 blur
setTimeout(() => {
$searchBox.addClass('searching');
$input[0].focus(); // 用 DOM 方式較穩
}, 100);
} else if (!$input.val().trim()) {
// 沒有輸入值 → 不送出,focus 回去
e.preventDefault();
$input[0].focus();
}
// 有輸入值就正常送出
});
// 點外面收起(無字才收)
$(document).on('click touchstart', function (e) {
if (
!$searchBox.is(e.target) &&
$searchBox.has(e.target).length === 0 &&
!$input.val().trim()
) {
$searchBox.removeClass('searching');
}
});
// focus 時延遲加 .searching,避免 Android 被打斷
$input.on('focus', function () {
setTimeout(() => {
$searchBox.addClass('searching');
}, 50);
});
// blur 時延遲移除 .searching,避免太早發生
$input.on('blur', function () {
setTimeout(() => {
if (!$input.val().trim()) {
$searchBox.removeClass('searching');
}
}, 150);
});
});
// 當文件物件模型(DOM)載入後,執行init函數
$(document).ready(function() {
//常用到的js
// $('.').after($('.'));
// $('.').before($('.'));
// $('.').append($('.'));
// if($('.show-announcement').hasClass('show-announcement')) {
// $('.').css('', '');
// }
$('a').each(function () {
const $a = $(this);
// 有圖示或圖片就不刪
if ($a.find('i, img').length > 0) return;
// 沒有任何實際文字內容(去除空白)
const hasVisibleText = $a.text().trim().length > 0;
// 進一步判斷 span 內部是否完全為空
const allChildrenEmpty = $a.children().length > 0 && $a.children().toArray().every(child => {
return $(child).text().trim().length === 0;
});
// 如果沒有文字內容且子元素全為空,則移除
if (!hasVisibleText && allChildrenEmpty) {
$a.remove();
}
});
$('.i-member-pic-wrap a').removeAttr('target');
function markCheckStatusButton() {
$('.ask-question').each(function () {
var $prev = $(this).prev(); // 取得前一個元素
// 如果前一個元素是 且 class 包含 "btn"
if ($prev.is('a') && $prev.hasClass('btn')) {
$prev.addClass('CheckStatus'); // 加上 class
}
});
};
markCheckStatusButton();
// 綁定滑動事件
$(".cycle-slideshow").swipe({
swipeLeft: function () {
$(this).cycle("next");
},
swipeRight: function () {
$(this).cycle("prev");
},
threshold: 50, // 滑動靈敏度(數值越小越敏感)
});
$('#check_history_form input[type="submit"][value="Check History"]').addClass('CheckHistory');
$(".mybooking").append('');
//內頁dattpp移位
$('.i-annc__page-title').after($('.sitemenu-wrap2'));
$('.i-archive-title').after($('.sitemenu-wrap2'));
$('.page-module-title').after($('.sitemenu-wrap2'));
$('.box-social-share').before($('.sitemenu-wrap3'));
$('.box-social-share').before($('.sitemenu-wrap3'));
$('.box-social-share').before($('.sitemenu-wrap3'));
$(".member-data2-tr").before($(".show-member .table-striped > tbody > tr:nth-of-type(4)"));
$(".nav-pills").before($(".show-member .table-striped > tbody > tr:last-child"));
//檔案室手風琴
$('.panel-title>.collapsed').click(function(){
$(this).find('.fa').toggleClass("fa-chevron-down");
$(this).find('.fa').toggleClass("fa-chevron-up");
});
//背景widget設定
if ( location.href.search('editmode=on') != -1 ) {
$('.background').css('z-index','2');
$('.background').css('position','relative');
} else {
$('.background').css('z-index','-1');
$('.background').css('position','fixed');
};
//公告類別顏色
// $(".w-annc .w-annc__category-wrap").each(function() {
// var SaveCategory = $(this).find(".w-annc__category").text();
// $(this).addClass(SaveCategory);
// })
// $(".w-annc__item ").each(function() {
// var SaveCategory2 = $(this).find(".w-annc__category").text();
// $(this).addClass(SaveCategory2);
// })
$(".i-annc__item .i-annc__category-wrap").each(function() {
var SaveCategory = $(this).find(".i-annc__category").text();
$(this).addClass(SaveCategory);
})
$(".i-annc__item ").each(function() {
var SaveCategory2 = $(this).find(".i-annc__category").text();
$(this).addClass(SaveCategory2);
})
//預約
if ($(window).width() > 821) {
$('.form-horizontal').append($('.cancelbooking'));
$(".hire-ken-click").click(function(){
// $(".searchbox").slideToggle(300);
$('.form-horizontal').toggleClass('hire-ken-click2');
$('.col-lg-5').toggleClass('shadowblock');
$(".cancelbooking").click(function(){
$('.form-horizontal').removeClass('hire-ken-click2');
$('.col-lg-5').removeClass('shadowblock');
});
});
}
//navrwd移到選單
if ($(window).width() <769) {
$('.modules-menu-level-0').after($('.header-nav'));
}else{
$('.navbar-header').before($('.header-nav'));
};
$('.sitemenu-vertical .sitemenu-dropdown-toggle').click(function(){
$('.sitemenu-vertical .dropdown-menu').slideToggle();
$(".sitemenu-vertical .sitemenu-dropdown-toggle").toggleClass("fa-caret-down");
$(".sitemenu-vertical .sitemenu-dropdown-toggle").toggleClass("fa-caret-up");
});
//頁尾選單開合
$('.btn-fatfooter').click(function(){
$('.fatfooter').slideToggle();
$(".btn-fatfooter .fa-chevron-down").toggleClass("rotate");
});
$(".menu-toggle").on('click', function() {
$(this).toggleClass("on");
$('.menu-section').toggleClass("on");
$("nav ul").toggleClass('hidden');
});
$('.morebken').click(function(){
$('.list-unstyled>li:nth-child(n+5)').slideToggle();
$(".morebken .fa-chevron-down").toggleClass("rotate");
$(".openmorebken").toggleClass("closemorebken");
});
//RWD 自動縮放headerbannner
function headerH() {
if ($(window).width() < 769) {
const navH = $('.layout-header .navbar-header').outerHeight();
$('.header-banner').css('height', navH );
}
}
headerH();
//downIcon
$(".downIcon").click(function () {
var move_to_target = function (stop) {
var theTop;
if (stop) {
// $(".kenjohn").addClass('navFixed');
if ($('.layout-content2.topcontent').length != 0 && $('.layout-content2.topcontent').offset().top < 400) {
$('.layout-content2').css('margin-top', $('.kenjohn').height() - $('#orbit-bar').height());
}
if (parseInt($('.layout-content2').css('margin-top') == 0)) {
theTop = $('.layout-content2.topcontent').offset().top - $(".kenjohn").position().top - 95;
} else {
theTop = $('.layout-content2.topcontent').offset().top - $(".kenjohn").position().top - $(".kenjohn").height() - 95;
}
} else {
theTop = 5;
}
// console.log(theTop);
$("html, body").animate({
scrollTop: theTop
}, {
duration: 400, easing: "swing", complete: function () {
// console.log('finish');
if (!stop) {
move_to_target(true);
}
}
});
}
move_to_target(false);
return false;
});
$(window).resize(function() {
if ($(window).width() <769) {
$('.modules-menu-level-0').after($('.header-nav'));
}else{
$('.navbar-header').before($('.header-nav'));
};
if ($(window).width() > 821) {
$('.form-horizontal').append($('.cancelbooking'));
$(".hire-ken-click").click(function(){
// $(".searchbox").slideToggle(300);
$('.form-horizontal').toggleClass('hire-ken-click2');
$('.col-lg-5').toggleClass('shadowblock');
$(".cancelbooking").click(function(){
$('.form-horizontal').removeClass('hire-ken-click2');
$('.col-lg-5').removeClass('shadowblock');
});
});
}
headerH();
})
$(window).scroll(function() {
initdata1();
});
// $(window).scroll(function() {
// if ($(this).scrollTop() > 100) { /* 要滑動到選單的距離 */
// $('.outdropdowns').addClass('navFixed'); /* 幫選單加上固定效果 */
// } else {
// $('.outdropdowns').removeClass('navFixed'); /* 移除選單固定效果 */
// }
// });
// $('.navbar-brand h2').replaceWith(function() {
// return $("", {
// class: this.className,
// html: $(this).html()
// });
// });
$('#search'). attr('title', '另開新視窗');
$(window).scroll(function () {
var windowTop = $(window).scrollTop();
var windowBottom = windowTop + $(window).innerHeight();
function handleAnimationOnce(selector, animationClass, offsetRatio = 0.5) {
$(selector).each(function () {
var elementTop = $(this).offset().top;
var elementHeight = $(this).height();
var triggerPoint = elementTop + elementHeight * offsetRatio;
if (
triggerPoint >= windowTop &&
triggerPoint <= windowBottom &&
!$(this).hasClass(animationClass)
) {
$(this).addClass(animationClass);
}
});
}
handleAnimationOnce('.hide0', 'animationvisible', 0.1);
handleAnimationOnce('.hide1', 'animationvisible1', 0.5);
handleAnimationOnce('.hide2', 'animationvisible2', 0.5);
handleAnimationOnce('.hide3', 'animationvisible3', 0.5);
handleAnimationOnce('.rotate0', 'animationrotate0', 0.5);
handleAnimationOnce('.zoomin', 'animationvisible5', 0.5);
});
init();
});
//orbitbar無障礙js
$(document).ready(function() {
const isEnglish = document.documentElement.lang === 'en';
if (isEnglish) {
$('.navbar-toggle').attr({
title: 'menu',
'aria-label': 'menu'
});
$('label[for="open-orbit-nav"]').attr({
title: 'Site search and language menu',
'aria-label': 'Site search and language menu'
});
$('.mobile-button').attr({
title: 'Language menu',
'aria-label': 'Language menu'
});
} else {
$('label[for="open-orbit-nav"]').attr({
title: '全站収尋及語言切換選單',
'aria-label': '全站収尋及語言切換選單'
});
$('.mobile-button').attr({
title: '語言切換選單',
'aria-label': '語言切換選單'
});
}
$('label[for="open-orbit-login"]').removeAttr('tabindex');
$('#orbit-bar').find('li').each(function() {
var $li = $(this);
// 如果
中没有 元素,则为 设置 tabindex="0"
if ($li.children('a').length === 0) {
$li.attr('tabindex', '0');
} else {
// 如果 中有 元素,则确保 有 tabindex="0"
$li.find('a').attr('tabindex', '0');
// 确保 不影响焦点管理,移除 的 tabindex
$li.removeAttr('tabindex');
// 如果 被聚焦,自动跳转到 元素
$li.on('focus', function() {
$(this).find('a').focus();
});
}
});
$('label[for="open-orbit-nav"]').attr('tabindex', '0');
// 当屏幕宽度小于 768px 时,将 .orbit-bar-search-sign-language 移动到