/** * Bilingual quote switcher, matching the reference theme's local quote file. * * @package Jio */ (function () { 'use strict'; var REFRESH_MS = 30000; function updateQuote(el) { if (el.dataset.loading === '1') return; el.dataset.loading = '1'; fetch(el.dataset.endpoint, { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, body: 'action=jio_yiyan', }) .then(function (response) { if (!response.ok) throw new Error('HTTP ' + response.status); return response.json(); }) .then(function (response) { var quote = response && response.success && response.data; if (!quote || !quote.cn || !quote.en) throw new Error('empty quote'); // 参考结构:.yiyan 初始为空,由脚本写入首行 .cn 与次行 .en。 var body = el.querySelector('.yiyan'); if (body) { var cn = body.querySelector('.cn'); var en = body.querySelector('.en'); if (cn && en) { cn.textContent = quote.en; en.textContent = quote.cn; } else { body.innerHTML = ''; var lineCn = document.createElement('div'); lineCn.className = 'cn'; lineCn.textContent = quote.en; var lineEn = document.createElement('div'); lineEn.className = 'en'; lineEn.textContent = quote.cn; body.appendChild(lineCn); body.appendChild(lineEn); } } el.classList.remove('is-loading'); el.classList.remove('is-error'); el.classList.add('is-ready'); }) .catch(function () { el.classList.remove('is-loading'); el.classList.add('is-error'); var body = el.querySelector('.yiyan'); if (body && !el.classList.contains('is-ready')) body.textContent = '加载失败,点击重试'; }) .finally(function () { delete el.dataset.loading; }); } function init(root) { var scope = root || document; var elements = []; if (scope.matches && scope.matches('[data-jio-yiyan]')) elements.push(scope); if (scope.querySelectorAll) elements = elements.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-jio-yiyan]'))); elements.forEach(function (el) { if (el.dataset.yiyanBound) return; el.dataset.yiyanBound = '1'; el.addEventListener('click', function () { updateQuote(el); }); el.addEventListener('keydown', function (event) { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); updateQuote(el); } }); updateQuote(el); window.setInterval(function () { if (!document.hidden) updateQuote(el); }, REFRESH_MS); }); } if (window.jQuery) { window.jQuery(document).off('auto_fun.jio-yiyan').on('auto_fun.jio-yiyan', function () { init(document); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init, { once: true }); } else { init(); } })();