MediaWiki:Gadget-autosort.js: Difference between revisions

From RuneRealm Wiki
Jump to navigation Jump to search
Content added Content deleted
No edit summary
No edit summary
Tag: Reverted
Line 10: Line 10:
rs.autosort = function () {
rs.autosort = function () {
mw.loader.using('jquery.tablesorter', function () {
mw.loader.using('jquery.tablesorter', function () {
$sortables.each(function () {
$sortables.on("tablesorter-initialized", function() {
var $this = $(this),
$sortables.each(function () {
matched = (' ' + $(this).attr('class') + ' ').match(/autosort=(\d+)[,-]{1}(a|d)/),
var $this = $(this),
$sortCol = $this.find('> thead th:nth-child(' + matched[1] + ')');
matched = (' ' + $(this).attr('class') + ' ').match(/autosort=(\d+)[,-]{1}(a|d)/),
if (matched[2] === 'd') {
$sortCol = $this.find('> thead th:nth-child(' + matched[1] + ')');
// descending
if (matched[2] === 'd') {
$sortCol.click().click();
// descending
} else {
$sortCol.click().click();
// ascending
} else {
$sortCol.click();
// ascending
}
$sortCol.click();
});
}
});
mw.hook('gadget.autosort.sorted').fire($sortables);
mw.hook('gadget.autosort.sorted').fire($sortables);
});
});
});
};
};
mw.hook('wikipage.content').add(function init() {
mw.hook('wikipage.content').add(function init() {
if ($('.jquery-tablesorter').length) {
if ($('.jquery-tablesorter').length) {
setTimeout(rs.autosort, 100);
rs.autosort();
} else {
} else {
// tablesorter plugin has not run yet; observe the first
// tablesorter plugin has not run yet; observe the first

Revision as of 12:50, 9 November 2024

"use strict";

/**
 * For autosorting sortable tables
 * @example <>
 */
(function ($, mw, rs) {
  var $sortables = $('.sortable[class*="autosort="]');
  if (!$sortables.length) return;
  rs.autosort = function () {
    mw.loader.using('jquery.tablesorter', function () {
    	$sortables.on("tablesorter-initialized", function() {
	      $sortables.each(function () {
	        var $this = $(this),
	          matched = (' ' + $(this).attr('class') + ' ').match(/autosort=(\d+)[,-]{1}(a|d)/),
	          $sortCol = $this.find('> thead th:nth-child(' + matched[1] + ')');
	        if (matched[2] === 'd') {
	          // descending
	          $sortCol.click().click();
	        } else {
	          // ascending
	          $sortCol.click();
	        }
	      });
	      mw.hook('gadget.autosort.sorted').fire($sortables);
	    });
    });
  };
  mw.hook('wikipage.content').add(function init() {
    if ($('.jquery-tablesorter').length) {
      rs.autosort();
    } else {
      // tablesorter plugin has not run yet; observe the first
      // sortable table element and wait for the plugin to add
      // the 'jquery-tablesorter' class to it
      new MutationObserver(function (muts, obs) {
        if (muts[0].target.classList.contains('jquery-tablesorter')) {
          window.rs.autosort();
          obs.disconnect();
        }
      }).observe($sortables[0], {
        attributes: true,
        attributeFilter: ['class']
      });
    }

    // only run once
    mw.hook('wikipage.content').remove(init);
  });
})(jQuery, mediaWiki, rswiki);