信仰指数:修订间差异

来自SOKA CAFE
こばと
こばと留言 | 贡献 (创建页面)
 
(未显示同一用户的5个中间版本)
第1行: 第1行:
<html>
<html>
<head>
<!-- Faith Index (MediaWiki inline, no inline event handlers) -->
    <meta charset="UTF-8">
<div class="fi-root">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <div class="faith-index-body">
    <title>信仰指数测试</title>
     <div class="faith-index-container">
    <style>
      <h1>信仰指数测试</h1>
        * {
      <p class="subtitle">测测你的信仰有多虔诚</p>
            margin: 0;
 
            padding: 0;
      <div class="input-group">
            box-sizing: border-box;
        <label>请输入您的名字:</label>
            font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
        <input class="fi-input" type="text" placeholder="输入名字..." autocomplete="off">
        }
      </div>
       
 
        body {
      <button type="button" class="fi-btn">
            /* Changed background to blue, yellow, and red gradient */
        <span class="fi-btn-text">开始测试</span>
            background: linear-gradient(135deg, #0052a5 0%, #f9e300 50%, #d40000 100%);
        <div class="loader fi-loader" style="display:none;"></div>
            min-height: 100vh;
      </button>
            display: flex;
 
            justify-content: center;
      <div class="error fi-error" style="display:none;"></div>
            align-items: center;
 
            padding: 20px;
      <div class="result fi-result" style="display:none;">
        }
        <h2>测试结果</h2>
       
        <p>姓名: <span class="fi-name"></span></p>
        .container {
        <div class="score fi-score">0%</div>
            background: rgba(255, 255, 255, 0.25);
        <div class="meter"><div class="meter-fill fi-meter" style="width:0%"></div></div>
            backdrop-filter: blur(12px);
        <div class="ranges"><span>0-20</span><span>21-40</span><span>41-60</span><span>61-80</span><span>81-100</span></div>
            border-radius: 20px;
        <div class="comment fi-comment"></div>
            padding: 40px;
        <p class="footer">* 本结果为娱乐目的,基于名字的随机计算,每次查询结果相同</p>
            width: 100%;
      </div>
            max-width: 500px;
            box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
            border: 1px solid rgba(255, 255, 255, 0.4);
            text-align: center;
        }
       
        h1 {
            color: #2c3e50;
            margin-bottom: 10px;
            font-size: 2.2rem;
            font-weight: 600;
        }
       
        .subtitle {
            color: #34495e;
            margin-bottom: 30px;
            font-size: 1rem;
        }
       
        .input-group {
            margin-bottom: 25px;
            text-align: left;
        }
       
        label {
            display: block;
            color: #2c3e50;
            margin-bottom: 8px;
            font-weight: 500;
        }
       
        input {
            width: 100%;
            padding: 15px;
            border-radius: 12px;
            border: none;
            background: rgba(255, 255, 255, 0.5);
            color: #2c3e50;
            font-size: 1rem;
            transition: all 0.3s ease;
            border: 1px solid rgba(255, 255, 255, 0.5);
        }
       
        input:focus {
            outline: none;
            background: rgba(255, 255, 255, 0.7);
            box-shadow: 0 0 0 3px rgba(44, 62, 80, 0.2);
        }
       
        button {
            background: linear-gradient(to right, #34495e, #2c3e50);
            color: white;
            border: none;
            padding: 15px 30px;
            border-radius: 12px;
            font-size: 1.1rem;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s ease;
            width: 100%;
            margin-top: 10px;
            box-shadow: 0 5px 15px rgba(44, 62, 80, 0.3);
            display: flex;
            justify-content: center;
            align-items: center;
            gap: 10px;
        }
       
        button:hover {
            transform: translateY(-3px);
            box-shadow: 0 8px 20px rgba(44, 62, 80, 0.4);
        }
       
        button:active {
            transform: translateY(0);
        }
       
        button:disabled {
            opacity: 0.7;
            cursor: not-allowed;
            transform: none;
        }
       
        .loader {
            width: 20px;
            height: 20px;
            border: 2px solid rgba(255, 255, 255, 0.3);
            border-radius: 50%;
            border-top: 2px solid white;
            animation: spin 1s linear infinite;
        }
       
        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
       
        .result {
            margin-top: 30px;
            padding: 25px;
            border-radius: 15px;
            background: rgba(255, 255, 255, 0.3);
            display: none;
            animation: fadeIn 0.5s ease;
        }
       
        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(10px); }
            to { opacity: 1; transform: translateY(0); }
        }
       
        .result h2 {
            color: #2c3e50;
            margin-bottom: 15px;
        }
       
        .score {
            font-size: 3.5rem;
            font-weight: 800;
            margin: 15px 0;
            color: #2c3e50;
        }
       
        .comment {
            font-size: 1.2rem;
            color: #2c3e50;
            margin: 15px 0;
            padding: 15px;
            border-radius: 10px;
            background: rgba(255, 255, 255, 0.4);
            text-align: left;
            line-height: 1.5;
        }
       
        .meter {
            height: 20px;
            background: rgba(0, 0, 0, 0.1);
            border-radius: 10px;
            margin: 20px 0;
            overflow: hidden;
        }
       
        .meter-fill {
            height: 100%;
            border-radius: 10px;
            transition: width 1s ease;
            background: linear-gradient(to right, #0052a5, #f9e300, #d40000);
        }
       
        .ranges {
            display: flex;
            justify-content: space-between;
            margin-top: 10px;
            color: #34495e;
            font-size: 0.85rem;
        }
       
        .footer {
            margin-top: 30px;
            color: #34495e;
            font-size: 0.9rem;
        }
       
        .error {
            color: #d9534f;
            background: rgba(217, 83, 79, 0.1);
            padding: 10px;
            border-radius: 8px;
            margin-top: 10px;
            display: none;
        }
       
        @media (max-width: 600px) {
            .container {
                padding: 25px;
            }
           
            h1 {
                font-size: 1.8rem;
            }
        }
    </style>
</head>
<body>
     <div class="container">
        <h1>信仰指数测试</h1>
        <p class="subtitle">测测你的信仰有多虔诚</p>
       
        <div class="input-group">
            <label for="username">请输入您的名字:</label>
            <input type="text" id="username" placeholder="输入名字..." autocomplete="off">
        </div>
       
        <button id="analyzeBtn">
            <span id="btnText">开始测试</span>
            <div class="loader" id="loader" style="display: none;"></div>
        </button>
       
        <div class="error" id="errorMsg"></div>
       
        <div class="result" id="result">
            <h2>测试结果</h2>
            <p>姓名: <span id="resultUsername"></span></p>
            <div class="score" id="scoreDisplay">0%</div>
            <div class="meter">
                <div class="meter-fill" id="meterFill" style="width: 0%;"></div>
            </div>
            <div class="ranges">
                <span>0-20</span>
                <span>21-40</span>
                <span>41-60</span>
                <span>61-80</span>
                <span>81-100</span>
            </div>
            <div class="comment" id="comment"></div>
            <p class="footer">* 本结果为娱乐目的,基于名字的随机计算,每次查询结果相同</p>
        </div>
     </div>
     </div>
  </div>
</div>
<style>
/* ---- styles (scoped by .faith-index-*) ---- */
.faith-index-body{background:linear-gradient(135deg,#0052a5 0%,#f9e300 50%,#d40000 100%);min-height:90vh;display:flex;justify-content:center;align-items:center;padding:20px;font-family:'Segoe UI','Microsoft YaHei',sans-serif}
.faith-index-container{background:rgba(255,255,255,.25);backdrop-filter:blur(12px);border-radius:20px;padding:40px;width:100%;max-width:500px;box-shadow:0 8px 32px rgba(0,0,0,.1);border:1px solid rgba(255,255,255,.4);text-align:center;margin:0 auto}
.faith-index-container h1{color:#2c3e50;margin-bottom:10px;font-size:2.2rem;font-weight:600}
.faith-index-container .subtitle{color:#34495e;margin-bottom:30px;font-size:1rem}
.faith-index-container .input-group{margin-bottom:25px;text-align:left}
.faith-index-container label{display:block;color:#2c3e50;margin-bottom:8px;font-weight:500}
.faith-index-container input{width:100%;padding:15px;border-radius:12px;border:none;background:rgba(255,255,255,.5);color:#2c3e50;font-size:1rem;transition:all .3s ease;border:1px solid rgba(255,255,255,.5);box-sizing:border-box}
.faith-index-container input:focus{outline:none;background:rgba(255,255,255,.7);box-shadow:0 0 0 3px rgba(44,62,80,.2)}
.faith-index-container button{background:linear-gradient(to right,#34495e,#2c3e50);color:#fff;border:none;padding:15px 30px;border-radius:12px;font-size:1.1rem;font-weight:600;cursor:pointer;transition:all .3s ease;width:100%;margin-top:10px;box-shadow:0 5px 15px rgba(44,62,80,.3);display:flex;justify-content:center;align-items:center;gap:10px}
.faith-index-container button:hover{transform:translateY(-3px);box-shadow:0 8px 20px rgba(44,62,80,.4)}
.faith-index-container button:active{transform:translateY(0)}
.faith-index-container button[disabled]{opacity:.7;cursor:not-allowed;transform:none}
.faith-index-container .loader{width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-radius:50%;border-top:2px solid #fff;animation:faith-index-spin 1s linear infinite}
@keyframes faith-index-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
.faith-index-container .result{margin-top:30px;padding:25px;border-radius:15px;background:rgba(255,255,255,.3);display:none;animation:faith-index-fadeIn .5s ease}
@keyframes faith-index-fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.faith-index-container .score{font-size:3.5rem;font-weight:800;margin:15px 0;color:#2c3e50}
.faith-index-container .comment{font-size:1.2rem;color:#2c3e50;margin:15px 0;padding:15px;border-radius:10px;background:rgba(255,255,255,.4);text-align:left;line-height:1.5}
.faith-index-container .meter{height:20px;background:rgba(0,0,0,.1);border-radius:10px;margin:20px 0;overflow:hidden}
.faith-index-container .meter-fill{height:100%;border-radius:10px;transition:width 1s ease;background:linear-gradient(to right,#0052a5,#f9e300,#d40000)}
.faith-index-container .ranges{display:flex;justify-content:space-between;margin-top:10px;color:#34495e;font-size:.85rem}
.faith-index-container .footer{margin-top:30px;color:#34495e;font-size:.9rem}
.faith-index-container .error{color:#d9534f;background:rgba(217,83,79,.1);padding:10px;border-radius:8px;margin-top:10px;display:none}
</style>
<script type="text/javascript">
(function(){
  // —— 逻辑函数 —— //
  function calculateFaithIndex(name){
    var hash = 0, i, ch;
    if (!name) return 0;
    for (i=0;i<name.length;i++){
      ch = name.charCodeAt(i);
      hash = ((hash<<5) - hash) + ch;
      hash = hash | 0;
    }
    return Math.abs(hash) % 101;
  }
  function getFaithComment(score){
    if (score <= 20) return "信仰指数较低,信心还需磨练。请多参加活动,加强学习,在广布的道路上继续精进!";
    if (score <= 40) return "作为一名初信者,你的信心正在萌芽。坚持每日的实践,你将见证不可思议的功德!";
    if (score <= 60) return "信心坚定,是广布的有力实践者。你的存在本身就是胜利的证明,请继续鼓励身边的同志!";
    if (score <= 80) return "不愧是池田门生,信心强盛如狮子王!你的祈愿必将实现,继续作为常胜的先驱奋斗吧!";
    return "了不起!你拥有佛的生命,是人间革命的先锋。你的生命正在闪耀着最尊贵的光芒!";
  }
  function bindOne(root){
    if (!root || root.__fiBound) return;
    root.__fiBound = true;
    var input  = root.querySelector('.fi-input');
    var btn    = root.querySelector('.fi-btn');
    var btnTxt = root.querySelector('.fi-btn-text');
    var loader = root.querySelector('.fi-loader');
    var result = root.querySelector('.fi-result');
    var error  = root.querySelector('.fi-error');
    var nameEl = root.querySelector('.fi-name');
    var scoreEl= root.querySelector('.fi-score');
    var cmtEl  = root.querySelector('.fi-comment');
    var meter  = root.querySelector('.fi-meter');


     <script>
     function showError(msg){ if(!error) return; error.textContent=msg; error.style.display='block'; }
        document.getElementById('analyzeBtn').addEventListener('click', function() {
    function hideError(){ if(error) error.style.display='none'; }
            const username = document.getElementById('username').value.trim();
            const resultDiv = document.getElementById('result');
           
            if (!username) {
                showError('请输入您的名字!');
                resultDiv.style.display = 'none';
                return;
            }
           
            hideError();
           
            // 计算信仰指数
            const score = calculateFaithIndex(username);
           
            // 获取评价
            const comment = getFaithComment(score);
           
            // 显示结果
            document.getElementById('resultUsername').textContent = username;
            document.getElementById('scoreDisplay').textContent = score + '%';
            document.getElementById('comment').textContent = comment;
            resultDiv.style.display = 'block';


            // 延迟设置宽度以触发动画
    function run(){
            setTimeout(() => {
      var username = (input && input.value || '').trim();
                document.getElementById('meterFill').style.width = score + '%';
      if (!username){
            }, 100);
        showError('请输入您的名字!');
        });
        if (result) result.style.display = 'none';
       
        return;
        // 确定性算法计算信仰指数(0-100)
      }
        function calculateFaithIndex(username) {
      hideError();
            let hash = 0;
      if (loader) loader.style.display = 'inline-block';
            for (let i = 0; i < username.length; i++) {
      if (btnTxt) btnTxt.textContent = '计算中...';
                const char = username.charCodeAt(i);
      if (btn)    btn.disabled = true;
                hash = ((hash << 5) - hash) + char;
 
                hash = hash & hash; // 转换为32位整数
      setTimeout(function(){
            }
        try{
            // 将哈希值映射到0-100的范围
          var score = calculateFaithIndex(username);
            return Math.abs(hash) % 101;
          if (nameEl)  nameEl.textContent  = username;
          if (scoreEl) scoreEl.textContent = score + '%';
          if (cmtEl)   cmtEl.textContent  = getFaithComment(score);
          if (result)  result.style.display = 'block';
          setTimeout(function(){ if (meter) meter.style.width = score + '%'; }, 60);
        } finally {
          if (loader) loader.style.display = 'none';
          if (btnTxt) btnTxt.textContent = '开始测试';
          if (btn)   btn.disabled = false;
         }
         }
       
      }, 80);
        // 根据分数生成评价
    }
        function getFaithComment(score) {
 
            if (score <= 20) {
    // 事件绑定(不使用 inline handler)
                return "信仰指数较低,信心还需磨练。请多参加活动,加强学习,在广布的道路上继续精进!";
    if (btn)  btn.addEventListener('click', run);
            } else if (score <= 40) {
    if (input) input.addEventListener('keydown', function(e){ if (e.key === 'Enter') run(); });
                return "作为一名初信者,你的信心正在萌芽。坚持每日的实践,你将见证不可思议的功德!";
 
            } else if (score <= 60) {
    // 兜底委托:DOM 若被替换,仍可触发
                return "信心坚定,是广布的有力实践者。你的存在本身就是胜利的证明,请继续鼓励身边的同志!";
    root.addEventListener('click', function(e){
            } else if (score <= 80) {
      var b = e.target.closest && e.target.closest('.fi-btn');
                return "不愧是池田门生,信心强盛如狮子王!你的祈愿必将实现,继续作为常胜的先驱奋斗吧!";
      if (b && root.contains(b)) run();
            } else {
    });
                return "了不起!你拥有佛的生命,是人间革命的先锋。你的生命正在闪耀着最尊贵的光芒!";
  }
            }
 
        }
  function bindAll(ctx){
       
    var scope = ctx || document;
        // 显示错误信息
    var roots = scope.querySelectorAll ? scope.querySelectorAll('.fi-root') : [];
        function showError(message) {
    for (var i=0; i<roots.length; i++) bindOne(roots[i]);
            const errorMsg = document.getElementById('errorMsg');
  }
             errorMsg.textContent = message;
 
             errorMsg.style.display = 'block';
  // 1) 立刻尝试
  bindAll(document);
 
  // 2) 常见时机再尝试
  if (document.readyState === 'complete') {
    bindAll(document);
  } else {
    // DOMContentLoaded / load
    document.addEventListener('DOMContentLoaded', function(){ bindAll(document); });
    window.addEventListener('load', function(){ bindAll(document); });
  }
 
  // MediaWiki 的局部刷新
  if (window.mw && mw.hook) {
    mw.hook('wikipage.content').add(function($c){
      var node = $c && $c[0] ? $c[0] : document;
      bindAll(node);
    });
  }
 
  // 3) 监听 DOM 变化:新加/替换时自动绑定
  try {
    var mo = new MutationObserver(function(muts){
      for (var i=0;i<muts.length;i++){
        var m = muts[i];
        if (m.type === 'childList') {
          // 直接子节点
          for (var j=0;j<m.addedNodes.length;j++){
             var n = m.addedNodes[j];
            if (!n || n.nodeType !== 1) continue;
             if (n.matches && n.matches('.fi-root')) bindOne(n);
            if (n.querySelectorAll) bindAll(n);
          }
         }
         }
      }
    });
    mo.observe(document.documentElement || document.body, { childList:true, subtree:true });
  } catch(_) {}
})();
</script>


        // 隐藏错误信息
        function hideError() {
            const errorMsg = document.getElementById('errorMsg');
            errorMsg.style.display = 'none';
        }
       
        // 按Enter键也可以触发查询
        document.getElementById('username').addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                document.getElementById('analyzeBtn').click();
            }
        });
    </script>
</body>
</html>
</html>

2025年10月12日 (日) 16:40的版本

信仰指数测试

测测你的信仰有多虔诚