MediaWiki:Gadget-term-num.js
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5.
- Opera: Naciśnij klawisze Ctrl+F5.
/**
* Zamiana łącznika na półpauzę w zakresach i owijanie w <span class="term-num">.
*
* Zmierzony narzut czasowy na stronie [[Uganda]] (FF 75.0): ~16 ms. Dwukrotnie
* wydajniejsze rozwiązanie od iterowania po węzłach za pomocą pętli.
*/
// https://regex101.com/r/v7tm5S/2/
var reNum = /\((?:(?:\d+|\d+-\d+|\d+\.\d+(?:-\d+)?)(?:, *)?)+\)/,
reDash = /([0-9])-([0-9])/g;
mw.hook( 'wikipage.content' ).add( function ( $content ) {
var num, text, span, index,
walker = document.createTreeWalker(
$content.find( '.mw-parser-output' )[ 0 ],
NodeFilter.SHOW_TEXT,
function ( node ) {
return reNum.test( node.nodeValue )
? NodeFilter.FILTER_ACCEPT
: NodeFilter.FILTER_REJECT;
}
);
while ( walker.nextNode() ) {
num = walker.currentNode.nodeValue.match( reNum )[ 0 ];
text = document.createTextNode( num.replace( reDash, '$1–$2' ) );
span = document.createElement( 'span' );
span.className = 'term-num';
span.appendChild( text );
if ( walker.currentNode.nodeValue !== num ) {
index = walker.currentNode.nodeValue.indexOf( num );
if ( index !== 0 ) {
walker.currentNode = walker.currentNode.splitText( index );
}
walker.currentNode.splitText( num.length );
}
walker.currentNode.parentNode.replaceChild( span, walker.currentNode );
walker.currentNode = text;
}
} );