User:PleaseStand/prevnext.js

( function ( mw, $ ) {

if ( mw.config.get( 'wgNamespaceNumber' ) < 0 ) {

return;

}

mw.messages.set( {

'ps-prevnext-prev-text': '← $1',

'ps-prevnext-next-text': '$1 →'

} );

function findOtherPage( query ) {

var articleId = String( mw.config.get( 'wgArticleId' ) ), x, p;

if ( !query || !query.pageids || !query.pages ) {

return null;

}

for ( x = 0; x < query.pageids.length; ++x ) {

p = query.pageids[x];

if ( p !== articleId ) {

return query.pages[p];

}

}

}

function addLink( $elm, page, msgKey ) {

if ( !page ) {

return;

}

$( '' )

.prop( {

href: page.fullurl,

title: page.title,

} )

.text( mw.message( msgKey, page.title ).plain() )

.appendTo( $elm );

}

function ready() {

var $prev, $next, api = new mw.Api(), baseQuery, nextQuery, prevQuery;

$prev = $( '

' ).insertBefore( '#firstHeading' );

$next = $( '

' ).insertBefore( '#firstHeading' );

baseQuery = {

maxage: 600,

action: 'query',

prop: 'info',

inprop: 'url',

indexpageids: '',

generator: 'allpages',

gapfilterredir: 'nonredirects',

gaplimit: 2,

gapnamespace: mw.config.get( 'wgNamespaceNumber' ),

gapfrom: mw.config.get( 'wgTitle' ),

'continue': ''

};

nextQuery = $.extend( {}, baseQuery, { gapdir: 'ascending' } );

prevQuery = $.extend( {}, baseQuery, { gapdir: 'descending' } );

api.get( nextQuery ).done( function ( data ) {

addLink( $next, findOtherPage( data.query ), 'ps-prevnext-next-text' );

} );

api.get( prevQuery ).done( function ( data ) {

addLink( $prev, findOtherPage( data.query ), 'ps-prevnext-prev-text' );

} );

}

mw.loader.load(

'//en.wikipedia.org/w/index.php?title=User:PleaseStand/prevnext.css&action=raw&ctype=text/css',

'text/css'

);

mw.loader.using( ['mediawiki.api'], function () {

$( ready );

} );

}( mediaWiki, jQuery ) );