User:Headbomb/citations.js

    From Wikipedia, the free encyclopedia
    Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
    /*  _____________________________________________________________________________
     * |                                                                             |
     * |                    === 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 = $( '<span id="loader"></span>');
    	}
    	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 );
    }