User:DannyS712/SectionRemover.js

// Originaly by User:Flooded with them hundreds // Copied to User:DannyS712/SectionRemover.js after FWTH retired, who took over as maintainer // Install with: // // or with //  // // If forking this script, please give both of use credit $.when( mw.loader.using(['mediawiki.util','mediawiki.api']), $.ready).done( function {	var validSections = {},		fromTos = {},		wikiText = '',		revStamp, startRemoveButton, overlay;

if ( mw.config.get( 'wgNamespaceNumber' ) == -1 ) { // is a special page return; }	$( 'head' ).append(		' a.arxylink { font-weight:bold } .arxyhighlight { background-color:#b3ffcc } '	);

startRemoveButton = mw.util.addPortletLink(		'p-cactions',		'#',		'Remove section',		'pt-oeca',		'Enter/exit the removal process',		null,		null	); overlay = $( document.createElement( 'button' ) ); $( startRemoveButton ).click( function ( e ) {		$( '.arxylink' ).click;		$( '.arxy' ).toggle;		$( '#Removebutton' ).toggle;	} ); overlay.html( 'remove' ) .attr( 'id', 'Removebutton' ) .css( 'position', 'fixed' ) .css( 'bottom', '20px' ) .css( 'height', '50px' ) .css( 'width', '100%' ) .css( 'font-size', '200%' ); $( document.body ).append( overlay ); overlay.toggle; overlay.click( function ( e ) {		var numOfThreads, archiveTarget, sections, archiveThis, cutOffset,			revisedPage;		function cut( s, start, end ) {			return s.substr( 0, start ) + s.substring( end );		}		cutOffset = numOfThreads = 0;		revisedPage = wikiText;		sections = $( 'a.arxylink' ).map( function { return $( this ).attr( 'data-section' ); } );		if ( !( numOfThreads = sections.length ) ) {			return alert( 'No sections selected, aborting' );		}		sections.each( function ( i, n ) { revisedPage = cut(				revisedPage,				fromTos[ n ][ 0 ] - cutOffset,				fromTos[ n ][ 1 ] - cutOffset			); cutOffset += fromTos[ n ][ 1 ] - fromTos[ n ][ 0 ]; } );		archiveThis = sections.map( function { return wikiText.substring( fromTos[ this ][ 0 ], fromTos[ this ][ 1 ] ); } ).toArray.join( '' );		console.log( 'archive this:' + archiveThis );		console.log( 'revised page:' + revisedPage );		if ( 1 ) {			new mw.Api.postWithToken( 'csrf', {					action: 'edit', title: mw.config.get( 'wgPageName' ), text: revisedPage, summary: 'Removed sections using SectionRemover', basetimestamp: revStamp, starttimestamp: revStamp }			).done( function ( res1 ) { alert( 'Successfully removed sections' ); console.log( res1 ); } ).fail( function ( res1 ) { alert( 'failed to remove sections. aborting.' ); console.log( res1 ); window.location.reload; } );		}	} );	new mw.Api.get( {		action: 'parse',		page: mw.config.get( 'wgPageName' )	} ).done( function ( dataShit ) {			var i;			new mw.Api.get( { action: 'query', pageids: mw.config.get( 'wgArticleId' ), prop: [ 'revisions' ], rvprop: [ 'content', 'timestamp' ] } ).done( function ( shit ) { var rv; rv = shit.query.pages[ mw.config.get( 'wgArticleId' ) ].revisions[ 0 ]; wikiText = rv[ '*' ]; revStamp = rv.timestamp; } );			$( dataShit.parse.sections )				.filter( function ( i, s ) { return s.index == parseInt( s.index ) } )				.each( function ( i, s ) { validSections[ s.index ] = s } );			for ( i in validSections ) {				i = parseInt( i );				fromTos[ i ] = [					validSections[ i ].byteoffset,					validSections.hasOwnProperty( i + 1 ) ? validSections[ i + 1 ].byteoffset : Infinity				];			}			$( '#mw-content-text' )				.find( ':header' )				.find( 'span.mw-headline' )				.each( function ( i, title ) { var header, editSection, sectionNumber; header = $( this ).parent; editSection = header.find( '.mw-editsection' ); // 1st child sectionNumber = header.find( '.mw-editsection a:first' ); if ( sectionNumber[ 0 ] ) { sectionNumber = sectionNumber.attr( 'href' ).match( /&section=(\d+)/ ); if ( sectionNumber ) { sectionNumber = sectionNumber[ 1 ]; } else { // eg not a real section sectionNumber = undefined; }					}					if ( validSections.hasOwnProperty( sectionNumber ) ) { editSection[ 0 ].innerHTML += ' ' + ' '							+ ' [ '							+ '' + 'remove section' + ' ] '							+ ' ';					}				} );		} ); } );