Difference between revisions of "User:JP/common.js"
Line 60: | Line 60: | ||
} | } | ||
} | } | ||
+ | // ==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 } | ||
+ | ); | ||
+ | }); |
Latest revision as of 16:43, 4 August 2016
var tfConfig = {
base_path: 'tablefilter/',
alternate_rows: true,
btn_reset: true,
rows_counter: true,
loader: true,
status_bar: true,
paging: true,
col_0: 'select',
col_1: 'select',
col_2: 'select',
extensions:[{
name: 'sort',
types: [
'string', 'string', 'number',
'number', 'number', 'number',
'number', 'number', 'number'
]
}]
};
var tf = new TableFilter(document.querySelector('#demo'), tfConfig);
// Subscribe to events
// Format cell at initialization
tf.emitter.on(['initialized'], parseRows);
// Format cell upon filtering
tf.emitter.on(['cell-processed'], formatCell);
tf.init();
// Process all rows on start-up
function parseRows(tf){
var cellIndex = 3; // POP column
var rowsIdx = tf.getValidRows();
rowsIdx.forEach(function(idx){
var row = tf.tbl.rows[idx];
var cell = row.cells[cellIndex];
formatCell(tf, cellIndex, cell);
});
}
// Format passed cell with custom logic
function formatCell(tf, cellIndex, cell){
if(cellIndex !== 3){
return;
}
var cellData = parseInt(cell.innerHTML, 10);
// some rows do not contain a numeric value
if(isNaN(cellData)){
return;
}
if(cellData >= 100000){
cell.style.backgroundColor = '#ff0000';
} else if(cellData < 100000 && cellData >= 50000) {
cell.style.backgroundColor = '#3399ff';
} else {
cell.style.backgroundColor = '#cfff33';
}
}
// ==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 }
);
});