User:DannyS712/SectionRemover.js
From Wikipedia, the free encyclopedia
// 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( '<style>a.arxylink { font-weight:bold } .arxyhighlight { background-color:#b3ffcc }</style>' );
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 += ' ' + '' + '[' + '<a data-section=' + sectionNumber + ' ' + 'onclick=$(this).closest(\':header\').toggleClass(\'arxyhighlight\');$(this).toggleClass(\'arxylink\');>' + 'remove section</a>' + ']' + ''; } } ); } ); } );