Template:Playercount: Difference between revisions

From BetaMC Wiki
Jump to navigation Jump to search
Garsooon (talk | contribs)
move to JSONP, api not compliant with CORS
Garsooon (talk | contribs)
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>

Latest 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>