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); });
}
})();
