User:Headbomb/citations.js

/* _____________________________________________________________________________

* | |

* | === WARNING: GLOBAL GADGET FILE === |

* | Changes to this page affect many users. |

* | Please discuss changes on the talk page or on WT:Gadget before editing. |

* |_____________________________________________________________________________|

*

* Imported from version 1.0 as of 17:18, 9 April 2011 (UTC) from User:Smith609/citations.js

* Adds a "Citation bot" link to the toolbox, and a button beneath edit fields, see User:Smith609/citations

*/

// @Version 1.0 - Adds an "Expand citations" link to the toolbox, and a button beneath edit fields.

// @Version 1.1 - Modify gadget to use jQuery and Citation Bot's new gadgetapi on Tool Labs

// @Version 1.2 - Make use of new oojs-ui widget style

var $spinnerspan;

var cbButton;

function addCBToToolbox() {

if ( mw.config.get( 'wgCanonicalNamespace' ) !== 'Special' ) {

var pTb = document.getElementById("p-tb");

if ( !pTb ) {

return;

}

var escPageName = encodeURIComponent( mw.config.get( 'wgPageName' ));

mw.util.addPortletLink("p-tb", "//citations.toolforge.org/process_page.php?edit=toolbar&slow=1&page="+escPageName, 'Expand citations', 't-citationbot', "Expand citations and fix common formatting errors", 'a');

}

}

// Add a citation bot button next to the "Show changes" button

function addCitationButton() {

if ( document.getElementById( 'wpDiff' ) ) {

var diff = document.getElementById( 'wpDiffWidget' );

cbButton = new OO.ui.ButtonWidget();

cbButton.setElementId( 'wpCitations' )

.setIcon( 'articleCheck' )

.setLabel( 'Citations' )

.setFlags( 'secondary' );

cbButton.on( 'click', function () {

$.ajax( {

type: 'POST',

url: 'https://citations.toolforge.org/gadgetapi.php?slow=1',

data: {

text: $( '#wpTextbox1' ).textSelection( 'getContents' ),

summary: $( '#wpSummary' ).textSelection( 'getContents' )

},

beforeSend: function() {

$( cbButton.$element ).replaceWith( $spinnerspan );

},

success: function( data ) {

expandedText = data.expandedtext;

editSummary = data.editsummary;

$( '#loader' ).replaceWith( cbButton.$element );

if ( expandedText ) {

// Populate text box with received expanded text

$( '#wpTextbox1' ).textSelection( 'setContents', expandedText );

// Populate edit summary textbox with received edit summary

$( '#wpSummary' ).textSelection( 'setContents', editSummary );

// Click 'Show preview' button

$( '#wpDiff' ).click();

} else {

$( '#loader' ).replaceWith( cbButton.$element );

alert( 'Error: Replacement text empty' );

}

},

error: function( data ) {

$( '#loader' ).replaceWith( cbButton.$element );

alert( 'Error: Citations request failed' );

}

} );

} );

cbButton.$element.insertBefore( $(diff.nextSibling) );

}

}

// Add a button to allow expanding citations in the text in the edit textbox

mw.hook( 'wikipage.editform' ).add( function() {

if( !$spinnerspan ) {

$spinnerspan = $( '');

}

if ( document.images ) {

// Loading gif when Citations request is processing

var spinner = new Image();

spinner.src = "//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif";

$spinnerspan.append( spinner );

}

if( $('#wpCitations').length === 0 ){

mw.loader.using( [ 'oojs-ui-core', 'oojs-ui.styles.icons-content', 'jquery.textSelection' ] ).then( addCitationButton );

}

} );

// Add a toolbox button that runs Citation Bot on the most recent saved revision of the page

if ( $.inArray( mw.config.get( 'skin' ), ['monobook', 'modern', 'vector'] ) !== -1 ) {

$( addCBToToolbox );

}