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:

// {{subst:Iusc|User:DannyS712/SectionRemover.js}}

// or with

// importScript( 'User:DannyS712/SectionRemover.js' ); // Backlink: User:DannyS712/SectionRemover.js

//

// 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(

''

);

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( /§ion=(\d+)/ );

if ( sectionNumber ) {

sectionNumber = sectionNumber[ 1 ];

} else {

// eg

not a real section

sectionNumber = undefined;

}

}

if ( validSections.hasOwnProperty( sectionNumber ) ) {

editSection[ 0 ].innerHTML += ' '

+ '

+ '['

+ '

+ 'onclick=$(this).closest(\':header\').toggleClass(\'arxyhighlight\');$(this).toggleClass(\'arxylink\');>'

+ 'remove section'

+ ']'

+ '';

}

} );

} );

} );