update
This commit is contained in:
parent
b763199510
commit
fa33de0d34
|
|
@ -1101,56 +1101,59 @@ $(function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ✅ 符合 HM1240404E:title 不應與連結文字或圖片 alt 重複
|
// ✅ 符合 HM1240404E:title 不應與連結文字或圖片 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();
|
||||||
|
|
||||||
// ✅ title 去掉開窗字串後,若與連結文字或圖片原始 alt 相同,則只保留開窗提示
|
// ✅ title 去掉開窗字串後,若與連結文字或圖片原始 alt 相同,則只保留開窗提示
|
||||||
if (
|
// ✅ 新增:若 linkText 包含副檔名且 title 也是同樣檔名,也只保留開窗提示
|
||||||
(titleWithoutWindow === linkText && linkText !== i18n.link) ||
|
if (
|
||||||
(imgAltOriginal !== '' && titleWithoutWindow === imgAltOriginal)
|
(titleWithoutWindow === linkText && linkText !== i18n.link) ||
|
||||||
) {
|
(imgAltOriginal !== '' && titleWithoutWindow === imgAltOriginal) ||
|
||||||
$a.attr('title', windowTask);
|
(fileExt !== '' && linkText.toLowerCase().endsWith('.' + fileExt) && titleWithoutWindow === linkText)
|
||||||
}
|
) {
|
||||||
|
$a.attr('title', windowTask);
|
||||||
// ✅ 最終清理:若 title 出現空括號 () 則移除並補上正確開窗提示
|
return; // ✅ 加上 return,避免繼續執行後面的清理邏輯造成二次污染
|
||||||
var finalTitle = ($a.attr('title') || '').trim();
|
|
||||||
if (finalTitle.includes('()')) {
|
|
||||||
finalTitle = finalTitle.replace(/\(\)/g, '').trim();
|
|
||||||
$a.attr('title', finalTitle + ' ' + windowTask);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ✅ 最終清理:若 title 出現空括號 () 則移除並補上正確開窗提示
|
||||||
|
var finalTitle = ($a.attr('title') || '').trim();
|
||||||
|
if (finalTitle.includes('()')) {
|
||||||
|
finalTitle = finalTitle.replace(/\(\)/g, '').trim();
|
||||||
|
$a.attr('title', finalTitle + ' ' + windowTask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// F. 最終清理:移除冗餘 label,避免螢幕閱讀器唸兩次
|
// F. 最終清理:移除冗餘 label,避免螢幕閱讀器唸兩次
|
||||||
$a.removeAttr('aria-label');
|
$a.removeAttr('aria-label');
|
||||||
});
|
});
|
||||||
|
|
@ -2314,7 +2317,7 @@ $(document).ready(function() {
|
||||||
if ($(window).width() <769) {
|
if ($(window).width() <769) {
|
||||||
$('.modules-menu-level-0').after($('.header-nav'));
|
$('.modules-menu-level-0').after($('.header-nav'));
|
||||||
}else{
|
}else{
|
||||||
$('.navbar-header').before($('.header-nav'));
|
$('.navbar-header').after($('.header-nav'));
|
||||||
};
|
};
|
||||||
$('.sitemenu-vertical .sitemenu-dropdown-toggle').click(function(){
|
$('.sitemenu-vertical .sitemenu-dropdown-toggle').click(function(){
|
||||||
$('.sitemenu-vertical .dropdown-menu').slideToggle();
|
$('.sitemenu-vertical .dropdown-menu').slideToggle();
|
||||||
|
|
@ -2382,7 +2385,7 @@ $(document).ready(function() {
|
||||||
|
|
||||||
$('.modules-menu-level-0').after($('.header-nav'));
|
$('.modules-menu-level-0').after($('.header-nav'));
|
||||||
}else{
|
}else{
|
||||||
$('.navbar-header').before($('.header-nav'));
|
$('.navbar-header').after($('.header-nav'));
|
||||||
};
|
};
|
||||||
|
|
||||||
if ($(window).width() > 821) {
|
if ($(window).width() > 821) {
|
||||||
|
|
@ -3074,6 +3077,104 @@ $(document).ready(function () {
|
||||||
fixSortLinkA11y();
|
fixSortLinkA11y();
|
||||||
fixSearchInputA11y();
|
fixSearchInputA11y();
|
||||||
}, 500);
|
}, 500);
|
||||||
|
});
|
||||||
|
setTimeout(function() {
|
||||||
|
var found = false;
|
||||||
|
$('.navbar-header a[accesskey="M"]').each(function() {
|
||||||
|
if (found) {
|
||||||
|
$(this).remove();
|
||||||
|
} else {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
function fixTabFocusA11y() {
|
||||||
|
var TAB_ID_MAP = {
|
||||||
|
'榮譽榜公告': '68d39935085777e3d824750d',
|
||||||
|
'招生公告': '68d39945085777e3d8247519',
|
||||||
|
'學校公告': '68d39952085777e3d8247525',
|
||||||
|
'系所公告': '68d39960085777e3d8247531',
|
||||||
|
'實習徵才公告': '68d3996f085777e3d824753d',
|
||||||
|
'校外資訊': '68d3997d085777e3d8247549'
|
||||||
|
};
|
||||||
|
|
||||||
|
// 更新 tab li 加上 aria-controls 關聯
|
||||||
|
$('.tab_nav2 li').each(function () {
|
||||||
|
var text = $.trim($(this).text());
|
||||||
|
var targetId = TAB_ID_MAP[text];
|
||||||
|
if (targetId) {
|
||||||
|
$(this).attr('aria-controls', targetId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 移除舊的 click 事件,重新綁定含焦點移轉的版本
|
||||||
|
$('.tab_nav2 li').off('click').on('click', function () {
|
||||||
|
var text = $.trim($(this).text());
|
||||||
|
var targetId = TAB_ID_MAP[text];
|
||||||
|
if (!targetId) return;
|
||||||
|
|
||||||
|
var $target = $('[data-subpart-id="' + targetId + '"]');
|
||||||
|
if (!$target.length) return;
|
||||||
|
|
||||||
|
// 找到區塊內第一個可聚焦的元素
|
||||||
|
var $firstFocusable = $target.find(
|
||||||
|
'a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
||||||
|
).filter(':visible').first();
|
||||||
|
|
||||||
|
// 捲動到目標區塊
|
||||||
|
$('html, body').animate({
|
||||||
|
scrollTop: $target.offset().top - 200
|
||||||
|
}, 500, function () {
|
||||||
|
if ($firstFocusable.length) {
|
||||||
|
// 有可聚焦元素就直接 focus 到第一個
|
||||||
|
$firstFocusable.focus();
|
||||||
|
} else {
|
||||||
|
// 沒有的話 fallback 到區塊本身
|
||||||
|
$target.attr('tabindex', '-1').focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 鍵盤 Enter / Space 也觸發同樣行為
|
||||||
|
$('.tab_nav2 li').off('keydown.tabFocus').on('keydown.tabFocus', function (e) {
|
||||||
|
if (e.keyCode === 13 || e.keyCode === 32) {
|
||||||
|
e.preventDefault();
|
||||||
|
$(this).trigger('click');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
setTimeout(fixTabFocusA11y, 500);
|
||||||
|
});
|
||||||
|
function fixYoutubeiframeTitle() {
|
||||||
|
// 建立影片 ID 對應標題的對照表
|
||||||
|
var YOUTUBE_TITLE_MAP = {
|
||||||
|
'0HJlYrG4FCk': '國立虎尾科技大學多媒體設計系系所介紹影片'
|
||||||
|
// 可繼續補充其他影片 ID 與對應標題
|
||||||
|
// 'xxxxxxxx': '另一支影片的描述'
|
||||||
|
};
|
||||||
|
|
||||||
|
$('iframe[src*="youtube.com/embed"]').each(function () {
|
||||||
|
var $iframe = $(this);
|
||||||
|
var src = $iframe.attr('src') || '';
|
||||||
|
|
||||||
|
// 從 src 取得影片 ID
|
||||||
|
var match = src.match(/youtube\.com\/embed\/([^?&]+)/);
|
||||||
|
if (!match) return;
|
||||||
|
var videoId = match[1];
|
||||||
|
|
||||||
|
// 若 title 是無意義的預設值
|
||||||
|
var currentTitle = $iframe.attr('title') || '';
|
||||||
|
if (currentTitle === '' || currentTitle.toLowerCase() === 'youtube') {
|
||||||
|
var newTitle = YOUTUBE_TITLE_MAP[videoId] || '嵌入式 YouTube 影片(影片ID:' + videoId + ')';
|
||||||
|
$iframe.attr('title', newTitle);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
setTimeout(fixYoutubeiframeTitle, 500);
|
||||||
});
|
});
|
||||||
// 執行 member等高計算,目前改用flexbox故mark掉 by ika 20160105
|
// 執行 member等高計算,目前改用flexbox故mark掉 by ika 20160105
|
||||||
// $(window).load(function() {
|
// $(window).load(function() {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
a[accesskey] {
|
a[accesskey] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
margin-left: -0.9375em;
|
margin-left: -0.9375em;
|
||||||
color: transparent !important;
|
color: #fff !important;
|
||||||
background:transparent !important ;
|
background:transparent !important ;
|
||||||
border:transparent!important;
|
border:transparent!important;
|
||||||
}
|
}
|
||||||
|
|
@ -21,6 +21,7 @@ a[accesskey] {
|
||||||
position: relative!important;
|
position: relative!important;
|
||||||
margin-left: -0.9375em;
|
margin-left: -0.9375em;
|
||||||
color: transparent !important;
|
color: transparent !important;
|
||||||
|
float: left;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,16 +28,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
label[for="open-orbit-login"] {
|
// label[for="open-orbit-login"] {
|
||||||
@media(max-width:768px){
|
// @media(max-width:768px){
|
||||||
display: none!important;
|
// display: none!important;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
[accesskey="U"],[accesskey="W"]{
|
// [accesskey="U"],[accesskey="W"]{
|
||||||
@media(max-width:768px){
|
// @media(max-width:768px){
|
||||||
color: #666!important;
|
// color: #666!important;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
.orbit-bar-inner{
|
.orbit-bar-inner{
|
||||||
[accesskey="U"]{
|
[accesskey="U"]{
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
}
|
}
|
||||||
.header-banner { overflow: hidden; }
|
.header-banner { overflow: hidden; }
|
||||||
.header-nav {
|
.header-nav {
|
||||||
padding:2em 0 0 0;
|
padding:1em 0 0 0;
|
||||||
font-family: $main-font;
|
font-family: $main-font;
|
||||||
text-transform:uppercase;
|
text-transform:uppercase;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -121,12 +121,6 @@
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@media(min-width:769px){
|
|
||||||
|
|
||||||
}
|
|
||||||
@media (min-width: 769px){
|
|
||||||
float: none!important;
|
|
||||||
}
|
|
||||||
// @media (max-width: $screen-sm) {
|
// @media (max-width: $screen-sm) {
|
||||||
// width: 100%;
|
// width: 100%;
|
||||||
// display: flex;
|
// display: flex;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@
|
||||||
//
|
//
|
||||||
// Widget
|
// Widget
|
||||||
// ## gerenral styles
|
// ## gerenral styles
|
||||||
|
.i-archive__file-name {
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
.i-archive__list{
|
.i-archive__list{
|
||||||
.date-thead{
|
.date-thead{
|
||||||
min-width: 4em;
|
min-width: 4em;
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,7 @@
|
||||||
<div class="outdropdowns kenjohn">
|
<div class="outdropdowns kenjohn">
|
||||||
<div class="dropdowns">
|
<div class="dropdowns">
|
||||||
<div class="container header-container">
|
<div class="container header-container">
|
||||||
<div class="header-nav no-print">
|
|
||||||
<a id="accesskey_top" accesskey="U" title="accesskey top" href="#" title="Toolbar">:::</a>
|
|
||||||
{{header-data}}
|
|
||||||
</div>
|
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
<a title="{{site_title_1}}" class="navbar-brand" href="{{home_link_1}}"><img class="site-logo" src="{{logo_url_1}}" alt="site-logo"></a>
|
<a title="{{site_title_1}}" class="navbar-brand" href="{{home_link_1}}"><img class="site-logo" src="{{logo_url_1}}" alt="site-logo"></a>
|
||||||
<script>$(document).ready(function(){var url =$('.site-logo').eq(0).attr('src');if(url == "/assets/default-site-logo.png"){$('.navbar-brand').eq(0).remove();};if($('.navbar-brand').length == 2){$('.site-logo').css('height','auto')};$('.site-logo').eq(0).css('margin-right',0);$('.navbar-brand').css('padding-right',0)})</script>
|
<script>$(document).ready(function(){var url =$('.site-logo').eq(0).attr('src');if(url == "/assets/default-site-logo.png"){$('.navbar-brand').eq(0).remove();};if($('.navbar-brand').length == 2){$('.site-logo').css('height','auto')};$('.site-logo').eq(0).css('margin-right',0);$('.navbar-brand').css('padding-right',0)})</script>
|
||||||
|
|
@ -37,10 +34,13 @@
|
||||||
<span class="icon-bar icon-bar-bottom"></span>
|
<span class="icon-bar icon-bar-bottom"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="header-nav no-print">
|
||||||
|
<a id="accesskey_top" accesskey="U" title="accesskey top" href="#" title="Toolbar">:::</a>
|
||||||
|
{{header-data}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse navbar-collapse modules-menu" id="layout-navigation">
|
<div class="collapse navbar-collapse modules-menu" id="layout-navigation">
|
||||||
<a id="accesskey_menu" title="accesskey menu" accesskey="M" href="#" title="Main menu">:::</a>
|
<a id="accesskey_menu" title="accesskey menu" accesskey="M" href="#" title="Main menu">:::</a>
|
||||||
|
|
||||||
<%= render_menu %>
|
<%= render_menu %>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="header-buttom layout-content-box " data-pp="200"></div> -->
|
<!-- <div class="header-buttom layout-content-box " data-pp="200"></div> -->
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
</dt>
|
</dt>
|
||||||
<dl class="i-archive__file-list" data-list="files" data-level="2">
|
<dl class="i-archive__file-list" data-list="files" data-level="2">
|
||||||
<dd class="i-archive__file-wrap">
|
<dd class="i-archive__file-wrap">
|
||||||
<a class="i-archive__file-name" href="{{file-url}}" target="{{target}}" title="{{file-name}}">{{file-name}}</a>
|
<a class="i-archive__file-name" href="{{file-url}}" target="{{target}}" title="{{file-name}}">{{file-name}} <span class="i-archive__file-type label label-primary {{file-type}}">{{file-type}}</span>
|
||||||
<span class="i-archive__file-type label label-primary {{file-type}}">{{file-type}}</span>
|
</a>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
<span>{{album-title}}</span>
|
<span>{{album-title}}</span>
|
||||||
</h1>
|
</h1>
|
||||||
{{album-description}}
|
{{album-description}}
|
||||||
<div data-level="0" data-list="images">
|
<div class="show-gallery-list" data-level="0" data-list="images">
|
||||||
<div class="show-content col-sm-4">
|
<div class="show-content col-xs-6 col-sm-4">
|
||||||
<div class="show-content-inner">
|
<div class="show-content-inner">
|
||||||
<div class="show-pic">
|
<div class="show-pic">
|
||||||
<a href="{{link_to_show}}" onclick="window.location.hash = '{{link_to_show}}';GalleryTheater();return false;">
|
<a href="{{link_to_show}}" onclick="window.location.hash = '{{link_to_show}}';GalleryTheater();return false;">
|
||||||
|
|
@ -16,3 +16,27 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<style>
|
||||||
|
.show-gallery-list{
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.show-gallery .show-content {
|
||||||
|
@media(max-width:480px){
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
setTimeout(function() {
|
||||||
|
var albumTitle = $('.show-title span').text().trim();
|
||||||
|
|
||||||
|
$('.show-content').each(function(index) {
|
||||||
|
var $img = $(this).find('img');
|
||||||
|
if ($img.attr('alt') === 'gallery image') {
|
||||||
|
$img.attr('alt', albumTitle + (index + 1));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<div class="link-img-wrap{{display_image}}">
|
<div class="link-img-wrap{{display_image}}">
|
||||||
<img src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
<img src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||||
</div>
|
</div>
|
||||||
<a class="widget-content-title" href="{{link_to_show}}" target="{{target}}" title="{{title_text}}">{{title}}</a>
|
<a class="widget-content-title" href="{{link_to_show}}" target="{{target}}" title="{{title_text}}" onclick="{{onclick}}">{{title}}</a>
|
||||||
<span data-list="statuses" data-level="1">
|
<span data-list="statuses" data-level="1">
|
||||||
<span class="label status {{status-class}}">{{status}}</span>
|
<span class="label status {{status-class}}">{{status}}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue