User:Most2dot0/common.js

From Angelina Jordan Wiki
Revision as of 22:45, 5 November 2025 by Most2dot0 (talk | contribs) (bugfix)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//syntax highlighter
mw.loader.load('//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-DotsSyntaxHighlighter.js&action=raw&ctype=text/javascript');
syntaxHighlighterConfig = { parameterColor: "#FFDD99" }


// Auto-reload page content if marker element is present
$(document).ready(function() {
    const marker = document.getElementById('auto-reload-trigger');
    if (!marker) return;

    const period = Math.max(5, parseInt(marker.dataset.period || "30", 10)); // seconds
    const limit = parseInt(marker.dataset.limit || "10", 10); // max reloads
    let count = 0;

    // Create and insert status display
    const statusBox = $('<div id="auto-reload-status" style="margin:10px 0;padding:5px;border:1px solid #ccc;font-size:90%;width:fit-content;background:#f8f8f8;"></div>');
    statusBox.text(`Reloads done: ${count} / ${limit}`);
    $('#mw-content-text').before(statusBox);

    function reloadContent() {
        if (count >= limit) {
            statusBox.text(`Reload complete (${count}/${limit})`);
            return;
        }
        count++;
        statusBox.text(`Reloads done: ${count} / ${limit}`);

        $.ajax({
            url: location.href,
            cache: false,
            success: function(data) {
                const newContent = $(data).find('#mw-content-text');
                if (newContent.length) {
                    $('#mw-content-text').replaceWith(newContent);
                    mw.hook('wikipage.content').fire($('#mw-content-text'));
                }
            }
        });
    }

    setInterval(reloadContent, period * 1000);
});  

/* test AJAX load of cargo query templates */
$(function() {
  // Reusable function to load one Cargo table
  function loadCargo($div) {
    var $content = $div.find('.mw-collapsible-content');
    if ($content.data('loaded')) return;

    var song = $div.data('song');

    var apiUrl = mw.util.wikiScript('api') + '?action=cargoquery&format=json' +
      '&tables=Performances,Videos' +
      '&join_on=Performances.perfID=Videos.perfID' +
      '&fields=Performances.date,Performances.event,Performances.type,Videos.url,Performances.pos,Performances.comment,Performances.partners' +
      '&where=' + encodeURIComponent('Performances.song="' + song + '"') +
      '&group_by=Performances.perfID' +
      '&order_by=Performances.date,Performances.pos,Videos.rating';

    $.getJSON(apiUrl, function(data) {
      if (!data || !data.cargoquery || !data.cargoquery.length) {
        $content.html('<em>No results found.</em>');
        return;
      }

var rows = data.cargoquery.map(function(entry) {
  var r = entry.title;

  // Event link (to a wiki page of same name)
  var eventLink = r.event
    ? '<a href="' + mw.util.getUrl('Performances#' + r.event) + '">' + mw.html.escape(r.event) + '</a>'
    : '';

  // Date link logic
  var date = r.date || '';
  var dateBase = '';
  var dateMatch = date.match(/^(\d{4})(?:-(\d{2}))?(?:-(\d{2}))?/);
  if (dateMatch) {
    if (dateMatch[3]) {
      dateBase = dateMatch[1] + '-' + dateMatch[2] + '-' + dateMatch[3];
    } else if (dateMatch[2]) {
      dateBase = dateMatch[1] + '-' + dateMatch[2];
    } else {
      dateBase = dateMatch[1];
    }
  }
  var dateLink = dateBase
    ? '<a href="' + mw.util.getUrl('Timeline') + '#' + encodeURIComponent(dateBase) + '">' +
      mw.html.escape(date) + '</a>'
    : mw.html.escape(date);

  return '<tr>' +
    '<td>' + eventLink + '</td>' +
    '<td>' + dateLink + '</td>' +
    '<td>' + mw.html.escape(r.type || '') + '</td>' +
    '<td>' + (r.url ? '<a href="' + mw.html.escape(r.url) + '">Video</a>' : '') + '</td>' +
    '<td>' + mw.html.escape(r.comment || '') + '</td>' +
    '</tr>';
}).join('');

      var table =
        '<table class="wikitable sortable" style="width:100%;margin:0;">' +
        '<tr><th>Event</th><th>Date</th><th>Type</th><th>Video</th><th>Comment</th></tr>' +
        rows +
        '</table>';

      $content.html(table).data('loaded', true);
    }).fail(function() {
      $content.html('<em>Error loading data.</em>');
    });
  }

  // Observe placeholders entering viewport
  var observer = new IntersectionObserver(function(entries) {
    entries.forEach(function(entry) {
      if (entry.isIntersecting) {
        loadCargo($(entry.target));
        observer.unobserve(entry.target); // stop after first load
      }
    });
  }, { rootMargin: '200px' }); // start loading slightly before visible

  $('.cargo-placeholder').each(function() {
    observer.observe(this);
  });
});