75 lines
5.6 KiB
JavaScript
75 lines
5.6 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
var mobile = document.getElementById('mobileMenuBtn');
|
|
if (mobile) mobile.addEventListener('click', function () {
|
|
var menu = document.querySelector('.nav-menu');
|
|
var right = document.querySelector('.nav-right');
|
|
if (menu) { menu.classList.toggle('active'); mobile.setAttribute('aria-expanded', String(menu.classList.contains('active'))); }
|
|
if (right) right.classList.toggle('active');
|
|
});
|
|
document.querySelectorAll('.nav-menu > div > a').forEach(function (link) {
|
|
var dropdown = link.parentElement.querySelector('.nav-cont');
|
|
if (dropdown) link.addEventListener('click', function (event) {
|
|
if (window.innerWidth <= 900) { event.preventDefault(); dropdown.classList.toggle('active'); }
|
|
});
|
|
});
|
|
document.querySelectorAll('.language-selected').forEach(function (button) {
|
|
button.setAttribute('role', 'button'); button.tabIndex = 0; button.setAttribute('aria-haspopup', 'true');
|
|
function toggle(event) { event.stopPropagation(); button.closest('.language-selector').classList.toggle('active'); }
|
|
button.addEventListener('click', toggle);
|
|
button.addEventListener('keydown', function (event) { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); toggle(event); } });
|
|
});
|
|
document.addEventListener('click', function () { document.querySelectorAll('.language-selector.active').forEach(function (element) { element.classList.remove('active'); }); });
|
|
|
|
if (window.Swiper) document.querySelectorAll('.swiper, .swiper-container').forEach(function (element) {
|
|
if (element.swiper || !element.querySelector('.swiper-wrapper')) return;
|
|
var count = element.querySelectorAll('.swiper-slide').length;
|
|
new window.Swiper(element, { loop: count > 1, speed: 550, autoplay: count > 1 ? { delay: 6000, disableOnInteraction: false } : false, pagination: { el: element.querySelector('.swiper-pagination'), clickable: true }, navigation: { nextEl: element.querySelector('.swiper-button-next'), prevEl: element.querySelector('.swiper-button-prev') } });
|
|
});
|
|
document.querySelectorAll('.country-item').forEach(function (item) {
|
|
item.addEventListener('click', function () {
|
|
var siblings = Array.from(item.parentElement.children); var index = siblings.indexOf(item);
|
|
siblings.forEach(function (sibling) { sibling.classList.toggle('active', sibling === item); });
|
|
item.parentElement.parentElement.querySelectorAll('.hot-list').forEach(function (list, i) { list.classList.toggle('active', i === index); });
|
|
});
|
|
});
|
|
document.querySelectorAll('[data-local-filter]').forEach(function (input) {
|
|
input.addEventListener('input', function () {
|
|
var query = input.value.toLowerCase().trim();
|
|
document.querySelectorAll('[data-filter-row]').forEach(function (row) { row.hidden = query && !row.textContent.toLowerCase().includes(query); });
|
|
});
|
|
});
|
|
var search = document.getElementById('document-input');
|
|
var searchButton = document.querySelector('.input-search .search-btn');
|
|
if (search && searchButton) {
|
|
function navigateSearch() { var target = new URL(search.dataset.results || 'document-result.html', location.href); target.searchParams.set('search', search.value.trim()); location.href = target.href; }
|
|
searchButton.setAttribute('role', 'button'); searchButton.tabIndex = 0;
|
|
searchButton.addEventListener('click', navigateSearch);
|
|
search.addEventListener('keydown', function (event) { if (event.key === 'Enter') { event.preventDefault(); navigateSearch(); } });
|
|
}
|
|
var searchData = document.getElementById('static-search-data');
|
|
var results = document.getElementById('static-search-results');
|
|
var queryInput = document.getElementById('static-search-query');
|
|
if (searchData && results && queryInput) {
|
|
var data = JSON.parse(searchData.textContent); var params = new URLSearchParams(location.search); queryInput.value = params.get('search') || '';
|
|
function renderSearch() {
|
|
var query = queryInput.value.trim().toLowerCase(); results.replaceChildren();
|
|
var found = data.items.filter(function (item) { return !query || (item.title + ' ' + item.text).toLowerCase().includes(query); });
|
|
found.forEach(function (item) { var li = document.createElement('li'); var link = document.createElement('a'); link.href = item.href; link.textContent = item.title; li.append(link); results.append(li); });
|
|
if (!found.length) { var li = document.createElement('li'); li.textContent = data.empty; results.append(li); }
|
|
}
|
|
document.getElementById('static-search-form').addEventListener('submit', function (event) { event.preventDefault(); var url = new URL(location.href); url.searchParams.set('search', queryInput.value.trim()); history.replaceState(null, '', url); renderSearch(); });
|
|
queryInput.addEventListener('input', renderSearch); renderSearch();
|
|
}
|
|
document.querySelectorAll('.static-article img, .practice img').forEach(function (img) {
|
|
img.style.cursor = 'zoom-in'; img.addEventListener('click', function () {
|
|
var dialog = document.createElement('dialog'); dialog.className = 'static-lightbox';
|
|
var close = document.createElement('button'); close.type = 'button'; close.setAttribute('aria-label', document.documentElement.lang === 'en' ? 'Close' : '关闭'); close.textContent = '\u00d7';
|
|
var picture = document.createElement('img'); picture.src = img.src; picture.alt = img.alt;
|
|
dialog.append(close, picture); document.body.append(dialog); close.addEventListener('click', function () { dialog.close(); });
|
|
dialog.addEventListener('click', function (event) { if (event.target === dialog) dialog.close(); });
|
|
dialog.addEventListener('close', function () { dialog.remove(); }); dialog.showModal();
|
|
});
|
|
});
|
|
})();
|