Template:Playercount: Difference between revisions

From BetaMC Wiki
Jump to navigation Jump to search
move to JSONP, api not compliant with CORS
Copy from intellij to media wiki, simplify to just number
Line 1: Line 1:
<div id="pc-{{{1|1}}}" style="display:inline-block;background:linear-gradient(135deg,#667eea,#764ba2);color:white;padding:12px 20px;border-radius:8px;font-family:sans-serif;box-shadow:0 4px 6px rgba(0,0,0,0.1);margin:10px 0"> <div style="font-size:14px;font-weight:600;margin-bottom:4px">Players Online</div> <div style="font-size:24px;font-weight:700" id="count-{{{1|1}}}">...</div> <div style="font-size:12px;margin-top:4px;opacity:0.8" id="status-{{{1|1}}}">Loading...</div> </div> <script> window['jsonp_{{{1|1}}}'] = function(data) { var count = typeof data === 'number' ? data : (data.players || data.online || data.count || 0); document.getElementById('count-{{{1|1}}}').textContent = count; document.getElementById('status-{{{1|1}}}').textContent = count > 0 ? 'Online' : 'Empty'; document.getElementById('pc-{{{1|1}}}').style.background = count > 0 ? 'linear-gradient(135deg,#10b981,#059669)' : 'linear-gradient(135deg,#667eea,#764ba2)'; }; var script = document.createElement('script'); script.src = 'https://betamc.org:8080/api/players?callback=jsonp_{{{1|1}}}'; script.onerror = function() { document.getElementById('count-{{{1|1}}}').textContent = '✗'; document.getElementById('status-{{{1|1}}}').textContent = 'Offline'; document.getElementById('pc-{{{1|1}}}').style.background = 'linear-gradient(135deg,#ef4444,#dc2626)'; }; document.head.appendChild(script); </script>
<span id="playercount">...</span>
<script>
(function() {
  window.playerCountCallback = function(data) {
    try {
      var count = 0;
      if (typeof data === 'number') {
        count = data;
      } else if (data && typeof data === 'object') {
        count = data.players || data.online || data.count || (Array.isArray(data) ? data.length : 0);
      }
     
      document.getElementById('playercount').textContent = count;
    } catch (e) {
      console.error('Player count callback error:', e);
    }
   
    // Cleanup
    setTimeout(function() {
      var script = document.getElementById('playercount-script');
      if (script && script.parentNode) {
        script.parentNode.removeChild(script);
      }
    }, 1000);
  };
 
  // Error handler
  var handleError = function() {
    document.getElementById('playercount').textContent = '0';
  };
 
  // Create script tag
  var script = document.createElement('script');
  script.id = 'playercount-script';
  script.src = 'https://betamc.org:8080/api/players?callback=playerCountCallback';
  script.onerror = handleError;
  script.onload = function() {
    // If callback wasn't called within 5 seconds, assume error
    setTimeout(function() {
      if (document.getElementById('playercount').textContent === '...') {
        handleError();
      }
    }, 5000);
  };
 
  document.head.appendChild(script);
})();
</script>

Revision as of 06:09, 17 June 2025

... <script> (function() {

 window.playerCountCallback = function(data) {
   try {
     var count = 0;
     if (typeof data === 'number') {
       count = data;
     } else if (data && typeof data === 'object') {
       count = data.players || data.online || data.count || (Array.isArray(data) ? data.length : 0);
     }
     
     document.getElementById('playercount').textContent = count;
   } catch (e) {
     console.error('Player count callback error:', e);
   }
   
   // Cleanup
   setTimeout(function() {
     var script = document.getElementById('playercount-script');
     if (script && script.parentNode) {
       script.parentNode.removeChild(script);
     }
   }, 1000);
 };
 
 // Error handler
 var handleError = function() {
   document.getElementById('playercount').textContent = '0';
 };
 
 // Create script tag
 var script = document.createElement('script');
 script.id = 'playercount-script';
 script.src = 'https://betamc.org:8080/api/players?callback=playerCountCallback';
 script.onerror = handleError;
 script.onload = function() {
   // If callback wasn't called within 5 seconds, assume error
   setTimeout(function() {
     if (document.getElementById('playercount').textContent === '...') {
       handleError();
     }
   }, 5000);
 };
 
 document.head.appendChild(script);

})(); </script>