MediaWiki:Gadget-SidebarTranslate.js

Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet ExplorerSafari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.

/*  _____________________________________________________________________________
 * |                                                                             |
 * |                    === CẢNH BÁO: TIỆN ÍCH TOÀN CỤC ===                      |
 * |             Thay đổi trang này có thể ảnh hưởng đến nhiều người dùng.       |
 * | Xin thảo luận trong trang thảo luận trước khi thay đổi nội dung của trang.  |
 * |_____________________________________________________________________________|
 *
 * Nhập từ [[en:User:Equazcion/SidebarTranslate.js]] ngày 27 tháng 11 năm 2013
 * Xem [[en:User:Equazcion/SidebarTranslate]]
 * Đồng bộ để vô hiệu hóa lệnh importStylesheet.
 */

var plang = $('#p-lang').hide();

$(document).ready( function() {
	function sort( a, b ) {
		return ( $(b).text() ) < ( $(a).text() ) ? 1 : -1;
	}
	var plangUL = plang.find('ul');
	var interwikis = plangUL.find('li[class^="interlanguage-link"]').detach();
	if ( interwikis.length > 0 ) {
		// importStylesheet('en:User:Equazcion/SidebarTranslate.css'); // tải riêng trong tiện ích
		var langReg = /(.*? – )?(.*)/;
		var gtPre = 'http://translate.google.com/translate?hl=vi&sl=auto&tl=vi&u=';
		var hardLangs = {
			'lumbaart': 'Lombard', 
			'tarandíne': 'Tarantino', 
			'vèneto': 'Venetian', 
			'Беларуская (тарашкевіца)': 'Belarusian (Taraškievica)',
			'буряад': 'Buryat', 
			'лакку': 'Lak'
		};
		var googleSupported = ['Afrikaans', 'Albanian', 'Arabic', 'Armenian', 'Azerbaijani', 'Basque', 'Belarusian', 'Bengali', 'Bulgarian',
			'Catalan', 'Chinese', 'Croatian', 'Czech', 'Danish', 'Dutch', 'English', 'Esperanto', 'Estonian', 'Filipino', 'Finnish',
			'French', 'Galician', 'Simple English', 'Georgian', 'German', 'Greek', 'Haitian', 'Creole', 'Hebrew', 'Hindi', 'Hungarian', 'Icelandic',
			'Indonesian', 'Irish', 'Italian', 'Japanese', 'Javanese', 'Kannada', 'Korean', 'Khmer', 'Latin', 'Latvian', 'Lithuanian',
			'Macedonian', 'Malay', 'Maltese', 'Marathi', 'Norwegian', 'Norwegian (bokmål)', 'Norwegian Nynorsk', 'Persian', 'Polish',
			'Portuguese', 'Romanian', 'Russian', 'Serbian', 'Slovak', 'Slovenian', 'Spanish', 'Swahili', 'Swedish', 'Tamil',
			'Telugu', 'Thai', 'Turkish', 'Ukrainian', 'Urdu', 'Vietnamese', 'Welsh', 'Yiddish'];
		
		interwikis.find('a').each( function() {
			var $this = $(this);
			var origLangName = $this.text();
			var langMatches = langReg.exec( $this.attr('title') );
			if ( langMatches != null ) {
				var newLangName = (langMatches[2] in hardLangs) ? hardLangs[ langMatches[2] ] : langMatches[2];
					if ( $this.attr('hreflang') == 'be-x-old' ) newLangName = 'Belarusian (Taraškievica)'; // Doesn't match object key for some reason
				var hrefs = $this.attr('href');
				var origLangPre = (langMatches[1] == undefined) ? '' : langMatches[1];
				$this.text( newLangName ).removeAttr('lang style').attr( 'title', origLangPre + origLangName );
				var unsup = ( googleSupported.indexOf(langMatches[2]) < 0 ) ? '#FA8540' : '#4085FA';
				$('<a/>', {
					'text': 'G',
					'class': 'external gTrans',
					'target': '_blank',
					'href': gtPre + hrefs,
					'title': 'Google Dịch: ' + newLangName + ' sang tiếng Việt',
					'style': 'color:' + unsup + ';'
				}).insertAfter( $this ).before(' ');
				if ( $this.text().length > 17 )  $this.html( $this.html().replace('-','- ').replace(' ', '<br />') );
				$this.siblings('.gTrans').hover(
					function() { $(this).css( {'background-color': unsup, 'color': 'white'} ) },
					function() { $(this).css( {'background-color': 'transparent', 'color': unsup} ) }
				);
				$this.parent('li').hover(
					function() { $(this).find('.gTrans').fadeIn(200).css('margin-left','0') },
					function() { $(this).find('.gTrans').fadeOut(100).css('margin-left','5px') }
				);
			}
		});
		plangUL.prepend( interwikis.sort(sort) );
	}
	plang.show();
});