Notice: Firmware Links Under Maintenance We are currently undergoing maintenance on all firmware links. If any links are inaccessible, please email or contact Tech Support for the firmware. We appreciate your patience during the maintenance, thank you for your understanding.

Difference between revisions of "User:JP/common.js"

(Blanked the page)
Line 1: Line 1:
// ==UserScript==
 
// @name        Wikitable filter
 
// @description Filter for wiki tables using the jQuery tablesorter filter widget
 
// @include    *wiki*
 
// @grant      none
 
// @require    http://code.jquery.com/jquery-1.11.3.min.js
 
// @require    https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.22.1/js/jquery.tablesorter.min.js
 
// @require    https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.22.1/js/jquery.tablesorter.widgets.js
 
// @version    1.1
 
// @namespace https://greasyfork.org/users/12797
 
// ==/UserScript==
 
  
// Constants
 
 
SHOW_FILTERS_CLASS = "wikitable_show_filters";
 
FILTERED_CLASS = "wikitable_filter_filtered";
 
 
// Globals
 
style_initialised = false;
 
 
// Functions
 
 
showFilters = function() {
 
  var tbl = $(this).next(".wikitable");
 
  tbl.addClass("tablesorter");
 
  tbl.tablesorter({
 
    "widgets": ["filter"],
 
    "widgetOptions": {
 
      "filter_filteredRow": FILTERED_CLASS
 
    }
 
  });
 
  $(this).hide();
 
  return false;
 
}
 
 
addShowFiltersButton = function() {
 
  var btn = $("<button/>",
 
  { "type": "button",
 
    "class": SHOW_FILTERS_CLASS,
 
    "html": "\u2261 Filters" }
 
  );
 
  btn.click(showFilters);
 
  return btn;
 
}
 
 
initTables = function(tbl) {
 
  if (tbl.length > 0) {
 
    if (!style_initialised) {
 
      // Add our stylesheet
 
      var styleElem = document.createElement('style');
 
      document.head.appendChild(styleElem);
 
      styleSheet = styleElem.sheet;
 
      styleSheet.insertRule("tr."+FILTERED_CLASS+" { display: none; }", 0);
 
      style_initialised = true;
 
    }
 
    // Add button to show the filters
 
    tbl.before(addShowFiltersButton);
 
  }
 
}
 
 
// Main
 
 
// Check if there are wiki tables on this page in the first place
 
var tbl = $("table.wikitable");
 
// Initialise them (if necessary)
 
initTables(tbl.has("thead").has("tbody"));
 
// Register observer that initialises tables that were modified to fit our
 
// criteria.
 
var tblMutationObserver = new MutationObserver(function(mutations) {
 
  var mutatedNodes = new Array();
 
  mutations.forEach(function(mutation) {
 
    mutatedNodes.push(mutation.target);
 
  });
 
  var jqMutatedTbl = $(mutatedNodes);
 
  jqMutatedTbl = jqMutatedTbl.filter(".wikitable").has("thead").has("tbody");
 
  jqMutatedTbl = $.unique(jqMutatedTbl);
 
  // Do not initialise tables twice!
 
  jqMutatedTbl = jqMutatedTbl.not(".tablesorter");
 
  if (jqMutatedTbl.length <= 0) {
 
    return null;
 
  }
 
  console.log(jqMutatedTbl);
 
  initTables(jqMutatedTbl);
 
});
 
tbl.each(function(index, node) {
 
  tblMutationObserver.observe(
 
    // node to be observed
 
    node,
 
    // options
 
    { "childList": true }
 
  );
 
});
 

Revision as of 16:18, 3 August 2016