User:Hoo man/enhancedDelete.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/**
* @author Marius Hoch
*/
( function( mw, $ ) {
'use strict';
if ( mw.config.get( 'wgAction' ) !== 'delete' ) {
return;
}
function main( $content ) {
if ( $( '#mw-returnto' ).length ) {
// Post-delete confirmation
return;
}
var pageName = mw.config.get( 'wgPageName' ),
$historyDiv,
$historyHead,
$whatLinksHereDiv,
$whatLinksHereHead,
warningBoxLink = $( '.mw-message-box-warning a' ).first().attr( 'href' ),
hasWhatLinksHere = false;
if ( warningBoxLink ) {
// We don't know the exact localized name of Special:WhatLinksHere, thus use this as a heuristic
hasWhatLinksHere = warningBoxLink.includes( '/' + mw.config.get( 'wgPageName' ) ) &&
warningBoxLink.includes( mw.config.get( 'wgFormattedNamespaces' )[-1] );
}
$historyDiv = $( '<div>' )
.attr( 'id', 'inline-history' )
.attr( 'style', 'width: 100%; height: 200px; resize: vertical; overflow-x: hidden; overflow-y: scroll;' );
$historyHead = $( '<h2>' ).text( $( '#ca-history' ).text() );
if ( hasWhatLinksHere ) {
$whatLinksHereDiv = $( '<div>' )
.attr( 'id', 'inline-what-links-here' )
.attr( 'style', 'width: 100%; height: 200px; resize: vertical; overflow-x: hidden; overflow-y: scroll;' );
$whatLinksHereHead = $( '<h2>' ).text( $( '#t-whatlinkshere' ).text() );
getWhatLinksHere( pageName )
.done( function( $whatLinksHere ) {
$whatLinksHere.appendTo( $whatLinksHereDiv );
} );
}
getHistory( pageName )
.done( function( $pageHistory ) {
$pageHistory.appendTo( $historyDiv );
} );
$content
.append( $historyHead )
.append( $historyDiv );
if ( hasWhatLinksHere ) {
$content
.append( $whatLinksHereHead )
.append( $whatLinksHereDiv );
}
}
/**
* @param {string} pageName
* @return {jQuery.Promise}
* Resolved parameters:
* - {jQuery} The page history ul
*/
function getHistory( pageName ) {
var deferred = $.Deferred();
$.get( mw.util.wikiScript( 'index' ) + '?&action=history&useskin=vector&limit=50&title=' + mw.util.wikiUrlencode( pageName ) )
.done( function( html ) {
var historyTree = $.parseHTML( html ),
$historyTree = $( historyTree ),
$pageHistory = $historyTree.find( 'ul.mw-contributions-list' );
// Remove superfluous elements
$pageHistory.find( 'input' ).remove();
$pageHistory.find( '.mw-rollback-link' ).remove();
$pageHistory.find( '.mw-history-undo' ).remove();
$pageHistory.find( '.mw-thanks-thank-link' ).remove();
// Remove FlaggedRevs stuff
$pageHistory.find( '.fr-hist-basic-auto' ).remove();
$pageHistory.find( '.fr-hist-basic-user' ).remove();
$pageHistory.find( '.mw-fr-hist-difflink' ).remove();
// Remove restore links (Wikidata)
$pageHistory.find( 'a[href*="restore="]' ).remove();
// Remove (now) empty mw-changeslist-links
$pageHistory.find( 'span.mw-changeslist-links' ).each( function() {
var $this = $( this );
if ( $this.text() === '' ) {
$this.remove();
}
} );
// Remove the left over stuff after the last element in each history <li>.
$pageHistory.find( 'li' ).each( function() {
var $this = $( this ),
html;
if ( $this.children().length === 1 ) {
// The whole history line is wrapped (FlaggedRevs does that).
$this = $this.children();
}
html = $this.html();
$this.html( html.replace( />[^>]+$/, '>' ) );
} );
deferred.resolve( $pageHistory );
} )
.fail( function() {
deferred.reject();
} );
return deferred.promise();
}
/**
* @param {string} pageName
* @return {jQuery.Promise}
* Resolved parameters:
* - {jQuery} The what links here excerpt
*/
function getWhatLinksHere( pageName ) {
var deferred = $.Deferred();
$.get( mw.util.wikiScript( 'index' ) + '?useskin=vector&title=Special:WhatLinksHere/' + mw.util.wikiUrlencode( pageName ) )
.done( function( html ) {
var historyTree = $.parseHTML( html ),
$whatLinksHereTree = $( historyTree ),
$whatLinksHere = $whatLinksHereTree.find( 'ul#mw-whatlinkshere-list' );
deferred.resolve( $whatLinksHere );
} )
.fail( function() {
deferred.reject();
} );
return deferred.promise();
}
mw.hook( 'wikipage.content' ).add( function( $content ) {
mw.loader.using( [ 'mediawiki.util', 'mediawiki.interface.helpers.styles' ] )
.done( function () {
main( $content );
} );
} );
} )( mediaWiki, jQuery );