MediaWiki:Gadget-SidebarTranslate.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 User:Equazcion/SidebarTranslate.js on 2013-11-27

* See User:Equazcion/SidebarTranslate

* Note that when syncing to disable the importStylesheet call.

*/

$( document ).ready( function () {

'use strict';

var $plang, $plangUL, $interwikis,

langReg, gtPre, hardLangs, googleSupported, sortByText;

$plang = $( '#p-lang, #p-lang-btn' );

$plangUL = $plang.find( 'ul' );

$interwikis = $plangUL.find( 'li.interlanguage-link' );

if ( $interwikis.length === 0 ) {

return;

}

$plang.hide();

$interwikis.detach();

langReg = /(.* – )?(.*)/;

gtPre = 'http://translate.google.com/translate?hl=en&sl=auto&tl=en&u=';

hardLangs = {

'lumbaart': 'Lombard',

'tarandíne': 'Tarantino',

'vèneto': 'Venetian',

'беларуская (тарашкевіца)\u200E': 'Belarusian (Taraškievica)',

'буряад': 'Buryat',

'лакку': 'Lak',

'भोजपुरी': 'Bhojpuri',

'تۆرکجه': 'Azerbaijani (South)'

};

googleSupported = ['Afrikaans', 'Albanian', 'Arabic', 'Armenian', 'Azerbaijani', 'Basque', 'Belarusian', 'Bengali', 'Bulgarian',

'Catalan', 'Chinese', 'Croatian', 'Czech', 'Danish', 'Dutch', 'English', 'Esperanto', 'Estonian', 'Filipino', 'Finnish',

'French', 'Galician', '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.interlanguage-link-target' ).each( function() {

var $linkTarget, origLangName, langMatches,

newLangName, hrefs, origLangPre, $langName,

unsup, $googleLink;

$linkTarget = $( this );

langMatches = langReg.exec( $linkTarget.attr( 'title' ) );

if ( langMatches === null ) {

return;

}

origLangName = $linkTarget.text();

newLangName = ( langMatches[2] in hardLangs ) ? hardLangs[ langMatches[2] ] : langMatches[2];

hrefs = $linkTarget.attr( 'href' );

origLangPre = ( langMatches[1] === undefined ) ? '' : langMatches[1];

$langName = $( '' )

.attr( 'lang', 'en' )

.text( newLangName );

$linkTarget

.text( '' )

.append( $langName )

.attr( 'title', origLangPre + origLangName );

unsup = ( googleSupported.indexOf( langMatches[2]) < 0 ) ? '#FA8540' : '#4085FA';

$googleLink = $( '', {

'text': 'G',

'class': 'external gTrans',

'target': '_blank',

'href': gtPre + hrefs,

'title': 'Google Translate: ' + newLangName + ' to English',

'style': 'color:' + unsup + ';',

'lang': 'en'

} );

$googleLink

.insertAfter( $linkTarget )

.before( ' ' );

if ( $langName.text().length > 17 ) {

$langName.html( $langName.html().replace( '-', '- ' ).replace( ' ', '
' ) );

}

$linkTarget.siblings( '.gTrans' ).hover(

function() {

$( this ).css( { 'background-color': unsup, 'color': 'white' } );

},

function() {

$( this ).css( { 'background-color': 'transparent', 'color': unsup } );

}

);

$linkTarget.parent( 'li' ).hover(

function() {

$( this ).find( '.gTrans' ).fadeIn( 200 ).css( 'margin-left', '0' );

},

function() {

$( this ).find( '.gTrans' ).fadeOut( 100 ).css( 'margin-left', '5px' );

}

);

} );

sortByText = function ( a, b ) {

return ( $( b ).text() ) < ( $( a ).text() ) ? 1 : -1;

};

$plangUL.prepend( $interwikis.sort( sortByText ) );

// If gray links added by Content Translation exist,

// move them back to the top

$plangUL.find( '.cx-new-interlanguage-link' )

.detach()

.prependTo( $plangUL );

$plang.show();

} );