MediaWiki:Common.js
MediaWiki interface page
More actions
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.
( function () {
function initFilter( filter ) {
var targetSelector = filter.getAttribute( 'data-target' );
var table = targetSelector ? document.querySelector( targetSelector ) : null;
if ( !table ) {
return;
}
var rows = Array.prototype.slice.call( table.querySelectorAll( 'tr.item-list__row' ) );
var selects = Array.prototype.slice.call( filter.querySelectorAll( 'select[data-filter]' ) );
var count = filter.querySelector( '[data-filter-count]' );
var reset = filter.querySelector( '[data-filter-reset]' );
function applyFilters() {
var visible = 0;
rows.forEach( function ( row ) {
var keep = selects.every( function ( select ) {
var value = select.value;
var key = select.getAttribute( 'data-filter' );
return !value || row.dataset[ key ] === value;
} );
row.hidden = !keep;
if ( keep ) {
visible += 1;
}
} );
if ( count ) {
count.textContent = visible + ' items';
}
}
selects.forEach( function ( select ) {
select.addEventListener( 'change', applyFilters );
} );
if ( reset ) {
reset.addEventListener( 'click', function () {
selects.forEach( function ( select ) {
select.value = '';
} );
applyFilters();
} );
}
applyFilters();
}
mw.hook( 'wikipage.content' ).add( function ( $content ) {
var content = $content && $content[ 0 ] ? $content[ 0 ] : document;
Array.prototype.forEach.call( content.querySelectorAll( '.domwiki-filter' ), initFilter );
} );
}() );