MediaWiki:CustomFiltered.js: Difference between revisions
From The Seven Sages of Rome
No edit summary Tag: Reverted |
No edit summary |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 6: | Line 6: | ||
var $bar = $('<div>', { | var $bar = $('<div>', { | ||
id: 'smw-filter-bar', | id: 'smw-filter-bar', | ||
class: 'd-flex justify-content-between align-items-center w-100 mb-2' | |||
}); | }); | ||
var $searchInput = $('<input>', { | // var $searchInput = $('<input>', { | ||
// type: 'text', | |||
// id: 'smw-search-input', | |||
// placeholder: 'Search all columns…', | |||
// class: 'form-control w-auto' | |||
}); | // }); | ||
var $counter = $('<span>', { | var $counter = $('<span>', { | ||
id: 'smw-filter-counter', | id: 'smw-filter-counter', | ||
class: 'text-muted' | |||
}); | }); | ||
$bar.append($searchInput, $counter); | // $bar.append($searchInput, $counter); | ||
$bar.append($counter); | |||
$container.before($bar); | $container.before($bar); | ||
function snapshotSMW() { | function snapshotSMW() { | ||
$ | $container.find('tr.filtered-table-item').each(function () { | ||
$(this).data('smw-hidden', this.style.display === 'none'); | |||
$(this). | |||
}); | }); | ||
} | } | ||
function applySearch() { | function applySearch() { | ||
var term = $.trim($searchInput.val()).toLowerCase(); | // var term = $.trim($searchInput.val()).toLowerCase(); | ||
var total = | var total = 0; | ||
var visible = 0; | var visible = 0; | ||
$ | $container.find('tr.filtered-table-item').each(function () { | ||
var $row = $(this); | var $row = $(this); | ||
total++; | |||
if ($row. | if ($row.data('smw-hidden')) { | ||
$row.hide(); | |||
return; | return; | ||
} | } | ||
if ( | // Reset to visible first, then hide if it doesn't match | ||
$row.show(); | |||
// if (term && $row.text().toLowerCase().indexOf(term) === -1) { | |||
// $row.hide(); | |||
// } else { | |||
visible++; | visible++; | ||
// } | |||
}); | }); | ||
| Line 63: | Line 61: | ||
var observer = new MutationObserver(function (mutations) { | var observer = new MutationObserver(function (mutations) { | ||
var | var smwMutation = mutations.some(function (m) { | ||
return | return $(m.target).hasClass('filtered-table-item'); | ||
}); | }); | ||
if (! | if (!smwMutation) return; | ||
clearTimeout(smwTimer); | clearTimeout(smwTimer); | ||
| Line 77: | Line 71: | ||
snapshotSMW(); | snapshotSMW(); | ||
applySearch(); | applySearch(); | ||
}, 50); | }, 50); | ||
}); | }); | ||
observer.observe($container[0], { | |||
subtree: true, | subtree: true, | ||
attributes: true, | attributes: true, | ||
attributeFilter: ['style'] | attributeFilter: ['style'] | ||
}; | }); | ||
// $searchInput.on('input keyup', function () { | |||
// applySearch(); | |||
// }); | |||
snapshotSMW(); | snapshotSMW(); | ||
applySearch(); | applySearch(); | ||
} | } | ||
Latest revision as of 22:48, 27 February 2026
(function ($) {
function init() {
var $container = $('.filtered-views-container');
if (!$container.length) return;
var $bar = $('<div>', {
id: 'smw-filter-bar',
class: 'd-flex justify-content-between align-items-center w-100 mb-2'
});
// var $searchInput = $('<input>', {
// type: 'text',
// id: 'smw-search-input',
// placeholder: 'Search all columns…',
// class: 'form-control w-auto'
// });
var $counter = $('<span>', {
id: 'smw-filter-counter',
class: 'text-muted'
});
// $bar.append($searchInput, $counter);
$bar.append($counter);
$container.before($bar);
function snapshotSMW() {
$container.find('tr.filtered-table-item').each(function () {
$(this).data('smw-hidden', this.style.display === 'none');
});
}
function applySearch() {
// var term = $.trim($searchInput.val()).toLowerCase();
var total = 0;
var visible = 0;
$container.find('tr.filtered-table-item').each(function () {
var $row = $(this);
total++;
if ($row.data('smw-hidden')) {
$row.hide();
return;
}
// Reset to visible first, then hide if it doesn't match
$row.show();
// if (term && $row.text().toLowerCase().indexOf(term) === -1) {
// $row.hide();
// } else {
visible++;
// }
});
$counter.text('Showing ' + visible + ' of ' + total + ' entries');
}
var smwTimer = null;
var observer = new MutationObserver(function (mutations) {
var smwMutation = mutations.some(function (m) {
return $(m.target).hasClass('filtered-table-item');
});
if (!smwMutation) return;
clearTimeout(smwTimer);
smwTimer = setTimeout(function () {
snapshotSMW();
applySearch();
}, 50);
});
observer.observe($container[0], {
subtree: true,
attributes: true,
attributeFilter: ['style']
});
// $searchInput.on('input keyup', function () {
// applySearch();
// });
snapshotSMW();
applySearch();
}
$(document).ready(function () {
init();
});
}(jQuery));