Snippets/Compare link

From mediawiki.org
How to use Snippets
List of Snippets
Compare link
Language(s): JavaScript , CSS
Compatible with: MediaWiki 1.17+ (Vector)

Description[edit]

Modify history pages changing the default "Compare selected versions" button to a link (bug 16165). This is useful to open diffs in a new window/tab. Based on script at en:User:Superm401/Compare link.js and work by User:Helder.wiki and others

Code[edit]

/**
 * Convert the "Compare selected versions" button to a link
 * (Based on [[w:en:User:Superm401/Compare_link.js]])
 * @source: https://www.mediawiki.org/wiki/Snippets/Compare_link
 * @rev: 2
 * @see: [[bugzilla:16165]]
 * 
 * Copyright 2006-2013 Matthew Flaschen ([[User:Superm401]]), [[User:Helder.wiki]]
 *
 * In addition to the GFDL and CC-BY-SA:
 * 
 * This function (compare link) is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This function is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * A copy of the GPL is available at https://www.gnu.org/licenses/gpl-2.0.txt .
 * 
 * By modifying [[Snippets/Compare_link]]:
 * You agree to dual-license your contributions under both the
 * GFDL (https://en.wikipedia.org/wiki/WP:GFDL) and version 2 of the GPL
 * (https://www.gnu.org/licenses/gpl-2.0.txt) or any later version
 * of the GPL published by the FSF.
 * 
 */
function fixCompare() {
	var	$histForm = $('#mw-history-compare'),
		$diffList = $('#pagehistory'),
		$buttons = $histForm.find('input.historysubmit'),
		buttonText, $compareLink;
		if ( $buttons.length === 0 ) {
			// Only one version, so do nothing
			return;
		}
                buttonText = $buttons
			.remove()
			.first().val();
		$compareLink = $('<a></a>', {
			'class': 'compare-link',
			'text': buttonText
		});
	$histForm
		.prepend($compareLink)
		.append($compareLink.clone());
	var updateCompare = function(){
		var	$radio = $histForm.find('input[type=radio]:checked'),
			genLink = mw.config.get('wgScript')
				+ '?title=' + mw.util.wikiUrlencode( mw.config.get( 'wgPageName' ) )
				+ '&diff=' + $radio.eq(0).val()
				+ '&oldid=' + $radio.eq(1).val();
		$('.compare-link').each(function() {
			$(this).attr('href', genLink);
		});
	};
	updateCompare();
	$diffList.change(updateCompare);
}
 
if ( mw.config.get('wgAction') === 'history' ) {
	mw.util.addCSS( '.compare-link { border-radius:5px; color:black; text-decoration:none; border-width:1px 2px 2px 1px; border-style:solid; border-color:#DDDDDD #BBBBBB #BBBBBB #DDDDDD; padding:0.2em 1em; background-color:#EEEEEE; white-space:nowrap; } .compare-link:active{ border-width:0.1em; margin:0.1em; }' );
	$(fixCompare);
}