MediaWiki:Common.js: Difference between revisions

mNo edit summary
No edit summary
 
(3 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 */
/* Buy Me a Coffee button in sidebar */
(function () {
  function injectBmc() {
    // Try to find either a div we inserted, or the sidebar link we can replace
    var container = document.getElementById('buymeacoffee');


    if (!container) {
function injectBmc() {
      // Fallback: replace a sidebar link whose href ends with "buymeacoffee"
  // Find the placeholder link (works for /Bmc-placeholder and /wiki/Bmc-placeholder)
      var link = document.querySelector('#mw-panel a[href$="buymeacoffee"]');
  var link =
      if (!link) return;
    document.querySelector('#mw-panel a[href$="Bmc-placeholder"]') ||
    document.querySelector('#mw-panel a[href*="Bmc-placeholder"]') ||
    document.querySelector('#mw-panel a[href*="bmc-placeholder"]');


      // Replace the link with a container div
  if (!link) return false;
      container = document.createElement('div');
      container.id = 'buymeacoffee';
      link.parentNode.replaceChild(container, link);
    }


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


    var script = document.createElement('script');
  // Avoid duplicates
    script.src = 'https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js';
  if (li.dataset.loaded === '1') return true;
    script.setAttribute('data-name', 'bmc-button');
  li.dataset.loaded = '1';
    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);
  li.innerHTML = '<div id="bmc-button-container" style="padding:0.25rem 0;"></div>';
  }


   // Run on initial load and after MediaWiki navigation events
   var container = document.getElementById('bmc-button-container');
  if (document.readyState === 'loading') {
   if (!container) return false;
    document.addEventListener('DOMContentLoaded', injectBmc);
   } else {
    injectBmc();
  }


   mw.hook('wikipage.content').add(injectBmc);
   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);
});