MediaWiki:Gadget-faith-index.js
来自SOKA CAFE
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:按 Ctrl-F5。
// MediaWiki:Gadget-faith-index.js (function () { 'use strict'; // 避免多次初始化 if (window.__faithIndexInit) return; window.__faithIndexInit = true; // 在页面就绪时运行(兼容可视化编辑后的局部刷新) function init($root) { var container = ($root || document).querySelector('.faith-index-container'); if (!container) return; var analyzeBtn = container.querySelector('#faith-index-analyzeBtn'); var usernameInput = container.querySelector('#faith-index-username'); function showError(message) { var errorMsg = container.querySelector('#faith-index-errorMsg'); if (errorMsg) { errorMsg.textContent = message; errorMsg.style.display = 'block'; } } function hideError() { var errorMsg = container.querySelector('#faith-index-errorMsg'); if (errorMsg) errorMsg.style.display = 'none'; } function calculateFaithIndex(username) { var hash = 0; if (!username || !username.length) return 0; for (var i = 0; i < username.length; i++) { var char = username.charCodeAt(i); hash = ((hash << 5) - hash) + char; hash = hash & hash; // 32位 } return Math.abs(hash) % 101; } function getFaithComment(score) { if (score <= 20) { return "信仰指数较低,信心还需磨练。请多参加活动,加强学习,在广布的道路上继续精进!"; } else if (score <= 40) { return "作为一名初信者,你的信心正在萌芽。坚持每日的实践,你将见证不可思议的功德!"; } else if (score <= 60) { return "信心坚定,是广布的有力实践者。你的存在本身就是胜利的证明,请继续鼓励身边的同志!"; } else if (score <= 80) { return "不愧是池田门生,信心强盛如狮子王!你的祈愿必将实现,继续作为常胜的先驱奋斗吧!"; } else { return "了不起!你拥有佛的生命,是人间革命的先锋。你的生命正在闪耀着最尊贵的光芒!"; } } function runOnce() { var resultDiv = container.querySelector('#faith-index-result'); var loader = container.querySelector('#faith-index-loader'); var btnText = container.querySelector('#faith-index-btnText'); if (!analyzeBtn || !usernameInput) return; var username = usernameInput.value.trim(); if (!username) { showError('请输入您的名字!'); if (resultDiv) resultDiv.style.display = 'none'; return; } hideError(); // 交互小状态(可选) if (loader) loader.style.display = 'inline-block'; if (btnText) btnText.textContent = '计算中...'; analyzeBtn.disabled = true; // 计算 & 展示(加入少许延时以便过渡) setTimeout(function () { var score = calculateFaithIndex(username); var comment = getFaithComment(score); container.querySelector('#faith-index-resultUsername').textContent = username; container.querySelector('#faith-index-scoreDisplay').textContent = score + '%'; container.querySelector('#faith-index-comment').textContent = comment; if (resultDiv) resultDiv.style.display = 'block'; setTimeout(function () { var meterFill = container.querySelector('#faith-index-meterFill'); if (meterFill) meterFill.style.width = score + '%'; }, 100); if (loader) loader.style.display = 'none'; if (btnText) btnText.textContent = '开始测试'; analyzeBtn.disabled = false; }, 200); } analyzeBtn && analyzeBtn.addEventListener('click', runOnce); usernameInput && usernameInput.addEventListener('keypress', function (e) { if (e.key === 'Enter') runOnce(); }); } if (window.mw && mw.hook) { mw.hook('wikipage.content').add(function ($content) { // $content 可能是 jQuery 对象或原生节点 var root = $content && $content[0] ? $content[0] : document; init(root); }); } else { // 兜底(极简环境) document.addEventListener('DOMContentLoaded', function () { init(document); }); } })();