Jump to content

MediaWiki:Common.js: Difference between revisions

From Raleighpedia
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/* Buy Me a Coffee button in sidebar */
document.addEventListener('DOMContentLoaded', function () {
 
   // Find the "Buy Raleighpedia a coffee" sidebar link
function injectBmc() {
   var links = document.querySelectorAll('#mw-panel a');
   // Find the placeholder link (works for /Bmc-placeholder and /wiki/Bmc-placeholder)
   var target = null;
   var link =
    document.querySelector('#mw-panel a[href$="Bmc-placeholder"]') ||
    document.querySelector('#mw-panel a[href*="Bmc-placeholder"]') ||
    document.querySelector('#mw-panel a[href*="bmc-placeholder"]');
 
   if (!link) return false;


   links.forEach(function (a) {
   // Replace the whole <li> contents so we don't keep a bullet link
    if ((a.textContent || '').trim() === 'Buy Raleighpedia a coffee') target = a;
  var li = link.closest('li');
   });
   if (!li) return false;


   if (!target) {
  // Avoid duplicates
    console.log('BMC: sidebar link not found');
   if (li.dataset.loaded === '1') return true;
    return;
   li.dataset.loaded = '1';
   }


   // Replace link with a container div
   li.innerHTML = '<div id="bmc-button-container" style="padding:0.25rem 0;"></div>';
  var container = document.createElement('div');
  container.id = 'buymeacoffee';
  target.parentNode.replaceChild(container, target);


   console.log('BMC: container inserted');
   var container = document.getElementById('bmc-button-container');
  if (!container) return false;


  // Load Buy Me a Coffee button script
   var script = document.createElement('script');
   var script = document.createElement('script');
   script.src = 'https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js';
   script.src = 'https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js';
Line 35: Line 36:
   script.setAttribute('data-coffee-color', '#ffffff');
   script.setAttribute('data-coffee-color', '#ffffff');


   script.onload = function () { console.log('BMC: script loaded'); };
   container.appendChild(script);
   script.onerror = function (e) { console.log('BMC: script failed', e); };
   return true;
}


   container.appendChild(script);
document.addEventListener('DOMContentLoaded', function () {
   // Try a few times because Vector 2022 can re-render the sidebar
  injectBmc();
  setTimeout(injectBmc, 300);
  setTimeout(injectBmc, 1200);
});
});

Latest revision as of 15:48, 29 January 2026

/* Buy Me a Coffee button in sidebar */

function injectBmc() {
  // Find the placeholder link (works for /Bmc-placeholder and /wiki/Bmc-placeholder)
  var link =
    document.querySelector('#mw-panel a[href$="Bmc-placeholder"]') ||
    document.querySelector('#mw-panel a[href*="Bmc-placeholder"]') ||
    document.querySelector('#mw-panel a[href*="bmc-placeholder"]');

  if (!link) return false;

  // Replace the whole <li> contents so we don't keep a bullet link
  var li = link.closest('li');
  if (!li) return false;

  // Avoid duplicates
  if (li.dataset.loaded === '1') return true;
  li.dataset.loaded = '1';

  li.innerHTML = '<div id="bmc-button-container" style="padding:0.25rem 0;"></div>';

  var container = document.getElementById('bmc-button-container');
  if (!container) return false;

  var script = document.createElement('script');
  script.src = 'https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js';
  script.async = true;

  script.setAttribute('data-name', 'bmc-button');
  script.setAttribute('data-slug', 'Raleighpedia');
  script.setAttribute('data-color', '#FFDD00');
  script.setAttribute('data-font', 'Lato');
  script.setAttribute('data-text', 'Buy Raleighpedia a coffee');
  script.setAttribute('data-outline-color', '#000000');
  script.setAttribute('data-font-color', '#000000');
  script.setAttribute('data-coffee-color', '#ffffff');

  container.appendChild(script);
  return true;
}

document.addEventListener('DOMContentLoaded', function () {
  // Try a few times because Vector 2022 can re-render the sidebar
  injectBmc();
  setTimeout(injectBmc, 300);
  setTimeout(injectBmc, 1200);
});