User:Hoo man/instantNewPagePatrol.js

/** * Do not copy and paste, instead use:

mw.loader.load( '//en.wikipedia.org/w/index.php?title=User:Hoo_man/instantNewPagePatrol.js&action=raw&ctype=text/javascript' );



/** * Shows one click patrol links directly on Special:NewPages * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @author Marius Hoch < hoo@online.de > */ /*global mw, patrollinks */

mw.loader.using( ['mediawiki.util', 'mediawiki.user', 'mediawiki.api', 'jquery.spinner'], function {	'use strict';

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Newpages' ) { return; }

mw.messages.set( {		'instantNewPagePatrol-patrol': 'Patrol',		'instantNewPagePatrol-error': 'An unexpected error occured',		'instantNewPagePatrol-hideLinks': 'Hide patrol links',		'instantNewPagePatrol-showLinks': 'Add patrol links to this page'	} );

/**	 * Get a link to patrol a certain revision *	 * @param {number} revid *	 * @return {jQuery} */	function getPatrolLink( revid ) { return $( '' ) .attr( 'href', '#' ) .text( mw.msg( 'instantNewPagePatrol-patrol' ) ) .data( 'revid', revid ) .click( doPatrol ); }

/**	 * On click handler for patrol links *	 * @param {object} event */	function doPatrol( event ) { /*jshint validthis:true */

var $elem = $( this ), apiRequest = new mw.Api, $spinner, revid;

event.preventDefault;

// Hide the link and create a spinner to show it inside the brackets. $spinner = $.createSpinner( {			size: 'small',			type: 'inline'		} );

$elem.hide.after( $spinner );

revid = $elem.data( 'revid' );

/**		 * Mark the entry as patrolled */		function markAsDone { $elem .parent.parent //  .removeClass( 'not-patrolled' ); $elem .parent // .remove; }

apiRequest.post( {			action: 'patrol',			token: mw.user.tokens.get( 'patrolToken' ),			revid: revid		} ) .done( markAsDone ) .fail( function( error, info ) {			if ( error === 'notpatrollable' || error === 'nosuchrevid' ) {				// Patrol failed with the above errors =>				// Can't be patrolled, so mark as already patrolled				markAsDone;				return;			}			// Something failed ... restore the link			$spinner.remove;			$elem.show;			mw.notify( mw.msg( 'instantNewPagePatrol-error' ) + ': ' + info.error.info + ' (' + error + ')' );		} ); }

$( document ).ready( function {		$( 'li.not-patrolled' ).each( function( i, elem ) { var $elem = $( elem ), revid;

revid = mw.util.getParamValue(				'oldid',				$elem.children( 'a' ).eq(0).attr( 'href' )			);

$elem.append(				$( ' ' )					.attr( 'class', 'instantNewPagePatrol' )					.append( ' [',						getPatrolLink( revid ), ']'					)			);		} );

$( mw.util.addPortletLink( 'p-cactions', '#', mw.msg( 'instantNewPagePatrol-hideLinks' ), 'toggleInstantNewPagePatrol' ) ) .click( function( event ) {				event.preventDefault;				$( 'span.instantNewPagePatrol' ).toggle;			} ) .toggle(				function {					$( this ).find( 'a' ).text( mw.msg( 'instantNewPagePatrol-showLinks' ) );				},				function {					$( this ).find( 'a' ).text( mw.msg( 'instantNewPagePatrol-hideLinks' ) );				}			);

if ( typeof patrollinks !== 'undefined' && patrollinks.showbydefault === false ) { $( '#toggleInstantNewPagePatrol' ).trigger( 'click' ); }	} ); } );