User:DannyS712/SectionMover.js

// Originaly by User:Flooded with them hundreds// Copied to [[User:DannyS712/SectionMover.js]] after FWTH retired, who took over as maintainer// Install with:// <code><nowiki>{{subst:Iusc|User:DannyS712/SectionMover.js}}</nowiki></code>// or with// <code><nowiki>importScript( 'User:DannyS712/SectionMover.js' ); // Backlink: [[User:DannyS712/SectionMover.js]]</nowiki></code> //// 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, startMoveButton, overlay;if ( mw.config.get( 'wgNamespaceNumber' ) == -1 ) {// is a special pagereturn;}$( 'head' ).append('<style>a.arxylink { font-weight:bold } .arxyhighlight { background-color:#aef9fc }</style>');startMoveButton = mw.util.addPortletLink('p-cactions','#','Move section','pt-oeca','Enter/exit the process',null,null);overlay = $( document.createElement( 'button' ) );$( startMoveButton ).click( function ( e ) {$( '.arxylink' ).click();$( '.arxy' ).toggle();$( '#Movebutton' ).toggle();} );overlay.html( 'move' ).attr( 'id', 'Movebutton' ).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' );}archiveTarget = prompt('Moving' + numOfThreads + ' sections: where should we move them to?',mw.config.get( 'wgPageName' ));if ( !archiveTarget || archiveTarget == mw.config.get( 'wgPageName' ) ) {return alert( 'No target 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: 'Moved sections to [[' + archiveTarget + ']] using [[User:DannyS712/SectionMover.js|SectionMover]]',basetimestamp: revStamp,starttimestamp: revStamp}).done( function ( res1 ) {alert( 'Successfully moved sections from page' );console.log( res1 );new mw.Api().postWithToken('csrf',{action: 'edit',title: archiveTarget,appendtext: '\n' + archiveThis,summary: 'Moved sections from [[' + mw.config.get( 'wgPageName' ) + ']] using [[User:DannyS712/SectionMover.js|SectionMover]]'}).done( function ( res2 ) {alert( 'Successfully added sections to page' );} ).fail( function ( res2 ) {alert( 'failed to add sections to page. manual inspection needed.' );} ).always( function ( res2 ) {console.log( res2 );window.location.reload();} );} ).fail( function ( res1 ) {alert( 'failed to move sections from page. aborting process.' );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 childsectionNumber = header.find( '.mw-editsection a:first' );if ( sectionNumber[ 0 ] ) {sectionNumber = sectionNumber.attr( 'href' ).match( /&section=(\d+)/ );if ( sectionNumber ) {sectionNumber = sectionNumber[ 1 ];} else {// eg <h2>not a real section</h2>sectionNumber = undefined;}}if ( validSections.hasOwnProperty( sectionNumber ) ) {editSection[ 0 ].innerHTML += '&nbsp;'+ '<span class=arxy style=display:none>'+ '<span class=mw-editsection-bracket>[</span>'+ '<a data-section=' + sectionNumber + ' '+ 'onclick=$(this).closest(\':header\').toggleClass(\'arxyhighlight\');$(this).toggleClass(\'arxylink\');>'+ 'move section</a>'+ '<span class=mw-editsection-bracket>]</span>'+ '</span>';}} );} );} );